He pasado las últimas 48 horas leyendo sobre los sistemas Object Component, y siento que estoy lo suficientemente preparado para comenzar a implementarlo. Obtuve las clases de objeto y componente base creadas, pero ahora que necesito comenzar a crear los componentes reales, estoy un poco confundido. Cuando pienso en ellos en términos de HealthComponent o algo que básicamente sería una propiedad, tiene mucho sentido. Cuando es algo más general como un componente de Física / Gráficos, me confundo un poco.
Mi clase de Objeto se ve así hasta ahora (si nota algún cambio que deba hacer, avíseme, aún nuevo en esto) ...
typedef unsigned int ID;
class GameObject
{
public:
GameObject(ID id, Ogre::String name = "");
~GameObject();
ID &getID();
Ogre::String &getName();
virtual void update() = 0;
// Component Functions
void addComponent(Component *component);
void removeComponent(Ogre::String familyName);
template<typename T>
T* getComponent(Ogre::String familyName)
{
return dynamic_cast<T*>(m_components[familyName]);
}
protected:
// Properties
ID m_ID;
Ogre::String m_Name;
float m_flVelocity;
Ogre::Vector3 m_vecPosition;
// Components
std::map<std::string,Component*> m_components;
std::map<std::string,Component*>::iterator m_componentItr;
};
Ahora, el problema con el que me estoy encontrando es ¿qué pondría la población general en Componentes como Física / Gráficos? Para Ogre (mi motor de renderizado), los Objetos visibles consistirán en múltiples Ogre :: SceneNode (posiblemente múltiples) para adjuntarlos a la escena, Ogre :: Entity (posiblemente múltiples) para mostrar las mallas visibles, y así sucesivamente. ¿Sería mejor simplemente agregar múltiples GraphicComponent al objeto y dejar que cada GraphicComponent maneje un SceneNode / Entity o es la idea de tener uno de cada Componente necesario?
Para Física estoy aún más confundido. Supongo que tal vez cree un RigidBody y realice un seguimiento de mass / interia / etc. Tendría sentido. Pero tengo problemas para pensar cómo poner realmente detalles específicos en un Componente.
Una vez que termine un par de estos componentes "Requeridos", creo que tendrá mucho más sentido. A partir de ahora, aunque todavía estoy un poco perplejo.