Последние 48 часов я потратил на чтение компонентов систем компонентов и чувствую, что готов достаточно приступить к его реализации. Я создал базовые классы Object и Component, но теперь, когда мне нужно начать создавать настоящие компоненты, я немного запутался. Когда я думаю о них с точки зрения HealthComponent или чего-то, что в сущности будет просто собственностью, это имеет смысл. Когда это нечто более общее в качестве компонента физики / графики, я немного запутался.
Мой класс Object до сих пор выглядит следующим образом (Если вы заметили какие-либо изменения, которые я должен сделать, пожалуйста, дайте мне знать, все еще новичок в этом) ...
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 и отслеживание массы / interia / и т.д. будет иметь смысл. Но мне трудно думать о том, как на самом деле поместить специфику в компонент.
Как только я сделаю пару этих «Обязательных» компонентов, я думаю, это будет иметь больше смысла. На данный момент, хотя я все еще немного озадачен.