Architekturbeschreibung
Ich erstelle (entwerfe) ein Entitätssystem und bin auf viele Probleme gestoßen. Ich versuche, es so datenorientiert und effizient wie möglich zu halten. Meine Komponenten sind POD-Strukturen (genauer gesagt ein Array von Bytes), die in homogenen Pools zugeordnet sind. Jeder Pool verfügt über einen ComponentDescriptor - er enthält nur Komponentennamen, Feldtypen und Feldnamen.
Die Entität ist nur ein Zeiger auf ein Array von Komponenten (wobei die Adresse wie eine Entitäts-ID wirkt). EntityPrototype enthält den Entitätsnamen und ein Array von Komponentennamen. Schließlich Subsystem (System oder Prozessor), das auf Komponentenpools arbeitet.
Tatsächliches Problem
Das Problem ist, dass einige Komponenten von anderen abhängen (Modell, Sprite, PhysicalBody, Animation hängt von der Transformationskomponente ab), was bei der Verarbeitung viele Probleme verursacht.
For example, lets define some entities using [S]prite, [P]hysicalBody and [H]ealth:
Tank: Transform, Sprite, PhysicalBody
BgTree: Transform, Sprite
House: Transform, Sprite, Health
and create 4 Tanks, 5 BgTrees and 2 Houses and my pools will look like:
TTTTTTTTTTT // Transform pool
SSSSSSSSSSS // Sprite pool
PPPP // PhysicalBody pool
HH // Health component
Es gibt keine Möglichkeit, sie mithilfe von Indizes zu verarbeiten. Ich arbeite 3 Tage daran und habe noch keine Ideen. In früheren Entwürfen war TransformComponent an die Entität gebunden - aber es war keine gute Idee. Können Sie mir einige Ratschläge geben, wie man sie verarbeitet? Oder sollte ich vielleicht das Gesamtdesign ändern? Vielleicht sollte ich Pools von Entites (Pools von Komponentenpools) erstellen - aber ich denke, es wird ein Albtraum für CPU-Caches.
Vielen Dank