Próbuję owinąć głowę nad sposobami prawidłowego radzenia sobie z kolizją w grze zaprojektowanej wokół komponentów.
Widzę, że w wielu przykładach coś PhysicsComponent
takiego dodaje się do listy komponentów bytu, ale faktyczna implementacja mnie dezorientuje.
Aby to zadziałało, PhysicsComponent
musiałby mieć dostęp do otaczającego świata. To nie ma dla mnie intuicyjnego sensu. Czy składnik nie powinien być nieświadomy nie tylko swojego kontenera (bytu), ale kontenera kontenera (świata)?
Dla mnie brzmi to tak, jakby poziom lub scena powinny utrzymywać listę tych bytów, a każda aktualizacja gry, pętla między bytami, aby ustalić, które kolidują.
Moje pytanie dotyczy po pierwsze, czy jest to dobry projekt, a po drugie, w jaki sposób ustalić, które podmioty mogą kolidować. Podejrzewam, że stałe podmioty mogą implementować pusty interfejs IRigidBody, aby poziom mógł określić, które podmioty na liście obsługują kolizję. Ale czy to łamie projekt komponentu?
Zamiast tego powinny zawierać pusty składnik RigidBody? To może być lepsze, ponieważ nie zawsze może być puste, a to podejście jest bardziej przyszłościowe. Jedynym problemem jest złożoność. Scena musiałaby zapętlać nie tylko każdą jednostkę, ale także jej komponenty, aby ustalić, czy ma ten komponent RigidBody.
Po trzecie, kiedy się zderzają, oba podmioty powinny zostać w jakiś sposób poinformowane i nie jestem pewien, jak to osiągnąć.
Powiedzmy, że obie istoty zawierały HealthComponent, a kiedy zderzyły się, ich zdrowie spadłoby o jakąś dowolną wartość, 5. Przypuszczam, że zajmowanie się tym, gdy wykryje kolizję między dwoma istotami, będzie obowiązkiem sceny.
Ale czy ta scena jest za zbyt odpowiedzialna? Widziałem, jak to wymyka się spod kontroli i staje się niewygodne, gdy scena jest odpowiedzialna za wiele rzeczy, do których podmioty nie powinny (?) Mieć dostępu.
Edycja: pytanie zaktualizowane o więcej szczegółów.