top of page

Każdy blok jest solidny – chyba że nie jest

Zdjęcie autora: Marcel Dütscher
Marcel Dütscher
22 cze
1 minut(y) czytania

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.

Ostatnie posty

Zobacz wszystkie

Komentarze


Komentowanie tego posta nie jest już dostępne. Skontaktuj się z właścicielem strony, aby uzyskać więcej informacji.
bottom of page