Każdy blok jest solidny – chyba że nie jest
Nasz mesher po stronie klienta ma żelazną zasadę: każdy blok, który nie jest powietrzem, jest renderowany i ma kolizję. Kropka. To uproszczenie sprawia, że meshowanie jest szybkie, a kod prosty – dopóki nie pojawi się funkcja, która chce złamać dokładnie tę regułę.
Brama energetyczna. Do naszych ogrodzeń energetycznych chcieliśmy bramę: migotliwą membranę, przez którą gracze i przyjazne NPC mogą po prostu przejść, a dzikie zwierzęta nie. Czyli blok, który jest widoczny, ale dla niektórych nie jest ścianą. Dokładnie to, czego nasza architektura nie przewiduje.
Rozwiązanie składa się z dwóch połówek. Po stronie klienta mesher dostał swój pierwszy celowy wyjątek: blok bramy jest renderowany, ale wyłączony z siatki kolizji – gracze po prostu przechodzą. Na serwerze działa właściwa logika: systemy ruchu stworzeń przy każdym kroku sprawdzają, czy na drodze nie stoi bariera energetyczna. Dzikie zwierzęta i wrogowie zawracają, towarzysze i gracze przechodzą. Tę kontrolę trzeba było wstawić do wszystkich trzech systemów ruchu – dzikich zwierząt, towarzyszy i planetarnych wrogów – inaczej jeden rodzaj stworzeń „nie wiedziałby” o bramie.
Uczciwy przypis: latające stworzenia po prostu przelatują nad ogrodzeniem. To nie błąd, tylko udokumentowane ograniczenie – ogrodzenie po prostu nie zatrzyma niczego, co lata. Wolimy zapisywać takie celowe luki, niż je ukrywać.
Wniosek: reguły architektury w stylu „wszystko, co nie jest powietrzem, jest solidne” są cenne właśnie dlatego, że są proste. Ale trzeba wiedzieć, gdzie mieszka jedyny wyjątek – i dlaczego tam.
Komentarze