Terminologie: signals

Odhadovaná doba čtení: 5 min

Signální státy

 
public define int AUTOMATIC = -1Stav signálu automaticky zpracovává Trainz.
public define int RED = 0Signál je červený (stav zastavení).
public define int YELLOW = 1Signál je žlutý (stav upozornění).
public define int GREEN = 2Signál je zelený (volný stav).

Sdílené státy

 
public define int EX_STOP = 0Stav prodlouženého zastavení. Signál je červený.
public define int EX_STOP_THEN_CONTINUE = 1Alternativa pro stop – aktivum specifické.
public define int EX_CAUTION = 4Další signál je červený.
public define int EX_ADVANCE_CAUTION = 7Další signál je žlutý.
public define int EX_PROCEED = 8Stav rozšířeného postupu. Signál je zelený.

Specifické státy signalizace trasy

 
public define int EX_CAUTION_LEFT = 2Další křižovatka je ponechána a další signál je červený.
public define int EX_CAUTION_RIGHT = 3Další křižovatka je vpravo a další signál je červený.
public define int EX_CAUTION_LEFT_2 = 13Další křižovatka je druhá vlevo a další signál je červený.
public define int EX_CAUTION_RIGHT_2 = 14Další křižovatka je druhá vpravo a další signál je červený.
public define int EX_CAUTION_LEFT_3 = 15Další křižovatka je 3. vlevo a další signál je červený.
public define int EX_CAUTION_RIGHT_3 = 16Další křižovatka je 3. vpravo a další signál je červený
public define int EX_ADVANCE_CAUTION_LEFT = 11Další křižovatka je ponechána a další signál je žlutý.
public define int EX_ADVANCE_CAUTION_RIGHT = 12Další křižovatka je vpravo a další signál je žlutý.
public define int EX_ADVANCE_CAUTION_LEFT_2 = 17Další křižovatka je druhá vlevo a další signál je žlutý.
public define int EX_ADVANCE_CAUTION_RIGHT_2 = 18Další křižovatka je druhá vpravo a další signál je žlutý.
public define int EX_ADVANCE_CAUTION_LEFT_3 = 19Další křižovatka je 3. vlevo a další signál je žlutý.
public define int EX_ADVANCE_CAUTION_RIGHT_3 = 20Další křižovatka je 3. vpravo a další signál je žlutý.
public define int EX_PROCEED_LEFT = 5Další křižovatka je ponechána a další signál je zelený.
public define int EX_PROCEED_RIGHT = 6Další křižovatka je vpravo a další signál je zelený.
public define int EX_PROCEED_LEFT_2 = 21Další křižovatka je druhá vlevo a další signál je zelený.
public define int EX_PROCEED_RIGHT_2 = 22Další křižovatka je 2. vpravo a další signál je zelený.
public define int EX_PROCEED_LEFT_3 = 23Další křižovatka je 3. vlevo a další signál je zelený.
public define int EX_PROCEED_RIGHT_3 = 24Další křižovatka je 3. vpravo a další signál je zelený.

Specifické státy pro rychlostní signalizaci

 
public define int EX_SLOW = 9Postupujte pomalou rychlostí.
public define int EX_MEDIUM = 10Pokračujte střední rychlostí.
public define int EX_RESTRICTED = 25Postupujte omezenou rychlostí.
public define int EX_LIMITED = 26Postupujte limitovanou rychlostí.
public define int EX_APPROACH_LIMITED = 27Přibližte se k dalšímu signálu omezenou rychlostí.
public define int EX_APPROACH_MEDIUM = 28Přibližte se k dalšímu signálu střední rychlostí.
public define int EX_APPROACH_SLOW = 29Přibližte se k dalšímu signálu pomalou rychlostí.
public define int EX_APPROACH_RESTRICTED = 30Přibližte se k dalšímu signálu omezenou rychlostí.
public define int EX_LIMITED_APPROACH = 31Pokračujte omezenou rychlostí připravenou zastavit na další signál
public define int EX_MEDIUM_APPROACH = 32Pokračujte střední rychlostí připravenou k zastavení na další signál
public define int EX_SLOW_APPROACH = 33Pokračujte pomalou rychlostí připravenou zastavit na další signál
public define int EX_LIMITED_APPROACH_MEDIUM = 34Pokrač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 = 36Pokrač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 = 38Pokračujte střední rychlostí, k dalšímu signálu se přibližte omezenou rychlostí
public define int EX_SLOW_APPROACH_RESTRICTED = 39Pokrač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;
        }
    }
};
Byl tento článek užitečný?
Nelíbí 0
Zobrazeno: 62
Back to top button