Z Revival - Interne Struktur

Dies ist zunächst einmal eine grobe Richtlinie, an der sich meine Implementierung in etwa orientieren wird:

Hauptprogramm

Am Anfang bzw. Ende des Spiels steht die Initialisierung bzw. Zerstörung der Subsysteme (Grafik, Audio). Anschließend wird das Hauptmenu geladen, von dem das Spiel entweder beendet oder ein Szenario aufgerufen wird. Szenario kann eine Skirmish-Partie sein, ein Netzwerkspiel oder auch ein Replay. Dieses Szenario wird dann konstruiert, was im Wesentlichen heißt, die entsprechende Map zu laden und nötige Kontrollstrukturen vorzubereiten. Nach Beendigung eines Szenarios wird selbiges wieder zerstört und zum Hauptmenu zurückgekehrt. Dazwischen steht die eigentliche Game Loop. Zunächst prüfen wir, ob genügend Zeit vergangen ist, dass ein Game tick abgelaufen ist. Falls ja, werden alle gespeicherten Spielerbefehle für die neue Runde aus der Command Queue ausgeführt, anschließend aktualisieren alle Spielobjekte ihren Zustand. Grundsätzlich werden dann alle Controller aufgerufen, damit sie ihre Arbeit verrichten können. Schließlich berechnen wir für den aktuellen Zeitpunkt eine Interpolation der Grafik von der letzten gamestep-Aktualisierung ausgehend (möglicherweise unnötig, je nachdem, wie flüssig die gamestep-Updates erscheinen) und rendern dann das nächste Frame.

Controller

Controller sind in etwa Programmeinheiten, die min. einen Spieler im Szenario steuern. Der Input-Controller steuert z. B. den lokalen Spieler, ist allerdings immer präsent (selbst wenn es keinen lokalen Spieler gibt), weil er sich auch um das Settings-Menu und die Kamerakontrolle kümmert. Der replay reader kontrolliert sämtliche Spieler und reproduziert ihre Befehle von einem Replay. Der Netzwerk-Controller schließlich empfängt Befehle aus dem Netzwerk für alle externen Spieler. Außerdem wird er von der Command Queue über eingehende Befehle des lokalen Spielers informiert, die er ins Netzwerk einspeist. In der Skizze fehlend wären dann noch ein oder mehrere AI-Controller, die die Geschicke von lokalen KI-Spielern lenken.

Command queue

Die Command queue erhält von den Spielern Befehle entgegen und sortiert und kategorisiert sie nach geplantem gamestep. Die Befehle werden dann ausgeführt, wenn dieser gamestep erreicht wird. Außerdem informiert die Queue Netzwerk und Replay Writer über eingehende Befehle, die diese dann auf ihre Weise weiter verarbeiten können.

Game entities

Noch eine sehr grobe Überstruktur für alle Objekte im Spiel: Fabriken, Einheiten, Sektoren, Dekorationen, … Diese verwalten den Zustand eines solchen Objekts sowie seine grafische Repräsentation. Je nach Typ verfügen sie außerdem über Steering Behaviours und Zugang zum Path Planner.