Physics/Graphics Components
        Posted  
        
            by 
                Brett Powell
            
        on Game Development
        
        See other posts from Game Development
        
            or by Brett Powell
        
        
        
        Published on 2011-06-17T13:41:04Z
        Indexed on 
            2011/06/20
            16:40 UTC
        
        
        Read the original article
        Hit count: 468
        
I have spent the last 48 hours reading up on Object Component systems, and feel I am ready enough to start implementing it. I got the base Object and Component classes created, but now that I need to start creating the actual components I am a bit confused. When I think of them in terms of HealthComponent or something that would basically just be a property, it makes perfect sense. When it is something more general as a Physics/Graphics component, I get a bit confused.
My Object class looks like this so far (If you notice any changes I should make please let me know, still new to this)...
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;
};
Now the problem I am running into is what would the general population put into Components such as Physics/Graphics? For Ogre (my rendering engine) the visible Objects will consist of multiple Ogre::SceneNode (possibly multiple) to attach it to the scene, Ogre::Entity (possibly multiple) to show the visible meshes, and so on. Would it be best to just add multiple GraphicComponent's to the Object and let each GraphicComponent handle one SceneNode/Entity or is the idea to have one of each Component needed?
For Physics I am even more confused. I suppose maybe creating a RigidBody and keeping track of mass/interia/etc. would make sense. But I am having trouble thinking of how to actually putting specifics into a Component.
Once I get a couple of these "Required" components done, I think it will make a lot more sense. As of right now though I am still a bit stumped.
© Game Development or respective owner