Autor Wątek:  Zastąpienie eventów językiem skryptowym  (Przeczytany 4680 razy)

0 użytkowników i 1 Gość przegląda ten wątek.

Offline Milek7

  • Administrator
  • Wiadomości: 1047
    • Zobacz profil
  • Otrzymane polubienia: 902
Zastąpienie eventów językiem skryptowym
« dnia: 29 Sierpnia 2017, 00:53:42 »
Obecny system eventów jest dość prymitywny i zrobienie na nim bardziej złożonych scenariuszy wymaga okropnych konstrukcji z kaskadami multiple. Zamiast próbować rozszerzać do używalności składnię tego co już jest, planuję użyć pełnego języka skryptowego.
Z prostych do zabudowania w symulatorze języków jest Lua lub Squirrel. Mimo że składniowo Squirrel jest zdecydowanie bardziej ogarnięty (Lua ma kilka bzdur, takich jakich begin..end, czy numerowanie tablic od 1), stawiałbym na Luę 5.1 ze względu LuaJIT, które ma świetne C FFI co znacząco ułatwi tworzenie bindingów w exe, jak i kompilator JIT co znacząco poprawi wydajność kodu (i o ile w przypadku eventów to jest bez znaczenia, to w przyszłości planuję też na luę przepiąć pythonowe wyświetlacze).
Oczywiście nie przepiszemy wszystkich scenariuszy w jeden dzień na skrypty, więc zostaną one doczepione do istniejącego systemu eventów - skrypty będą mogły rejestrować eventy które będą normalnie widoczne przez stary system, a także wywoływać stare eventy.

No i w tym wątku prosiłbym o opinię oraz życzenia funkcjonalności (ponad te dostępne już w eventach) które mają pojawić się w skryptowym API.

Offline Mariusz1970

  • Zasłużony dla Symulatora
  • Wiadomości: 3925
    • Zobacz profil
  • Otrzymane polubienia: 277
Odp: Zastąpienie eventów językiem skryptowym
« Odpowiedź #1 dnia: 29 Sierpnia 2017, 01:55:51 »
Kiedys juz sie troche sprzeczalem w podobnym temacie. Postaram sie w skrocie przedstawic swoja opinie. Na temat tych jezykow skryptowych, ktore proponujesz, to sie nie wypowiem, bo ich nie znam. Nie mam pojecia, czy one ulatwia czy tez nie pisanie scenariuszy przez Kowlaskiego nieprogramisty. Otoz moje zaloznie jest takie, ze powinnismy unikac sytuacji, ktora bedzie implementowala cos od programisty dla programisty. Zalozyc nalezy, ze Kowalski piszacy scenariusz, programista nie jest i nawet nie chce nim zostac, chcac napisac scenariusz. Jesli mamy zrobic duzy skok, to pisanie scenariuszy powinno sie sprowadzac, iz Kowalski na wejsciu podaje potrzebne dane o pociagu (gdzie, skad, dokad, o ktorej, przez co) ma jechac (czyli wszystkie niezbedne dane), a nazwijmy to "system" robi sam, automatycznie wszystko, aby to zrealizowac. Uzytkownik nie powinien w ogole wchodzic w szczegoly, jak to tam dziala ten system, jaki jest uzyty jezyk itp.
Kwestia teraz jest taka, ze aby mogly powstac fundamenty tego systemu, to potrzeba jest uzycia np. tych jezykow skryptowych, ktore proponujesz, to jestem jak najbardziej za. Jesli natomiast na tych fundamentach sie zatrzymamy, to duzego pozytku dla Kowalskiego nie widze z tego co proponujesz.

Offline Balaclava

  • Zasłużony dla Symulatora
  • Wiadomości: 936
  • vel. krzysiuup
    • Zobacz profil
  • Otrzymane polubienia: 726
Odp: Zastąpienie eventów językiem skryptowym
« Odpowiedź #2 dnia: 29 Sierpnia 2017, 08:03:52 »
Postulowałem kiedyś o wprowadzenie do plików SCN takiego mini języka, który na przykład pozwoliłby ustawiać include za pomocą pętli. Wtedy prosto można by napisać np. skrypt sadzący drzewka. Jeżeli chodzi o eventy, to faktycznie lepsze byłoby coś w stylu dyspozytora AI w połączeniu z tym, o czym pisze Mariusz. Ponadto uważam, że praktycznie każde zdarzenie na scenerii powinno być losowe, aby nigdy nie można było przewidzieć jej przebiegu - to taka luźna opinia, niepowiązana bezpośrednio z tematem.
Dokumentacja dla przyszłych pokoleń deweloperów:
MaSzynowa Wiki
Narzędzia deweloperskie - Blender

Offline Kacper9

  • Wiadomości: 94
    • Zobacz profil
  • Otrzymane polubienia: 11
Odp: Zastąpienie eventów językiem skryptowym
« Odpowiedź #3 dnia: 29 Sierpnia 2017, 08:23:15 »
Innymi słowy SCS'owy ANP w symku?

Offline carmel4a

  • Zasłużony dla Symulatora
  • Wiadomości: 175
    • Zobacz profil
    • Moja stronka na Tumblrze z changelogiem ze STAREGO projektu.
  • Otrzymane polubienia: 36
Odp: Zastąpienie eventów językiem skryptowym
« Odpowiedź #4 dnia: 29 Sierpnia 2017, 09:51:27 »
To o czym piszecie da się zrealizować w dobrym API, w języku skryptowym. Podejście takie jest o tyle dobre, że Kowalsy, jak i programiści będą mieli to samo API. Tylko będą je wykorzystywać w różnym zakresie. Może przeciesz istnieć metoda _dodaj_pojazd(parometry) jak i ustal_przebieg() ;>
Ps. nazwy to tylko przykłady by pokazać o co mi chodzi. Powynny być po angielsku. API powinno być otwarte.
Ps2. ba - takie podejście umożliwi zrobienie takich "trainzowych" i "raillwordsowych" edytorów misji - ładnych nakładek/edytorów do API.
« Ostatnia zmiana: 29 Sierpnia 2017, 09:57:34 wysłana przez carmel4a »
Toruń robię.
Ma ktoś stare zdjęcia z Bydgoszczy Głównej?

Podczas tworzenia dodatków nie muszę uwzględniać (co nie oznacza, że nie mogę) uwag które nie dotyczą zagadnień w przyklejonych wątkach TD.

Offline miko22

  • Wiadomości: 616
  • Powoli wracam z "promocją"...
    • Zobacz profil
    • Nasze-Symulatory.pl
  • Otrzymane polubienia: 196
Odp: Zastąpienie eventów językiem skryptowym
« Odpowiedź #5 dnia: 29 Sierpnia 2017, 12:16:50 »
No i w tym wątku prosiłbym o opinię oraz życzenia funkcjonalności (ponad te dostępne już w eventach) które mają pojawić się w skryptowym API.
Jeśli nie będzie z tym dużo roboty, to przydałaby się większa ilość kombinacji klawiszowych do ręcznego sterowania zdarzeniami, żeby dało się zrobić jakieś proste stanowisko dyżurnego do obsługi stacji, bo dostosowanie scenerii pod obsługę przez SCS'a jest baaardzo czasochłonne. Obecnie obsługiwane kombinacje to tylko [Shift] plus cyfry [1]-[0]. Jest też jeden scenariusz, w którym trzeba zatrąbić, żeby robotnicy zeszli z torów - jeśli tego nie ma, to tutaj także przydatna byłaby możliwość ręcznego, ale też wyzwalanego jakimś zdarzeniem przemieszczania i/lub obracania (symulacja upadku) dowolnego obiektu (samochodu, zwierzęcia, drzewa itp.) na tory, żeby można było odzwierciedlić takie sytuacje z rzeczywistości. No i nie wiem czy to po stronie zdarzeń, czy już bardziej po stronie exe, ale fajna byłaby też możliwość niecałkowitego przestawienia (awarii) zwrotnicy oraz dodania do konkretnego semafora funkcji jego wygaszania przy poborze prądu z sieci o wartości większej niż zadana na odcinku, za którym stoi, bo takie rzeczy w rzeczywistości też się zdarzają, chyba szczególnie wtedy, jak jest duża wilgotność (deszcz, mgła itp.). Z tego co wiem, ma to związek z przebiciem izolacji systemu wykrywania zajętości toru lub coś w tym rodzaju.

Offline Milek7

  • Administrator
  • Wiadomości: 1047
    • Zobacz profil
  • Otrzymane polubienia: 902
Odp: Zastąpienie eventów językiem skryptowym
« Odpowiedź #6 dnia: 29 Sierpnia 2017, 13:39:51 »
Jeśli nie będzie z tym dużo roboty, to przydałaby się większa ilość kombinacji klawiszowych do ręcznego sterowania zdarzeniami, żeby dało się zrobić jakieś proste stanowisko dyżurnego do obsługi stacji, bo dostosowanie scenerii pod obsługę przez SCS'a jest baaardzo czasochłonne. Obecnie obsługiwane kombinacje to tylko [Shift] plus cyfry [1]-[0].
Hmm, no ale jake klawisze, scenariusz powinien mieć dostęp do podpięcia eventlaunchera pod dowolny klawisz? To nie problem zrobić, ale może lepiej będzie dodać obiekty w które kliknięcie będzie uruchamiało event? Albo też przełączanie stanów zwrotnic/semaforów kliknięciem? (z jakimś małym gui do wyboru sygnału). Chociaż to wymagało by przerobienia obecnego działania semaforów, bo exe nie wie jakie tam są sygnały dostępne tylko zapala lampki ustawione przez event.

Jest też jeden scenariusz, w którym trzeba zatrąbić, żeby robotnicy zeszli z torów - jeśli tego nie ma, to tutaj także przydatna byłaby możliwość ręcznego, ale też wyzwalanego jakimś zdarzeniem przemieszczania i/lub obracania (symulacja upadku) dowolnego obiektu (samochodu, zwierzęcia, drzewa itp.) na tory, żeby można było odzwierciedlić takie sytuacje z rzeczywistości.
Wydaje mi się że obracanie/przestawianie już jest możliwe eventem animation. Czyli wystaczy dodać tylko eventlaunchera na trąbkę? (a może na dowolną akcję w lokomotywie)

No i nie wiem czy to po stronie zdarzeń, czy już bardziej po stronie exe, ale fajna byłaby też możliwość niecałkowitego przestawienia (awarii) zwrotnicy
Hm, ale po co? Jak taka zwrotnica miałaby działać?

dodania do konkretnego semafora funkcji jego wygaszania przy poborze prądu z sieci o wartości większej niż zadana na odcinku, za którym stoi, bo takie rzeczy w rzeczywistości też się zdarzają, chyba szczególnie wtedy, jak jest duża wilgotność (deszcz, mgła itp.). Z tego co wiem, ma to związek z przebiciem izolacji systemu wykrywania zajętości toru lub coś w tym rodzaju.
To raczej po stronie skryptów, musiałby cyklicznie sprawdzać pobór prądu przez pociągi na danym odcinku i odpowiednio ustawiać semafor.

Innymi słowy SCS'owy ANP w symku?
Z tego co wyczytałem w dokumentacji to wygląda na to że implementacja takiego ANP powinna być możliwa w skryptach po dodaniu api do introspekcji układu torowego.

Postulowałem kiedyś o wprowadzenie do plików SCN takiego mini języka, który na przykład pozwoliłby ustawiać include za pomocą pętli. Wtedy prosto można by napisać np. skrypt sadzący drzewka.
Ale po co? Jakie byłyby zalety wykonywania skryptów w trakcie ładowania scenerii generujących obiekty, w porównaniu do po prostu napisania takiego skryptu osobno i wstawienie drzewek na stałe to scn?

Jesli mamy zrobic duzy skok, to pisanie scenariuszy powinno sie sprowadzac, iz Kowalski na wejsciu podaje potrzebne dane o pociagu (gdzie, skad, dokad, o ktorej, przez co) ma jechac (czyli wszystkie niezbedne dane), a nazwijmy to "system" robi sam, automatycznie wszystko, aby to zrealizowac. Uzytkownik nie powinien w ogole wchodzic w szczegoly, jak to tam dziala ten system, jaki jest uzyty jezyk itp.
Kwestia teraz jest taka, ze aby mogly powstac fundamenty tego systemu, to potrzeba jest uzycia np. tych jezykow skryptowych, ktore proponujesz, to jestem jak najbardziej za. Jesli natomiast na tych fundamentach sie zatrzymamy, to duzego pozytku dla Kowalskiego nie widze z tego co proponujesz.
Stworzenie systemu który by sterował wszystkim tylko na podstawie rozkładów jest dosyć trudne ze względu na to że każda stacja jest inna, i do tego jeszcze dochodzą manewry itp. Można właśnie takie coś próbować zaimplementować w skryptach po dodaniu api do odczytu układu torowego i rozkładów. Wydaje mi się że implementacja tego w skryptach jest lepsza niż w exe, będzie można testować same pliki scenerii bez grzebania ciągle w exe i mergowania z masterem. Nie ma też idealnych rozwiązań i w każdej scenerii będzie można wprowadzić drobne modyfikacje do sterowania, a nie dodawać milion trybów do regulacji w algorytmie zaimplementowanym exe.
« Ostatnia zmiana: 29 Sierpnia 2017, 14:06:36 wysłana przez Milek7 »

Offline Stele

  • Zasłużony dla Symulatora
  • Wiadomości: 10133
    • Zobacz profil
  • Otrzymane polubienia: 2609
Odp: Zastąpienie eventów językiem skryptowym
« Odpowiedź #7 dnia: 29 Sierpnia 2017, 13:57:17 »
Eventlauchery pod dowolny klawisz (no literki) są od dawien, dawna. Animacje proste zdarzeniami też. Semafory kształtowe i szlabany tak działają przecież. Ci robotnicy, to połączenie jednego z drugim. Tylko był eventlauncher na "A/a", a teraz wypadałoby tam "s" jeszcze podpiąć...
Mój kanał youtube

Offline AtapiCl

  • Zasłużony dla Symulatora
  • Wiadomości: 4426
    • Zobacz profil
    • O warszawskiej części linii kolejowej nr 7 Warszawa – Lublin i nie tylko ;)
  • Otrzymane polubienia: 212
Odp: Zastąpienie eventów językiem skryptowym
« Odpowiedź #8 dnia: 29 Sierpnia 2017, 14:00:00 »
Obecnie obsługiwane kombinacje to tylko [Shift] plus cyfry [1]-[0].

KeyCtrl (czyli shift i 0-9) jest globalny, natomiast można zdefiniować sobie eventlauncher z dowolnym literowym klawiszem. Tak działały ręcznie przestawiane zwrotnice, wykolejnice.

Offline miko22

  • Wiadomości: 616
  • Powoli wracam z "promocją"...
    • Zobacz profil
    • Nasze-Symulatory.pl
  • Otrzymane polubienia: 196
Odp: Zastąpienie eventów językiem skryptowym
« Odpowiedź #9 dnia: 29 Sierpnia 2017, 14:28:42 »
Hmm, no ale jake klawisze, scenariusz powinien mieć dostęp do podpięcia eventlaunchera pod dowolny klawisz? To nie problem zrobić, ale może lepiej będzie dodać obiekty w które kliknięcie będzie uruchamiało event? Albo też przełączanie stanów zwrotnic/semaforów kliknięciem? (z jakimś małym gui do wyboru sygnału). Chociaż to wymagało by przerobienia obecnego działania semaforów, bo exe nie wie jakie tam są sygnały dostępne tylko zapala lampki ustawione przez event.
Chodzi o to, aby druga osoba siedząca gdzieś obok mogła sterować eventami z drugiej klawiatury podłączonej do komputera. Obecnie można tak zrobić tylko 10 eventów, bo inne kombinacje oprócz [Shift] + [1]-[0] nie działają.
Wydaje mi się że obracanie/przestawianie już jest możliwe eventem animation. Czyli wystaczy dodać tylko eventlaunchera na trąbkę? (a może na dowolną akcję w lokomotywie)
W tym jednym scenariuszu (niestety nie pamiętam, w którym - być może "moczniki_popych" podczas jazdy powrotnej) już jest tak, że robotnicy usuwają się z torów po zatrąbieniu, tylko nie wiem czy można taką animację przesunięcia, obrócenia lub obu naraz wywołać innym zdarzeniem niż zatrąbienie albo ręcznie przez wciśnięcie kombinacji klawiszy. Jeśli tak, to ok., a jeśli nie, to byłoby przydatne.
EDIT:
Ok, @Stele napisał, że można.
Hm, ale po co? Jak taka zwrotnica miałaby działać?
Żeby zasymulować awarię zwrotnicy. Musiałoby być widać, że żadna z iglic nie dolega do szyny (są ustawione po środku), a wjazd na taką zwrotnicę kończyć się wykolejeniem.
To raczej po stronie skryptów, musiałby cyklicznie sprawdzać pobór prądu przez pociągi na danym odcinku i odpowiednio ustawiać semafor.
Tudzież nawet robić "choinkę", czyli w tym przypadku naprzemiennie wyświetlać sygnał zezwalający z S1 w zależności od poboru prądu. Raz takie coś widziałem właśnie jak padało przez dłuższy czas, a maszynista chciał chyba dynamiczniej ruszyć opóźnionym osobowym spod peronu.
KeyCtrl (czyli shift i 0-9) jest globalny, natomiast można zdefiniować sobie eventlauncher z dowolnym literowym klawiszem. Tak działały ręcznie przestawiane zwrotnice, wykolejnice.
Tylko, że pojedyncze klawisze i wciskane z "Shiftem" mają wpływ na działanie prowadzonego pojazdu, a tu lepsza była by kombinacja [Ctrl] + [coś], bo np. wciśnięcie [Shift] w trakcie przestawiania nastawnika sprowadza go od razu na pozycję bezoporową/zerową, a [Ctrl] nie ma takich negatywnych skutków.
« Ostatnia zmiana: 29 Sierpnia 2017, 14:33:04 wysłana przez miko22 »

Offline Milek7

  • Administrator
  • Wiadomości: 1047
    • Zobacz profil
  • Otrzymane polubienia: 902
Odp: Zastąpienie eventów językiem skryptowym
« Odpowiedź #10 dnia: 31 Sierpnia 2017, 17:58:43 »
w najnowszych buildach https://ci.appveyor.com/project/Milek7/maszyna dodana jest podstawowa obsługa. może być potrzebny redist 2017

opis na wiki https://wiki.eu07.pl/index.php/Luascenery

mimo że api jest bardzo podstawowe to w połaczeniu z istniejącymi eventami tworzenie kompleksowego sterowania powinno być zdecydowanie łatwiejsze.
« Ostatnia zmiana: 31 Sierpnia 2017, 20:34:39 wysłana przez Milek7 »