5. března 2019

Znáte to, když vývoj projektu jde časově přesně podle představ? Já tedy ne :D

V minulém týdnu jsem psal o tom, že do neděle (3. 3.) budu mít hotové výjezdy vlaků z depa. Vše šlo podle plánu, akorát pak jsem se zarazil před problémem. Před týdnem jsem řešil problém, že kurz může obsahovat více jízdních řádů (rozdílný např. pro pracovní dny a víkendy) a musel jsem k tomu upravit funkčnost. Tuto sobotu (či neděli) jsem již měl skoro kompletně hotové výjezdy z depa. Chybělo pouze zvolení depa, ze kterého vlak vyjede. Jednoduché jak facka, ne? Omyl. Sice to vypadá úplně primitivně, ale musel jsem si na to udělat další skript, který zpracovává "odložené akce".

Co je v simulátoru vlastně odložená akce? Jedná se o akci, která kliknutím na tlačítko aktivuje vyčkávání a následným kliknutím na jiné tlačítko se provede potřebná akce. Vysvětlím u výběru depa. V jízdním řádu u výjezdu je tlačítko na výběr depa. Po jeho stisknutí se do odložené akce nastaví, že konkrétní výjezd z depa chce zvolit depo pro výjezd. Následně při kliknutí na tlačítko nad depem nedojde k otevření jeho detailu, ale odložená akce se pokusí nastavit depo pro daný výjezd a pokud nastavení skončí úspěšně, ukončí se odložená akce. Pokud místo depa klikneme na jiný prvek (například na zastávku), tak script pro výjezd z depa zjistí, že daný prvek není depo, provede se výchozí akce (otevře se detail zastávky) a odložená akce se neukončí, protože nebyla správně provedena.

Co mě čeká dál?

Prvně asi udělám poměrně jednoduchou věc, přidám do jízdních řádů nastavení výhybek a jízdy do primárního směru a do sekundárního. Vím, že se oficiálně používají výrazy do přímého směru a do odbočky, ale tyto významy v simulátoru v tomto případě nemusí platit. Primární směr se bere křivka, která výhybkou prochází. Sekundární směr je křivka, která v místě výhybky začíná.

Další věcí, která bude trochu složitější budou tzv. směry. Bude to něco jako jízdní řád a zjednoduší to zadávání linkových jízdních řádů. Směr bude shlukovat posloupnoust akcí, které se budou moct opakovaně přidat do jízdního řádu. Zjednodušeně bude vypadat třeba následovně

Ukázka akcí jízdního řádu

Výhybka sama o sobě bude mít nastavený hlavní směr, který se využije, pokud vlak nebude mít v jízdním řádu určeno, kterým směrem má pokračovat. Proto méně používané výhybky či výhybky ve smyčce jsem napsal pouze zašedle, protože se zde počítá se zašeslým směrem jako hlavním, tudíž se nebudou muset do jízdního řádu (či do směru) zapisovat. Pokud bychom ovšem v jízdním řádu danou výhybku neměli nastavenou a změnili bychom, že u Výstaviště se má jezdit na prostřední kolej, tak všechny vlaky, které nemají na té výhybce nastavený směr, pojedou na prostřední kolej místo na pravou.

A zde jsem vlastně zmínil i další fukncionalitu, která mě čeká. A to zastávky. Prvně budu muset vymyslet, jak se budou zastávky zadávat do mapy. Rád bych pronesl, že to bude nejsložitější věc ohledně zastávek, ale bohužel nebude. Pokud se zastávka bude zadávat do jízdního řádu, tak bude mít uloženou informaci o pravidelném odjezdu (haha, jednoduché). Tak kde se to komplikuje? Komplikace nastává u směrů, které nám mají ulehčit práci. Zde nám té práce ovšem trochu přibude. Vzhledem k tomu, že směr se bude moct použít vícekrát, tak časy odjezdů u zastávek nebudou absolutní, ale relativní. Víme, kdy se má začít konat daný směr a pak u jednotlivých zastávek víme, o kolik minut později má být odjezd z následující zastávky. To by samo o sobě taky nebylo vůbec složité, že? Akorát zde se objevuje záporák s názvem rozdílné jízdní doby. Zatímco brzy ráno a pozdě večer jsou jízdní doby kratší, protože není tak velký provoz, tak přes den jsou jízdní doby prodlouženy, aby se aspoň občas dalo jet "v čase" (možná mě za tuto větu řidiči MHD ukamenují :D). U šalin je rozdíl v jízdní době z konečné na konečnou třeba pouze 3 minuty, ale pokud bych časem rozšiřoval simulátor na ostatní trakce, tak na jiných trakcí můžou být rozdíly mnohem větší. Například všemi oblíbená linka 44 (co prý nikdy nejezdí na čas) brzy ráno a pozdě večer má na projetí trasy 51 minut. Přes den je to 63 minut. To už je rozdíl 12 minut.

No a na mně bude vymyslet jak zajistit dynamické nastavení odjezdů pro různé denní doby. Asi mě teď něco napadlo, ale pokud budete mít jakoukoliv radu k problematice věci, které se simulátorem řeším, klidně se ozvěte na facebooku (Brno pod trolejemi) a třeba si z vašeho řešení vezmu inspiraci, pokud se mi  řešení bude líbit :) Ale nezapomeňte, že zatím řeším pouze logické věci, nikoliv vzhled, finální podobu Brna, objekty atd. To bude až v další vlně simulátoru.

Na konec máte video, kdy již konečně funguje nastavení výjezdu z depa pro jednotlivé vlaky. Kurzy 00101 a 00103 vyjíždí z prvního depa, zatímco 00102 vyjíždí z druhého depa.