Skip to content

stationCallbacks

extrazi edited this page Jun 30, 2023 · 9 revisions
original    original
EN     PL

Manual m4nfo i Raport Techniczny

Table of Contents

Wywołania zwrotne stacji

Korzystanie z wywołań zwrotnych na stacjach kolejowych
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
Należy również odnotować, że CB_SLOPE musi być używane w gałęzi MENU .

Opis

CB_ACONTROL - ustawienie klatki, do której ma przeskoczyć animacja

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 .

CB_AFRAME - ustaw kolejną klatkę animacji

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.
Wartości wywołania zwrotnego muszą być określone jak zwykle przez cbr() lub za pomocą funkcji pomocniczej animframe() .

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 .

CB_AISELECT - Wybór budowy/zakupu AI

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>, <&lt;/nowiki&gt;</num-platforms>length>
AI_stationwidth() liczba peronów stacji
W przypadku stacji wywołanie zwrotne zostanie wywołane tylko podczas budowania stacji, a wartość zwracana przez funkcję AI_event() będzie ID-stacji.

CB_ASPEED - ustaw prędkość animacji

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.

CB_AVAILABLE - Dostępność stacji w oknie konstrukcyjnym

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.

CB_LAYOUT - użyj wywołania zwrotnego, aby wybrać układ sprite

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
 )

CB_SLOPE - kontrola niestandardowego nachylenia

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
 )

CB_TILETYPE - wybiera typ kafla TTD

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.

Clone this wiki locally