Moje pytanie brzmi:
Jak poradzić sobie ze stanami gry w moim systemie encji bez uciekania się do utrzymywania stosu obiektów stanu gry w pobliżu?
Tak więc projekt mojego systemu encji oznacza, że gdy encja musi się zarejestrować na przykład dla zdarzeń wejściowych, komponent wejściowy wywołuje system wejściowy i mówi „zarejestruj tę encję dla tego wejściowego”. Wszystko jest w porządku i dobrze, jednak jeśli dodasz do tego pojęcie stanów gry (powiedzmy ekran pauzy), trudno będzie ustalić, czy jednostka jest w obecnym stanie i powinna otrzymać dane wejściowe.
Mógłbym ulepszyć komponent wejściowy / system tak, aby powiedział: „zarejestruj ten byt dla tego wejścia w tych stanach gry”, ale wymaga to, aby każdy byt wiedział, w których stanach będzie używany, i może to nie być oczywiste. Również utrzymywanie listy stanów gry wokół zarejestrowanych danych wejściowych (i innych systemów korzystających z wywołań zwrotnych) nie wydaje się zbyt wydajne.
Innym pomysłem, jaki miałem, było istnienie bytu reprezentującego stan gry, oznaczenie tego jako wyłączone, a następnie podczas generowania zdarzenia wejściowego sprawdź, czy byt nie jest potomkiem wyłączonego bytu stanu gry. Kosztowne jest ustalenie rodzica dla każdego oddzwaniania.
Innym pomysłem jest, aby wszystkie systemy zapisywały swoje dane w kluczach względem bieżącego stanu, w ten sposób podczas generowania danych wejściowych jednostka docelowa nawet nie będzie kandydatem. Jednak to naprawdę szkodzi możliwości umożliwienia komunikacji między bytami w różnych stanach (nie jest to tak bardzo problemem dla ekranów pauzy, ale pomyśl wybieranie zamka w Oblivion / Skyrim).
Jedynym innym pomysłem, jaki miałem, było to, aby wszystkie komponenty obsługiwały zdarzenia związane ze zmianą stanu i komunikowały się z odpowiednim systemem, aby wyłączyć wszystko, co zarejestrowały, i włączyć je ponownie po przełączeniu do tego stanu.
Drugi (oznacz obiekt jako wyłączony) i czwarty (każą każdemu komponentowi radzić sobie ze zmianami stanu) wydają się najlepszymi z moich pomysłów, ale żaden z nich nie wyskakuje na mnie jako wyjątkowo dobry.
Czy ktoś jeszcze ma jakieś pomysły, jak to zrobić?
edytuj Mówiąc o danych wejściowych w tym pytaniu, może to oznaczać dowolny system zdolny do wysyłania wiadomości / zdarzeń do podmiotów, takich jak kolizje, zdarzenia czasowe itp.