Останні 48 годин я провів за читанням на системах компонентних об'єктів, і відчуваю, що готовий почати її впроваджувати. У мене створені базові класи Object and Component, але тепер, коли мені потрібно почати створювати фактичні компоненти, я трохи заплутався. Коли я думаю про них з точки зору HealthComponent або чогось, що в основному було б просто властивістю, це має ідеальний сенс. Коли це щось більш загальне, як компонент фізики / графіки, я трохи заплутався.
Мій клас «Об’єкт» виглядає таким чином досі (Якщо ви помітили якісь зміни, які я повинен зробити, будь ласка, повідомте мене, все ще нове в цьому) ...
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;
};
Тепер проблема, з якою я стикаюся, полягає в тому, що б загальна сукупність містила такі компоненти, як фізика / графіка? Для Ogre (мого механізму візуалізації) видимі об'єкти будуть складатися з декількох Ogre :: SceneNode (можливо, декількох), щоб приєднати його до сцени, Ogre :: Entity (можливо, декількох), щоб показати видимі сітки тощо. Було б найкраще просто додати кілька об’єктів GraphicComponent до Об'єкта і дозволити кожному GraphicComponent обробляти один SceneNode / Entity, або ідея мати один з кожного компонента?
Щодо фізики я ще більше плутаю. Я думаю, можливо, створити RigidBody та відстежувати масовість / медіа / тощо. мав би сенс. Але у мене виникають проблеми з думкою про те, як насправді вкласти конкретні компоненти в компонент.
Як тільки я отримаю пару цих "обов'язкових" компонентів, я думаю, це матиме набагато більше сенсу. На сьогоднішній день, хоча я ще трохи спотикався.