Skip to content

handlingCallbacks

extrazi edited this page Jul 1, 2023 · 5 revisions
original    original
EN     PL

Manual   m4nfo  i  Raport  Techniczny

Obsługa Wywołań zwrotnych

Bazowe informacje o 'callbackach'

Introduction

To jest wprowadzenie do pojęcia callbacków i ich ogólnego zastosowania. Aby zastosować wywołania zwrotne w określonym kontekście specyficznym dla funkcji (pojazdy, stacje, domy, branże, ...), zobacz odpowiednie strony ( pociągi , statki , obiekty , ...) dla tej właśnie funkcji.

Oprócz ustawiania statycznych właściwości funkcji przez funkcje właściwości w różnych funkcjach define*() , TTDPatch implementuje drugie podejście, które umożliwia dynamiczną zmianę właściwości funkcji w grze, w zależności od funkcji związanych z grą lub interakcji gracza.

Osiąga się to za pomocą 'wywołań zwrotnych' , specjalnych działań, które TTDPatch 'wywołuje' w celu modyfikacji różnych atrybutów funkcji (np. Pojazdu kolejowego) wcześniej zdefiniowanej.

Odbywa się to poprzez identyfikację zdarzenia i możliwego typu wywołania zwrotnego w różnych funkcjach callback(). Np. funkcja callback() dla pojazdów kolejowych umożliwia zmianę właściwości pojazdu, takich jak długość, ładowność, wielkość ładunku, moc, prędkość, kolor, dźwięk, dodatkowe teksty itp.

W jakikolwiek sposób, w zależności od typu wywołania zwrotnego (CB_PROP na ilustracji po lewej), łańcuch kontroli jest odwracany wstecz, aż do funkcji, która obsługuje wywołanie zwrotne zwracając prawidłowy 'wynik funkcji zwrotnej' , najczęściej przy użyciu funkcji cbr() lub pozwala jej zawieść. W tym drugim przypadku wartość poprzednio ustawiona przez odpowiednią funkcję właściwości zostanie zachowana.

Należy pamiętać, że 'wynik wywołania zwrotnego' różni się od 'odniesienia' , przy czym to drugie jest używane przez większość czasu w kodowaniu grf. Ogólnie wynik wywołania zwrotnego jest albo wartością zastępującą wartość domyślną z odpowiedniej funkcji właściwości (np. CB_RCAP zmieniająca pojemność pojazdu), albo jest to rodzaj BOOLEAN, zezwalający lub nie zezwalający na coś związanego z tym konkretnym wywołaniem zwrotnym (np. , CB_SLOPE sprawdzanie, czy określony typ nachylenia nadaje się do umieszczenia budynku lub branży).

W zasadzie funkcja callback() może obsługiwać każdy typ wywołania zwrotnego oddzielnie. Gałąź 'else' w bloku funkcji callback() pobierająca każdy inny wynik funkcji callback(), czy to inny typ wywołania zwrotnego (a ztgus pozwala na 'łańcuch' wywołań zwrotnych), czy też bezpośrednie lub pośrednie odwołanie do graficznego bloku sprite .

Tak więc, jeśli potrzebujesz obsługiwać więcej niż jeden typ wywołania zwrotnego, musisz obsługiwać każdy typ osobno, dołączając odpowiednie odwołania do ich łańcuchów obsługi wywołań zwrotnych w bloku funkcji callback(). Zobacz przykład poniżej.

 Przykład (obsługa wielu typów callback):
 
 def(10) callback(
 	cbr(5) if(CB_LOAD)	   // set loading amount = 5
 	grftext(TSX_SGLM) if(CB_TSFX) // set text suffix
 	ref(5) if(CB_PROP)	   // change property (capacity)
 	ref(4) else		   // graphics  
 )

Jeśli wywołanie zwrotne pozostanie niezauważone, za pomocą instrukcji 'else' zostanie przekazane do łańcucha graficznego i tam automatycznie 'zawiedzie' . Np. jeśli na ilustracji po lewej byłby inny typ wywołania zwrotnego CB_WLEN, nie powiedzie się, ponieważ nie jest obsługiwany poprawnie i kończy się prawidłowym wynikiem wywołania zwrotnego.

W przypadku, gdy newGRF nie zawiera żadnych ikonek graficznych, które mogą być użyte jako nieprawidłowe wyniki wywołania zwrotnego, można użyć funkcji cbfail().

Opis

Prośba odnotowania, że w m4nfo, oprócz zwykłej funkcji cbr(), jest więcej możliwości zwracania wyników wywołania zwrotnego. Jak widać w powyższym przykładzie, funkcja grftext() również zwraca wynik wywołania zwrotnego, chociaż jest on nieco ukryty dla użytkownika.

Inne funkcje wbudowane w m4nfo zwracające prawidłowe wyniki wywołania zwrotnego to:

Funkcja pomocnika 'Callback' Callback Opis
cbr(<Word>) wszystko ogólny wynik wywołania zwrotnego
cbfail() zwraca nieprawidłowy wynik wywołania zwrotnego
addveh(<Veh-ID>) CB_ARTI dodać część pojazdu do pojazdu przegubowego
addvehrev(<Veh-ID>) dodaj odwróconą część pojazdu do pojazdu 'przegubowego'
attach(<error>) CB_ATAC flag komunikat o błędzie przy dołączaniu pojazdu do składu
A_STOP A_START A_NOP [,<Sound-ID>]) CB_ACONTROL uruchom/zatrzymaj animację w określonej klatce [i]
A_STOP A_NOP [,<Sound-ID>]) CB_AFRAME ustaw klatkę lub zatrzymaj animację [i]
autorefit(<Word> [,%]) CB_RCOST oznaczenie automatycznego dopasowania i ustaw koszt 'refit'
customcargo(<CargoType> * 3) CB_CARGOTYPES zwrócić 3 niestandardowe ładunki
effect(<EffectType>) CB_POWR ustaw typ efektu i położenie pojazdu
grftext () , reftxtcb () CB_TEXT zwraca ID-tekstu wcześniej zdefiniowanego ciągu tekstowego
CB_TSFX
refsnd(<Sound-ID>) CB_SOUND zwraca ID-dźwięku wcześniej zdefiniowanego dźwięku
reftile(<Label>[+<Word>]) CB_LAYOUT zwraca numer kafla jako wynik 'cb'
seteffort(<Unit-term:tractive-effort>,<unit_term:weight>) CB_PROP zwraca wartość wysiłku pociągowego jako wynik wywołania zwrotnego
setpower(<Unit-term:power>) zwraca wartość mocy jako wynik wywołania zwrotnego
setspeed(<Unit-term:speed>) zwraca wartość prędkości jako wynik wywołania zwrotnego
setengineprice(<Dword>) zwraca cenę silnika jako wynik wywołania zwrotnego
setwagonprice(<Dword>) zwraca cene autokaru / wagonu jako wynik 'cb'
setenginecost(<Dword>) zwraca koszt eksploatacji silnika jako wynik wywołania zwrotnego
setwagoncost(<Dword>) zwraca koszty eksploatacji 'coach' / wagonu w wyniku zwrotnego
setlen(1/8 .. 8/8) CB_WLEN zwraca długość pojazdu jako wynik 'cb'

Należy pamiętać, że ponieważ m4nfo jest oparty na procesorze makr (M4), łatwo jest zdefiniować dostępne lokalnie stałe, np. ZEZWÓL lub ZABLOKUJ, które sprowadzałyby się do prostego cbr(0) lub cbr(1), które mogą być użyte dla niektórych specjalne typy wywołań zwrotnych, np. CB_SLOPE, gdy zezwalasz lub nie zezwalasz na umieszczanie budynków na określonych typach zboczy. Albo coś innego.

Clone this wiki locally