Meine Frage ist:
Wie kann ich mit Spielzuständen in meinem Entitätssystem umgehen, ohne einen Stapel von Spielzustandsobjekten zu behalten?
Wenn sich eine Entität beispielsweise für Eingabeereignisse registrieren muss, ruft die Eingabekomponente das Eingabesystem auf und sagt "Diese Entität für diese Eingabe registrieren". Dies ist alles in Ordnung, aber wenn Sie das Konzept der Spielzustände hinzufügen (sagen wir einen Pausenbildschirm), wird es zu einem Problem, herauszufinden, ob sich eine Entität im aktuellen Zustand befindet und die Eingabe erhalten sollte.
Ich könnte die Eingabekomponente / das Eingabesystem so erweitern, dass dort steht: "Diese Entität für diese Eingabe registrieren, während sie sich in diesen Spielzuständen befindet". Dies setzt jedoch voraus, dass jede Entität weiß, in welchen Zuständen sie verwendet wird, und das ist möglicherweise nicht offensichtlich. Außerdem klingt es nicht effizient, eine Liste der Spielzustände für jeden registrierten Eingang (und für andere Systeme, die Rückrufe verwenden) zu führen.
Eine andere Idee, die ich hatte, ist, dass es eine Entität geben wird, die den Spielstatus darstellt, diese als deaktiviert markiert und dann beim Generieren des Eingabeereignisses überprüft, ob die Entität kein Abkömmling einer deaktivierten Spielstatus-Entität ist. Es scheint teuer zu sein, den Elternteil für jeden Rückruf zu ermitteln.
Eine andere Idee ist, dass alle Systeme ihre Daten mit dem aktuellen Status abspeichern. Auf diese Weise wird die Zielentität beim Generieren der Eingabe nicht einmal ein Kandidat sein. Dies schadet jedoch wirklich der Möglichkeit, die Kommunikation zwischen Entitäten in verschiedenen Zuständen zuzulassen (nicht so sehr ein Problem für Pausenbildschirme, sondern das Aufheben von Sperren in Oblivion / Skyrim).
Die einzige andere Idee, die ich hatte, ist, dass alle Komponenten Zustandsänderungsereignisse verarbeiten und mit ihrem jeweiligen System kommunizieren, um alles zu deaktivieren, was sie registriert haben, und es wieder zu aktivieren, wenn sie in diesen Zustand zurückkehren.
Das zweite (ein Objekt als deaktiviert markieren) und vierte (jede Komponente muss sich mit Zustandsänderungen befassen) scheinen meine besten Ideen zu sein, aber keine von ihnen spricht mich als besonders großartig an.
Hat jemand andere Ideen, wie man das macht?
Bearbeiten Während ich in dieser Frage speziell über Eingaben spreche, kann dies jedes System bedeuten, das Nachrichten / Ereignisse an Entitäten senden kann, wie z. B. Kollisionen, Timer-Ereignisse usw.