Hallo,
ich bin gerade dabei ein Entity Component System zu implementieren (falls wem das etwas sagt, wenn nicht auch nicht schlimm).
Jedenfalls habe ich Objekte, die alle eine bestimmte Auswahl an Komponenten haben (z.B Physik Komponente, Position Komponente usw.) und Systeme, die sich um alle Objekte kümmern, die eine gewisse Kombination an Komponenten haben.
D.h. PhysikSystem soll sich um alle Objekte kümmern, die eine Physik und Position Komponente besitzen.
Ich dachte als Lösung daran ein Bitfeld zu nehmen. Jedes System hat ein Bitfeld, wo eingetragen ist, welche Komponenten das System haben möchte und jedes Objekt hat ein Bitfeld mit den Komponenten, welche es hat.
ObjectBitfeld & SystemBitfeld == SystemBitfeld ... sollte dann überprüfen, ob das Objekt die erforderlichen Komponenten hat.
Mein Problem liegt vor allem darin, diese Bitfelder zu kreiren.
1. Ich habe eine Oberklasse Componente, jede Unterklasse soll eine ID haben, ab 0 angefangen zu zählen ... diese zuweisung solllte nach Möglichkeit automatisch geschehen, da später der Nutzer eigene Komponenten hinzufügen soll und sich nicht damit plaggen soll, welche Id er diesem manuell eintragen muss.
2. Wie erreiche ich diese Id? Beim hinzufügen neuer Komponenten zu dem Objekt, sollte es kein Problem sein, da ich eine Instanz von dem Objekt habe (Typ Component) und könnte einfach eine Methode getId() von Component aufrufen.
Schwieriger wird das Preferenzen setzen bei den Systemen. Dort habe ich aktuell eine Methode:
sodass man sagen kann in den Konstruktoren der einzelnen Systeme: requireComponent(PhysicComponent.class); ... auf ein Class Objekt kann ich ja schlecht eine member function aufrufen.
Eine Überlegung von mir war, die Methode generisch zu machen : requireComponent<PhysicComponent>(), dann könnte man zumindest statische Methoden aufrufen.
Vielen Dank für eure Hilfe
Grüße Leon
ich bin gerade dabei ein Entity Component System zu implementieren (falls wem das etwas sagt, wenn nicht auch nicht schlimm).
Jedenfalls habe ich Objekte, die alle eine bestimmte Auswahl an Komponenten haben (z.B Physik Komponente, Position Komponente usw.) und Systeme, die sich um alle Objekte kümmern, die eine gewisse Kombination an Komponenten haben.
D.h. PhysikSystem soll sich um alle Objekte kümmern, die eine Physik und Position Komponente besitzen.
Ich dachte als Lösung daran ein Bitfeld zu nehmen. Jedes System hat ein Bitfeld, wo eingetragen ist, welche Komponenten das System haben möchte und jedes Objekt hat ein Bitfeld mit den Komponenten, welche es hat.
ObjectBitfeld & SystemBitfeld == SystemBitfeld ... sollte dann überprüfen, ob das Objekt die erforderlichen Komponenten hat.
Mein Problem liegt vor allem darin, diese Bitfelder zu kreiren.
1. Ich habe eine Oberklasse Componente, jede Unterklasse soll eine ID haben, ab 0 angefangen zu zählen ... diese zuweisung solllte nach Möglichkeit automatisch geschehen, da später der Nutzer eigene Komponenten hinzufügen soll und sich nicht damit plaggen soll, welche Id er diesem manuell eintragen muss.
2. Wie erreiche ich diese Id? Beim hinzufügen neuer Komponenten zu dem Objekt, sollte es kein Problem sein, da ich eine Instanz von dem Objekt habe (Typ Component) und könnte einfach eine Methode getId() von Component aufrufen.
Schwieriger wird das Preferenzen setzen bei den Systemen. Dort habe ich aktuell eine Methode:
Java:
protected void requireComponent(Class<? extends EntityComponent> type) {}
Eine Überlegung von mir war, die Methode generisch zu machen : requireComponent<PhysicComponent>(), dann könnte man zumindest statische Methoden aufrufen.
Vielen Dank für eure Hilfe
Grüße Leon