-
Notifications
You must be signed in to change notification settings - Fork 0
stationCallbacks
EN PL |
Introduction |
To jest szczegółowy opis wywołań zwrotnych stacji. Więcej podstawowych informacji na temat callbacków można znaleźć tutaj .
'Callback' to specjalna akcja, którą TTDPatch 'wywołuje' w celu zmodyfikowania różnych atrybutów funkcji (np. Stacji) wcześniej zdefiniowanej. Przykładem może być modyfikacja efektu wizualnego pojazdu kolejowego, jego prędkości lub ładowności.
Odbywa się to poprzez identyfikację zdarzenia i możliwego typu wywołania zwrotnego w funkcji callback() . W zależności od typu wywołania zwrotnego kontrola jest ostatecznie przekazywana funkcji, która obsługuje wywołanie zwrotne lub pozwala na niepowodzenie. W tym drugim przypadku wartość poprzednio ustawiona przez odpowiednią funkcję właściwości zostanie zachowana.
Ponadto wszystkie wywołania zwrotne animacji umożliwiają również wyzwalanie efektów dźwiękowych poprzez zwracanie wartości ID-dźwięku w bajcie starszym wyniku wywołania zwrotnego (lub link CB-Next animation frame ) . Można to osiągnąć w m4nfo przesuwając wartość ID-dźwięku o 8 bitów w lewo i łącząc ją z odpowiednią wartością stanu animacji, na przykład: cbr(eval((<sound_ID> <<8) | <animstate>))
.
Zamiast tego można użyć jednej z funkcji pomocniczych m4nfo , dostarczającej drugi parametr (oprócz wyniku wywołania zwrotnego), który zostanie zinterpretowany jako ID efektu dźwiękowego, na przykład: animcontrol(0, SND_HORN) if(CB_ACONTROL)
. Odpowiedni efekt dźwiękowy zostanie następnie odtworzony na odpowiednim kaflu stacji, zgodnie ze stanem odpowiedniej animacji.
Oto lista wszystkich dostępnych wywołań zwrotnych dla stacji. Należy pamiętać, że nie wszystkie z nich muszą być jawnie aktywowane w funkcji właściwości callbacks() na etapie definiowania stacji:
Callback | Opis |
---|---|
CB_ACONTROL | Ustawia klatkę, do której ma przejść animacja |
CB_AFRAME | Ustawia następną klatkę animacji |
CB_AISELECT | Wybór budowy / zakupu AI |
CB_ASPEED | Ustawia prędkość animacji |
CB_AVAILABLE | Dostępność stacji w oknie budowy |
CB_LAYOUT | Użyj wywołania zwrotnego, aby wybrać układ sprite |
CB_SLOPE | Niestandardowa kontrola nachylenia |
CB_TILETYPE | Callback, aby wybrać typ kafla TTD |
Opis |
To wywołanie zwrotne jest wywoływane okresowo lub po wyzwoleniu animacji . Zwraca numer klatki, do której animacja ma przejść, lub jedną z następujących wartości specjalnych:
Wartość | Etykieta | Znaczenie |
---|---|---|
255 | A_STOP | zatrzymaj animację w bieżącej klatce |
254 | A_START | rozpocznij animację z jej aktualną klatką |
253 | A_NOP | pozostaw animację w jej aktualnym stanie (nic nie rób) |
Wartości wywołania zwrotnego muszą być określone jak zwykle przez cbr() lub za pomocą funkcji pomocniczej animcontrol() .
Od TTDPatch 2.5 beta 2 możesz poprosić o losowe bity za pomocą funkcji randombits() . Aby to włączyć, ustaw RANDOMBITS we flags() funkcji właściwości stacji .
To wywołanie zwrotne jest zawsze dostępne, nie trzeba go definiować w funkcji właściwości callbacks() stacji .
Wywołane w każdej klatce animacji, to wywołanie zwrotne zwraca numer następnej klatki do wyświetlenia. Dodatkowo może zwrócić te specjalne wartości:
Wartość | Etykieta | Znaczenie |
---|---|---|
255 | A_STOP | zatrzymaj animację. Bieżąca klatka pozostaje na ekranie do momentu ponownego uruchomienia animacji. |
254 | A_NEXT | kontynuuj jak zwykle do następnej klatki. Możesz to zwrócić na etapach, na których nie chcesz robić nic specjalnego. |
Od TTDPatch 2.5 beta 2 możesz poprosić o losowe bity za pomocą funkcji randombits() . Aby to włączyć, ustaw RANDOMBITS we flags() funkcji właściwości stacji .
Jest to tak zwana funkcja zwrotna "funkcji ogólnej" . Jest to wymagane do podejmowania różnych decyzji, gdy sztuczna inteligencja konstruuje nową trasę, a to wywołanie zwrotne może być wykorzystane do tego, aby wybór zależał między innymi od branży źródłowej i docelowej, a także odległości usługi.
W przypadku stacji można zastosować szereg specjalnych funkcji wykonawczych:
Funkcjonalność | Znaczenie |
---|---|
AI_destination() | rodzaj branży docelowej |
AI_distance() | odległość między źródłem a celem, w (dx+dy)/2 |
AI_event() | Wydarzenie konstrukcyjne AI |
AI_number() | numer konstrukcyjny; dla stacji 0=stacja źródłowa, 1=stacja docelowa |
AI_source() | typ branży źródłowej |
AI_stationlength() | długość peronu stacji |
AI_stationsize() | rozmiar stacji jako półbajty <>nowiki<num-platforms>, <</nowiki></num-platforms>length> |
AI_stationwidth() | liczba peronów stacji |
Wywoływane, aby zdecydować, jak długo powinna trwać bieżąca klatka animacji. Wartość opóźnienia należy podać w taki sam sposób, jak w przypadku właściwości anim_speed() . Zmniejszenie wartości zwracanej natychmiast przyspiesza animację. Z drugiej strony zwiększenie nie spowalnia go natychmiast: rzeczywisty czas trwania bieżącej klatki będzie gdzieś pomiędzy starymi i nowymi opóźnieniami. Nowe opóźnienie jest stosowane poprawnie dla późniejszych klatek.
Uwaga: jest to jedno z najbardziej czasochłonnych wywołań zwrotnych, ponieważ jest wywoływane dla każdego animowanego kafla co ~30 milisekund. Aby uzyskać lepszą wydajność, staraj się unikać używania go tam, gdzie jest to uzasadnione, np. Spróbuj użyć tylko właściwości i umieść kilka identycznie wyglądających klatek animacji jeden po drugim.
To wywołanie zwrotne określa, czy stacja może zostać zbudowana, czy nie, tj. Czy można ją wybrać w oknie budowy stacji (np. W zależności od roku). Niezerowy zwrot wywołania zwrotnego wskazuje, że stacja może zostać zbudowana, a zerowy kod 'powrotu' usuwa stację z wyboru zakupu.
To wywołanie zwrotne wybiera wpis z układu sprite stacji ustawionego przez tile() funkcji . Jeśli wartość zwracana jest niepoprawna, zostanie użyty układ sprite podany z domyślnego typu kafla. To jedyny sposób, aby mieć do wyboru więcej niż domyślne 4 różne zestawy 'sprites' TTD.
Bit 0 (orientacja stacji) wartości zwracanej jest ignorowany i zamiast tego ustawiany na bit 0 rzeczywistego kafla, dzięki czemu nie trzeba jawnie sprawdzać orientacji i zwracać dwóch odpowiednich wartości, zamiast tego po prostu zorganizuj układy tak, że nawet liczby odpowiadają orientacji X (NE-SW), a liczby nieparzyste odpowiadające orientacji Y (NW-SE). Zobacz przykłady tutaj .
Efektem tego wywołania zwrotnego jest posiadanie dodatkowych typów kafli , które jednak nie są w rzeczywistości zbudowane, ale pokazują tylko inną grafikę w zależności od wywołania zwrotnego.
Funkcji cbset() można użyć do wybrania określonych układów sprite w zależności od ich stanu załadowania.
Przykład (użycie etykiet kafli i funkcji pomocniczej reftile()): layout(_PLAT, // empty tile(__plat, ground(1012) regular(0, xyz(0,0,0), dxdydz(16,5,3)) regular(2, xyz(0,11,0), dxdydz(16,5,3)) ) tile( ground(1011) regular(1, xyz(0,0,0), dxdydz(5,16,3)) regular(3, xyz(11,0,0), dxdydz(5,16,3)) ) // fences front tile( ground(1012) regular(0, xyz(0,0,0), dxdydz(16,5,3)) regular(2, xyz(0,11,0), dxdydz(16,5,3)) regular(20, xyz(0,16,3), dxdydz(16,0,3)) // fence ) tile( ground(1011) regular(1, xyz(0,0,0), dxdydz(5,16,3)) regular(3, xyz(11,0,0), dxdydz(5,16,3)) regular(21, xyz(16,0,3), dxdydz(0,16,3)) // fence ) // fences back ... ) ... def(1) plt_numrev( reftile(__plat+1) if(0) // fence front reftile(__plat) else // no fence ) def(2) plt_num( reftile(__plat+2) if(0) // fence back ref(1) else ) def(3) plt_total( reftile(__plat+3) if(1) // fence both ref(2) else ) def(10) callback( ref(3) if(CB_LAYOUT) ref(0) else )
To wywołanie zwrotne jest wywoływane dla każdego kafla, w którym zostanie zbudowana nowa część stacji. Zwróć cbr(0) (lub 400 w wersji grf 8), aby zaakceptować bieżący kafel lub cbr(1) (lub 401 w wersji 8 grf), aby budowa stacji zakończyła się niepowodzeniem i wyświetleniem komunikatu o błędzie "Teren nachylony w złym kierunku" . Inne wartości zwracane są zarezerwowane do użytku w przyszłości, nie używaj ich na razie.
Ponieważ stacja nie jest jeszcze zbudowana, można użyć tylko niektórych specjalnych funkcji wydajności stacji: test_slope() , test_pltpos() , test_pltnum() , test_pltlength() , test_plttotal() .
To wywołanie zwrotne jest wywoływane tylko po normalnych sprawdzeniach TTD dla zboczy, więc nie jest możliwe zezwolenie na nachylenie, które nie jest domyślnie dozwolone; możesz tylko zawęzić zestaw dozwolonych nachyleń. W szczególności nie jest możliwe budowanie segmentów stacji z peronami na różnych poziomach. Jeśli wywołanie zwrotne nie powiedzie się, kafel zostanie zaakceptowany.
Należy pamiętać, że callback musi być używany w menu zakupu. Użyj do tego MENU typu ładunku.
Przykład (sprawdzenie nachylenia): // zezwalaj tylko na stoki z podniesionymi narożnikami N i E / W (południowy) def(12) test_slope( ALLOW if(NORTH+WEST) // allow ref(11) else // check for northern slope ... ) // menu def(13) callback( cbr(216) if(CB_LAYOUT) // icon ref(12) if(CB_SLOPE) ref(159) else // sprite block )
To wywołanie zwrotne może posłużyć do dalszego dostosowania układu kafli stacji. Jest wywoływana raz dla każdego budowanego kafla i wybiera typ kafla TTD dla kafla do zbudowania lub pozostawia kafel jako domyślny TTD, jeśli wywołanie zwrotne nie powiedzie się. Jedyne możliwe wartości tego wywołania zwrotnego to 0, 2, 4 i 6 (zobacz tiletypelayout() ).
To wywołanie zwrotne umożliwia ustawienie właściwości w zależności od typu kafla, takich jak pylony , przewody lub zachowanie bez-toru na poziomie pojedynczego kafla, zamiast dla całej stacji.
Ponieważ stacja nie została jeszcze zbudowana, żadna z funkcji wydajnościowych plt_*() nie będzie dostępna, zamiast tego można użyć funkcji test_position() , aby zażądać pozycji kafla, która ma zostać zbudowany w układzie kafli. Z tego samego powodu używa tego samego typu ładunku w funkcji makestation() , co menu konstrukcyjne (tj. Wpisz MENU, jeśli jest zdefiniowane, lub domyślnie).
To wywołanie zwrotne jest zawsze dostępne, nie trzeba go definiować w funkcji właściwości callbacks() stacji . Należy pamiętać, że należy go użyć w menu zakupu. Użyj do tego MENU typu ładunku.