Signální státy | |
public define int AUTOMATIC = -1 | Stav signálu automaticky zpracovává Trainz. |
public define int RED = 0 | Signál je červený (stav zastavení). |
public define int YELLOW = 1 | Signál je žlutý (stav upozornění). |
public define int GREEN = 2 | Signál je zelený (volný stav). |
Sdílené státy | |
public define int EX_STOP = 0 | Stav prodlouženého zastavení. Signál je červený. |
public define int EX_STOP_THEN_CONTINUE = 1 | Alternativa pro stop – aktivum specifické. |
public define int EX_CAUTION = 4 | Další signál je červený. |
public define int EX_ADVANCE_CAUTION = 7 | Další signál je žlutý. |
public define int EX_PROCEED = 8 | Stav rozšířeného postupu. Signál je zelený. |
Specifické státy signalizace trasy | |
public define int EX_CAUTION_LEFT = 2 | Další křižovatka je ponechána a další signál je červený. |
public define int EX_CAUTION_RIGHT = 3 | Další křižovatka je vpravo a další signál je červený. |
public define int EX_CAUTION_LEFT_2 = 13 | Další křižovatka je druhá vlevo a další signál je červený. |
public define int EX_CAUTION_RIGHT_2 = 14 | Další křižovatka je druhá vpravo a další signál je červený. |
public define int EX_CAUTION_LEFT_3 = 15 | Další křižovatka je 3. vlevo a další signál je červený. |
public define int EX_CAUTION_RIGHT_3 = 16 | Další křižovatka je 3. vpravo a další signál je červený |
public define int EX_ADVANCE_CAUTION_LEFT = 11 | Další křižovatka je ponechána a další signál je žlutý. |
public define int EX_ADVANCE_CAUTION_RIGHT = 12 | Další křižovatka je vpravo a další signál je žlutý. |
public define int EX_ADVANCE_CAUTION_LEFT_2 = 17 | Další křižovatka je druhá vlevo a další signál je žlutý. |
public define int EX_ADVANCE_CAUTION_RIGHT_2 = 18 | Další křižovatka je druhá vpravo a další signál je žlutý. |
public define int EX_ADVANCE_CAUTION_LEFT_3 = 19 | Další křižovatka je 3. vlevo a další signál je žlutý. |
public define int EX_ADVANCE_CAUTION_RIGHT_3 = 20 | Další křižovatka je 3. vpravo a další signál je žlutý. |
public define int EX_PROCEED_LEFT = 5 | Další křižovatka je ponechána a další signál je zelený. |
public define int EX_PROCEED_RIGHT = 6 | Další křižovatka je vpravo a další signál je zelený. |
public define int EX_PROCEED_LEFT_2 = 21 | Další křižovatka je druhá vlevo a další signál je zelený. |
public define int EX_PROCEED_RIGHT_2 = 22 | Další křižovatka je 2. vpravo a další signál je zelený. |
public define int EX_PROCEED_LEFT_3 = 23 | Další křižovatka je 3. vlevo a další signál je zelený. |
public define int EX_PROCEED_RIGHT_3 = 24 | Další křižovatka je 3. vpravo a další signál je zelený. |
Specifické státy pro rychlostní signalizaci | |
public define int EX_SLOW = 9 | Postupujte pomalou rychlostí. |
public define int EX_MEDIUM = 10 | Pokračujte střední rychlostí. |
public define int EX_RESTRICTED = 25 | Postupujte omezenou rychlostí. |
public define int EX_LIMITED = 26 | Postupujte limitovanou rychlostí. |
public define int EX_APPROACH_LIMITED = 27 | Přibližte se k dalšímu signálu omezenou rychlostí. |
public define int EX_APPROACH_MEDIUM = 28 | Přibližte se k dalšímu signálu střední rychlostí. |
public define int EX_APPROACH_SLOW = 29 | Přibližte se k dalšímu signálu pomalou rychlostí. |
public define int EX_APPROACH_RESTRICTED = 30 | Přibližte se k dalšímu signálu omezenou rychlostí. |
public define int EX_LIMITED_APPROACH = 31 | Pokračujte omezenou rychlostí připravenou zastavit na další signál |
public define int EX_MEDIUM_APPROACH = 32 | Pokračujte střední rychlostí připravenou k zastavení na další signál |
public define int EX_SLOW_APPROACH = 33 | Pokračujte pomalou rychlostí připravenou zastavit na další signál |
public define int EX_LIMITED_APPROACH_MEDIUM = 34 | Pokračujte omezenou rychlostí, k dalšímu signálu se přibližujte střední rychlostí |
public define int EX_LIMITED_APPROACH_SLOW = 35; | Pokračujte omezenou rychlostí, k dalšímu signálu se přibližujte pomalou rychlostí |
public define int EX_LIMITED_APPROACH_RESTRICTED = 36 | Pokračujte omezenou rychlostí, přibližte se k dalšímu signálu omezenou rychlostí |
public define int EX_MEDIUM_APPROACH_SLOW = 37; | Pokračujte střední rychlostí, k dalšímu signálu se přibližujte pomalou rychlostí |
public define int EX_MEDIUM_APPROACH_RESTRICTED = 38 | Pokračujte střední rychlostí, k dalšímu signálu se přibližte omezenou rychlostí |
public define int EX_SLOW_APPROACH_RESTRICTED = 39 | Pokračujte pomalou rychlostí, přibližte se k dalšímu signálu omezenou rychlostí |
mesh-table
{
default
{
mesh "model.im"
auto-create 1
}
}
signals
{
0
{
light 2
}
8
{
light 0
speed 8.3333
}
}
lights
{
0
{
corona "corona_green.tga"
}
1
{
corona "corona_yellow.tga"
}
2
{
corona "corona_red.tga"
}
}
Jak Vytvořit Signalizaci
Signální systém nyní ví a používá mnohem více stavů, než tomu bylo dříve. To znamená, že musíte být mnohem opatrnější, abyste do svých signálů zahrnuli správné stavy, než jste to dělali dříve.
Pokud má být signál tolerantní, zahrňte spíše stav ‘1’ než stav ‘0’. Autopilot s ním nyní zachází jako s tolerantním signálem, projede kolem něj a v další části zařadí frontu za vlak.
Vzdálený signál by neměl vůbec obsahovat stav „0“ nebo „1“.
Pevnou vzdálenost lze provést zadáním „vzdálené 1“ a zahrnutím pouze stavu „4“. Všechny blížící se vlaky (bez ohledu na to, zda je linka před nimi jasná nebo ne) zpomalí, když se k ní blíží.
Opakovač by neměl zobrazovat stav „0“ – místo toho použijte stav „1“, jinak se autopilot zastaví u opakovače, nikoli u signálu, který se opakuje.
Některé signalizační systémy (jako jsou signalizační systémy v kabině nebo automatické systémy řízení vlaků) používají dvě označení nebezpečí za vlakem, protože nemohou zabránit vlakům projet začátkem bloku, pouze je zastavit, jakmile vstoupí. Chcete-li toto chování reprodukovat, zahrňte do signálu stav „0“ i stav „1“ a použijte značku dvojitého blokování. Tím se získá (povolený) bezpečnostní blok s indikací absolutního zastavení na jeho konci, který by měl zajistit správné chování pro lidského řidiče i autopilota.
Pokud chcete konkrétní stát, ale nemáte pro něj světlo, použijte „světlo -1“. To stačí k tomu, aby byl stav platný, ale nepoužívejte pro tento stav světlo.
Pokud nezadáte vůbec žádné stavy, předpokládá se, že se jedná o signál stylu Pre-v1.3, který může zobrazit Stop, Caution a Proceed prostřednictvím příloh a.red, a.orange a a.green. Toto chování je zastaralé – takže se na něj prosím nespoléhejte. V současné době se jeho hlavním využitím jeví zarážky vyrovnávací paměti a pevné vzdálené desky, které stejně nemají připojovací body. Navrhuji využít výhod chování „light -1“ k přidání konkrétních relevantních stavů k tomuto druhu signálů. (Pevné zarážky vyrovnávací paměti by měly mít pouze stav 0, pouze pevné vzdálené stavy 4 a značku „vzdálená 1“).
Požadované soubory
config.txt – konfigurační soubor pro dílo.
thumb.jpg – obrázek miniatury tohoto díla. Jpeg 240×180.
opacity.tga, opacity-opacity.texture.txt, concrete.texture.txt, concrete.tga, signal.tga – soubory textury použité pro signální aktivum. Další informace najdete v části o souborech Texture.txt na straně 96.
corona_green.tga, corona_red.tga, corona_white.tga, corona_yellow.tga – textury koróny používané k osvětlení signálů.
qr_01.im – soubor sítě indexovaný signálem.
signals
{
1
{
light 2
speed 6.71
}
4
{
light 1
}
7
{
light 1
flash 1
flash-offset 0
}
8
{
light 0
}
}
lights
{
0
{
corona "corona_green.tga"
}
1
{
corona "corona_yellow.tga"
}
2
{
corona "corona_red.tga"
}
}
signals
{
0
{
light 7
}
2
{
light 6,0,1,2,3,4
}
4
{
light 6
}
}
Podíváme-li se na výše uvedený příklad, pod nadpisem „signály“ vidíme stavy, které je signál schopen zobrazit v levém sloupci. Z tohoto výpisu vidíme, že tento signál je schopen zobrazit aspekty 0, 2 a 4.
- Když je zobrazen aspekt 0 (stop), aktivuje se světelný bod 7.
- Když se zobrazí aspekt 2 (upozornění vlevo), aktivují se světelné body 6,0,1,2,3,4
- Když je zobrazen aspekt 4 (pozor), je aktivován světelný bod 6.
Světla
Každý světelný bod musí mít vlastní přidruženou koronu. Korony jsou uloženy v adresáři každého signálního objektu vedle jeho textur. Příklady byly zabaleny do souboru zip, ve kterém byl tento dokument umístěn.
Podíváme-li se na níže uvedený příklad, pod nadpisem „světla“ vidíme světelné body, které jsou připojeny k 3D modelu. Tento model má 10 z nich, jsou pojmenovány a.light0 až a.light9.
Ze sekce signálů víme, že když je zobrazen aspekt 0 (stop), aktivuje se světelný bod 7.
Při pohledu na výňatek výše …
- Když je aktivován světelný bod 7, zobrazí se koronově červená.
- Když se zobrazí aspekt 2 (upozornění vlevo), aktivují se světelné body 6,0,1,2,3,4
- Když je aktivován světelný bod 6, zobrazí se corona_yellow.
- Když jsou aktivovány světelné body 0 4, každý zobrazuje corona_white.
Umístění signálu je velmi důležité pro správnou funkci systému. Při signalizaci mapy je třeba vzít v úvahu některá pravidla, která, pokud nebudou dodržena, mohou způsobit problémy se zobrazením správných aspektů.
Existují také různé odchylky od prototypového provozu, které je třeba vzít v úvahu při navrhování nové signalizace a také při její instalaci do mapy.
lights
{
0
{
corona corona_white.tga
}
1
{
corona corona_white.tga
}
2
{
corona corona_white.tga
}
3
{
corona corona_white.tga
}
4
{
corona corona_white.tga
}
5
{
corona corona_green.tga
}
6
{
corona corona_yellow.tga
}
7
{
corona corona_red.tga
}
8
{
corona corona_white.tga
}
9
{
corona corona_white.tga
}
}
Nastavení Korony
Primary=corona_green.tga
Alpha=corona_green.tga
Tile=st
lights
{
0
{
corona corona_green.texture
}
1
{
corona corona_red.texture
}
2
{
corona corona_yellow.texture
}
}
Jelikož systém bude používat automatické nastavení směru korony, je nesmírně důležité mít správně nastaveny osy pro bod korony a.light0…. a to osy x,y,z
Další důležitý aspekt je velikost textury korony ta je v 256 x 256 px v tomto rámečku použijeme koronu tak velkou aby byla velikosti ideální pro svůj účel. Nastavení rozměrů pomocí efektu v tomto případě nelze pokud se jedná o signál. Zde je příklad velikosti korony.
Další možné kombinace skriptu
script "signal.gs"
class "Signal"
function "TrackSignal"
always-controlled 1
home 1
repeater 0
double-blocking 0
trackside 0
lamp0
{
mesh-asset <kuid2:000000:000:1>
mesh "inc/std_green.trainzmesh"
orientation 4.7,0,0
auto-create 0
does-cast-shadows 0
att-parent "target"
att "a.light0"
effects
{
glow0
{
kind "corona"
att "a.glow"
texture-kuid <kuid2:000000:000:1>
object-size 0.05
max-size-mul 0.5
min-distance 50
max-distance 1000
mul-distance -50
max-intensity 4
directional 1
}
lamp0-tex
{
kind "texture-replacement"
texture "lamp_inc_atlas.texture"
}
}
}
Příklad Skriptu řízení signalizace
include "signalSig.gs"
class SignalExt isclass SignalSIG {
Asset lampLib;
public void Init(void) {
inherited();
InitSignal();
lampLib = GetAsset().FindAsset("lamp-lib");
}
public void SetStyleAppearence(int headStyle, int hoodStyle, int lensStyle) {
// HEAD -------------------------------------------
// Square
SetMeshVisible("headbg0-0", headStyle == 0, 0);
SetMeshVisible("headbg1-0", headStyle == 0, 0);
// Round
SetMeshVisible("headbg0-1", headStyle == 1, 0);
SetMeshVisible("headbg1-1", headStyle == 1, 0);
// Oval
SetMeshVisible("headbg0-2", headStyle == 2, 0);
SetMeshVisible("headbg1-2", headStyle == 2, 0);
// HOOD -------------------------------------------
// Multi
SetMeshVisible("head0-0-lod0", hoodStyle == 0, 0);
SetMeshVisible("head0-0-lod1", hoodStyle == 0, 0);
SetMeshVisible("head0-0-lod2", hoodStyle == 0, 0);
SetMeshVisible("head1-0-lod0", hoodStyle == 0, 0);
SetMeshVisible("head1-0-lod1", hoodStyle == 0, 0);
SetMeshVisible("head1-0-lod2", hoodStyle == 0, 0);
// Single
SetMeshVisible("head0-1-lod0", hoodStyle == 1, 0);
SetMeshVisible("head0-1-lod1", hoodStyle == 1, 0);
SetMeshVisible("head0-1-lod2", hoodStyle == 1, 0);
SetMeshVisible("head1-1-lod0", hoodStyle == 1, 0);
SetMeshVisible("head1-1-lod1", hoodStyle == 1, 0);
SetMeshVisible("head1-1-lod2", hoodStyle == 1, 0);
// LENS -------------------------------------------
SetFXTextureReplacement("lamp0-tex", lampLib, lensStyle);
SetFXTextureReplacement("lamp1-tex", lampLib, lensStyle);
SetFXTextureReplacement("lamp2-tex", lampLib, lensStyle);
SetFXTextureReplacement("lamp3-tex", lampLib, lensStyle);
SetFXTextureReplacement("lamp4-tex", lampLib, lensStyle);
SetFXTextureReplacement("lamp5-tex", lampLib, lensStyle);
SetFXTextureReplacement("lamp6-tex", lampLib, lensStyle);
SetFXTextureReplacement("lamp6p-tex", lampLib, lensStyle);
}
public void SetLamp(int state) {
SetMeshVisible("lamp0", false, 0.0);
SetMeshVisible("lamp1", false, 0.0);
SetMeshVisible("lamp2", false, 0.0);
SetMeshVisible("lamp3", false, 0.0);
SetMeshVisible("lamp4", false, 0.0);
SetMeshVisible("lamp5", false, 0.0);
SetMeshVisible("lamp6", false, 0.0);
SetMeshVisible("lamp6p", false, 0.0);
StopMeshAnimation("lamp6p");
switch(state) {
case SIG_STOP:
SetMeshVisible("lamp2", true, 0.0);
SetMeshVisible("lamp5", true, 0.0);
break;
case SIG_CAUTION:
SetMeshVisible("lamp0", true, 0.0);
SetMeshVisible("lamp5", true, 0.0);
break;
case SIG_CAUTION_TURNOUT_RIGHT_1:
SetMeshVisible("lamp1", true, 0.0);
SetMeshVisible("lamp5", true, 0.0);
break;
case SIG_MEDIUM:
SetMeshVisible("lamp0", true, 0.0);
SetMeshVisible("lamp4", true, 0.0);
break;
case SIG_MEDIUM_TURNOUT_RIGHT_1:
SetMeshVisible("lamp1", true, 0.0);
SetMeshVisible("lamp4", true, 0.0);
break;
case SIG_CLEAR:
SetMeshVisible("lamp0", true, 0.0);
SetMeshVisible("lamp3", true, 0.0);
break;
case SIG_SHUNT:
SetMeshVisible("lamp2", true, 0.0);
SetMeshVisible("lamp5", true, 0.0);
SetMeshVisible("lamp6", true, 0.0);
break;
case SIG_SHUNT_RIGHT_1:
SetMeshVisible("lamp2", true, 0.0);
SetMeshVisible("lamp5", true, 0.0);
SetMeshVisible("lamp6", true, 0.0);
break;
case SIG_SHUNT_AHEAD:
SetMeshVisible("lamp2", true, 0.0);
SetMeshVisible("lamp5", true, 0.0);
SetMeshVisible("lamp6p", true, 0.0);
StartMeshAnimationLoop("lamp6p");
break;
default:
SetMeshVisible("lamp2", true, 0.0);
PrintMessage("Signal Fault!", true);
break;
}
}
};