Začátkem tohoto roku mě syn zasvětil do úplných základů Lua scriptu - víc jsem nebyl schopen pobrat
. Od té doby se snažím tvořit nový script návěstidel.
Proč nový script?
Na původním Dušanově scriptu vidím určité věci, které by se dle mého názoru daly řešit jinak a to jak v zadání, tak i ve fungování scriptu - tímto rozhodně nekritizuji práci, kterou Vlastik (autor modelů návěstidel) a Dušan (autor scriptu) na návěstidlech a jejich scriptech odvedli - ve své době to byla špička. Bohužel Dušan posléze svoji pozici programátora scriptu opustil a tak slibně rozjetý pokus o kompletní scripty návěstidel CZ a SK odumřel.
Takže přibližně od poloviny ledna se ve svém volném čase podle nálady a chutě zabývám psaním nového scriptu. Mám zatím kód pro pětiznaké hlavní světelné návěstidlo. Nejdříve jsem zkoušel pochopit script Dušanův, to ale nikam nevedlo. Nakonec jsem to vzdal a za použití fragmentů jeho scriptu začal psát script svůj - stále se učím uvažovat po programátorsku
. Neodvažuji se tvrdit, že to někdy dotáhnu do nějakého konce ale chuť k tomu zatím mám. Co jsem však v začátcích neměl, byl model návěstidla. Proto jsem oslovil Romana, který uváděl, že model návěstidla k dispozici má a ten mi obratem vyhověl. Tím jsem měl vše co jsem potřeboval a mohl jsem začít tvořit a testovat.
Jako základ mé filozofie fungování návěstidel jsem zvolil stav kdy, v základu jsou všechna návěstidla neaktivní (zobrazují návěst STUJ). Aktivují se pouze návěstidla před kterými stojí vlak (bohužel na staničních kolejích na obou zhlavích - bohužel hra má jistá omezení, která nedokáži překonat). Při jízdě si vlak pak aktivuje dvě nejbližší návěstidla ve směru své jízdy. Aby AI vlaky nezastavovaly čelem v úrovni návěstidla (v reálu by strojvedoucí na návěstní znaky neviděl) posunul jsem umístění linku 0 před návěstidlo a přepnutí z návěsti dovolující jízdu na návěst STUJ oddálil časovou prodlevou. Při konzultacích mě Michal upozornil na možné problémy tohoto řešení, kdy vlak řízený hráčem může zastavit až za linkem 0, protože hráč neví jak daleko od návěstidla stavitel link 0 umístil a mohlo by dojít ke spuštění částí kódu scriptu, které ještě spuštěné být neměly. Po úvaze jsem přepracoval script a situaci vyřešil tak, že link 0 je i nadále umísťován cca 10 m před návěstidlo a AI vlaky u něj zastavují. V úrovni návěstidla se umístí link 1 a na něj sou navázány funkce scriptu které původně byly vázány na link 0. Pokud je za návěstidlem jedna čí více výhybek, tak na potřebné koleje se umístí další linky. Toto řešení je však také jistým kompromisem. Za tohoto stavu bohužel nefunguje rychlostní omezení zapsané v tabulce u jednotlivých linků. Jistím ale ne úplně plnohodnotným řešením pak je nutnost omezit rychlost "do odboček" změnou rychlosti přímo v koleji. AI pak projíždí vedlejší směr nižší rychlostí ale tuto rychlost nedodrží od úrovně návěstidla ale až od výhybek. Pro mě osobně je to akceptovatelné.
A) Co v současné době funguje?
1) Vlak si před sebou až na výjimky aktivuje (rozsvěcí) dvě nejbližší návěstidla.
2) Je možné zobrazit případné "doplňky pověšené na návěstidlo" jako jsou návěstní pruhy na stožáru návěstidla (návěstidlo platné jen pro vlaky nebo návěstidlo platní pro vlaky i posun), indikátorové tabulky apod. - u Romanova návěstidla je pouze jeden návěstní pruh ale dle zadaných rychlostních limitů na jednotlivé linky (koleje) se zobrazí nebo nezobrazí indikátorová tabulky s číslicí 3 nebo 5.
3) Respektuje se zaškrtnutí kolonky "Jen výstraha" - v tom případě se na návěstidle při návěsti povolující jízdu zobrazuje návěst VÝSTRAHA.
4) Respektuje se zaškrtnutí kolonky "Je předvěstí" - v tom případě návěstidlo předvěstí návěst následujícího návěstidla.
5) Po zapsání písmene "P" (škoda, že kód hry neumí přečíst písmena dvě) se na návěstidle rozsvítí návěst "PŘIVOLÁVACÍ NÁVĚST. Náhodně se zobrazí buď samostatné blikající bíle světlo nebo blikající bílé světlo současně s červeným světlem.
6) Po zapsání písmene "O" je návěst doplněna klidným bílým světlem - opakování návěsti - používá se u návěstidel umístěných na nedostatečnou zábrzdnou vzdálenost. V tomto případě se informace o návěsti návěstidla před tímto návěstidlem (s bílým světlem) posílá návěstidlu za tímto návěstidlem.
7) Po zapsání písmene "Z" je zajištěno uvolnění obsazeného úseku vlakem, který "zmizí v portálu" a zobrazení návěsti dovolující jízdu pro další vlak mířící do "portálu" nebo na trať za portálem.
8) Návěstidlo se přestavuje z návěsti dovolující jízdu vlaku na návěst STUJ s určitou časovou prodlevou po začátku přejíždění linku 1. Časová prodleva je závislá na rychlosti vlaku přejíždějícího link. Čelo hnacího vozidla ve hře pak nemíjí návěstidlo v době, kdy je již rozsvícena návěst STUJ.
9) Po zmáčnutí klávesy TAB a splnění podmínek hry se na návěstidle rozsvítí návěst "Jízda podle rozhledu". Lze dodělat, aby pokud je jízdní cesta volná svítila příslušná návěst rychlostní návěstní soustavy (je-li zaškrtnuto - je předvěstí) a pokud jízdní cesta volná není, aby svítila návěst "Jízda podle rozhledu".
10) Návěstidla správně reagují při jízdách vlaků oběma směry.
11) Po odpojení vozů a odjetí části původní soupravy zůstane kolej co na ní zůstala odpojená část obsazená. Obdobně zase po připojení odstavených vozů a uvolnění koleje je tato pro návěstidlo neobsazená.
12) Přenos návěsti návěstidla do návěstního opakovače na lokomotivě.
B) Co "zatím" není řešeno nebo asi ani řešit nepůjde:
1) Rozsvěcení návěstí pro posun na hlavním návěstidle při změně vlaku na posunový díl a obdobně obráceně při změně posunového dílu na vlak. Testoval jsem i možnost po trojitém zmáčnutí klávesy TAB spočívající v tom, že se místo návěstí pro jízdu vlaku bude rozsvěcovat návěst "Posun dovolen". Po dvojím zmáčnutí by se zase tento režim vypnul. Bohužel jak jsem psal, aby script dostal zprávu o zmáčnutí klávesy TAB musí být splněny určité podmínky a ty nejdou splnit vždy (omezení hry) a proto tento způsob asi nebude použitelný. Dále jsem zatím neúspěšně zkoušel poslat scriptu návěstidla zprávu ze scriptu scénáře.
2) Při stojícím vozidle na dopravní koleji ve stanici ze které je jízdní cesta postavena na tratě v obou směrech - rozsvícení návěsti dovolující jízdu pouze ve směru budoucí jízdy vozidla - půjde-li to vůbec.
3) Pokud je dle scénáře ukončená jízda vlaku u nějakého návěstidla (např. Lc1) a dále vlak pokračuje jízdou zpět (třeba po přestavení výhybky jízdou na jinou kolej), tak nefunguje blokování návěstidla Lc1 (nerozsvícení návěsti dovolující jízdu) a automaticky dle trasy dané scénářem aktivace (rozsvícení návěsti dovolující jízdu) návěstidla ve směru opačném.
4) Řešeny jsou zatím hlavní návěstidla pro jednokolejné tratě. Autoblok, předvěsti, návěstidla pro posun přijdou případně na řadu později.
5) Samostatnou kapitolou by pak byly též skupinová návěstidla - návěstidla platná pro skupinu kolejí.
6) A samozřejmě i mechaniky.
C) Co bohužel nedokážu:
1) Zajistit kompatibilitu se současnými návěstidly.
2) Zapracovat do scriptu návěsti používané na ŽSR - neznám dnešní návěstní předpisy ŽSR.
Některé funkce co popisuji výše jsou patrny na několika videích z testů návěstidel:
https://www.youtube.com/watch?v=dod9wi0aQ5c
https://www.youtube.com/watch?v=sTiFyFQP4os
https://www.youtube.com/watch?v=-0LhMUjjNE0
Tak, teď víte to podstatné, jak na tom se scriptem jsem, co script umí, neumí a asi umět nebude. Mě by však zajímalo co si o tom myslíte. Má smysl abych v načatém díle pokračoval? A pokud ano, tak jakou cestou - link 0 před návěstidlem, link 1 v úrovni návěstidla nebo pokračovat po původní cestě s linkem 0 v úrovni návěstidla? Doba k tomu, aby se script dal začít veřejně používat je ještě hodně, hodně vzdálená. Jsem teprve na začátku. Přesto bych nerad plýtval energií na něčem co nikoho nebude oslovovat.
Na vaše případné odpovědi či dotazy budu reagovat dle svých časových možností (práce, rodina, dovolená apod.), tak mějte prosím se mnou případně trpělivost.