Für mein Projekt möchte ich komponentenbasierte Entitäten in C ++ verwenden. Meine aktuelle Implementierung gliedert sich in folgende Teile:
- Systeme - Enthalten eine Karte der Komponenten bestimmter Klassen und bearbeiten diese. Zum Beispiel hat PhysicsSystem einen Vektor von PhysicsComponents.
- Komponenten - Eine Komponente enthält einige öffentliche Variablen und möglicherweise einen Konstruktor, um sie zu initialisieren.
- Entitäten - Eine Entität ist für mich nur eine ID. Es wird jedoch nirgendwo gespeichert, sondern nur seine Komponenten werden in Systemen in der Karte gespeichert (wobei der Schlüssel die EntityId und der Wert der Zeiger auf die Komponente ist).
Mein Problem ist das Erstellen von Instanzen verschiedener Objekte in meinem Spiel. Ich möchte Objekte in XML definieren (kann ein beliebiges Textdateiformat sein). Aus Leistungsgründen sollte diese Datei beim Ausführen des Programms nur einmal analysiert werden.
Das heißt, ich sollte eine Vorlage daraus in meiner ObjectFactory erstellen und sie einem Namen zuordnen. Dann würde ich einfach anrufen factory.CreateObject("Player")
, um dem Spiel eine neue Entität hinzuzufügen.
Ich bin mir nicht sicher, wie ich dies ohne zu viel Overhead-Code implementieren soll. Ein weiteres Problem ist, dass ich nicht möchte, dass meine Fabrik etwas über die Systeme selbst weiß. Da meine Komponenten jedoch in den Systemen und nicht in einem Entity-Objekt gespeichert sind, muss ich ein Messaging-System verwenden, um neue Komponenten an das entsprechende System zu übergeben.
Meine Frage ist , wie würde ich das Objekt-Spawning mit Vorlage für jeden Objekttyp implementieren? Und wie beschreiben einige Engines ihre Objekte mit Konfigurationsdateien?