Silnik gier: warstwy kolizji — kto z kim się zderza
Pocisk gracza nie powinien trafiać gracza, duch ma przechodzić przez ściany, a niektóre platformy są tylko dla wrogów. To klasyczny problem, na który silniki mają klasyczne rozwiązanie — i nasz właśnie je dostał: warstwy kolizji.
Każdy kolider deklaruje dwie rzeczy: na których warstwach jest (32 warstwy, maska bitowa) i z którymi warstwami się zderza. Filtr jest dwustronny — do zderzenia dochodzi tylko wtedy, gdy obie strony się nawzajem akceptują. Domyślnie wszystko zderza się ze wszystkim, więc istniejące gry działają bez żadnych zmian; jedna liczba na koliderze wystarczy, żeby cała klasa obiektów przestała się widzieć.
Warstwy rozumieją też promienie z poprzedniego łuku: mp.raycast przyjmuje opcjonalną maskę (linia wzroku strażnika może ignorować szybę, po której pocisk się jednak zatrzyma), a węzeł-sonda ma własne pole maski. Brak maski — lub idiomatyczne -1 — oznacza wszystkie warstwy.
Testy pokrywają całą macierz: promień jednej warstwy „widzi przez" płytkę innej i trafia podłogę za nią, skrzynka spada przez platformę, która jej nie akceptuje, a skrypty i graf logiki dają identyczne wyniki. Audyt dorzucił rzecz niepozorną, ale ważną dla przyszłego wydania przeglądarkowego: konwersje wartości maski ze skryptów przechodzą przez bezpieczną ścieżkę całkowitą — bez tego -1 z Lua, na komputerze niegroźne, potrafiłoby zatrzymać grę w przeglądarce.
Fizyka silnika ma tym samym komplet fundamentów: ciała, postać ze ślizgiem, strefy, promienie i filtry. Dalej — kolejne klocki treści.