StaticMeshComponentManager
This commit is contained in:
@@ -11,10 +11,16 @@
|
||||
*
|
||||
* AMD FidelityFX中,Component存放于Entity下,而我方中与其类似的定义为SceneNode。
|
||||
* 不管是Entity还是SceneNode,它们都提供空间变换,以及子节点、Component的管理。
|
||||
* 而AMD FidelityFX中的Scene,类似于我方的SceneWorld,用于储存一个场景世界的根节点及其它世界唯一数据。
|
||||
*
|
||||
* ComponentData是每个Component的数据,用于向Component或是其它模块提供数据。
|
||||
* ComponentManager是Component的管理器,用于管理Component的创建、销毁、更新等。
|
||||
*
|
||||
* 需要注意的是:同AMD FidelityFX一样,大部分ComponentManager与SceneWorld基本无关。
|
||||
* 因为同样的数据可能出现在多个World之中。
|
||||
* 仅有那些与SceneWorld密切相关的Component它对应的Manager才会出现在SceneWorld中,比如CameraManager/LightManager。
|
||||
* 而如StaticMeshComponent之类的纯资源型就会是独立存在的。
|
||||
*
|
||||
* Component是组件的基类,所有组件都从这里派生。
|
||||
*
|
||||
*
|
||||
@@ -34,80 +40,79 @@
|
||||
|
||||
COMPONENT_NAMESPACE_BEGIN
|
||||
|
||||
class ComponentManager;
|
||||
class SceneNode;
|
||||
class ComponentManager;
|
||||
class SceneNode;
|
||||
|
||||
struct ComponentData{};
|
||||
struct ComponentData{};
|
||||
|
||||
/**
|
||||
* 基础组件<br>
|
||||
* 是一切组件的基类
|
||||
*/
|
||||
class Component
|
||||
/**
|
||||
* 基础组件<br>
|
||||
* 是一切组件的基类
|
||||
*/
|
||||
class Component
|
||||
{
|
||||
SceneNode * OwnerNode;
|
||||
ComponentManager * Manager;
|
||||
ComponentData * Data;
|
||||
|
||||
public:
|
||||
|
||||
Component()=delete;
|
||||
Component(SceneNode *sn,ComponentData *cd,ComponentManager *cm)
|
||||
{
|
||||
SceneNode * OwnerNode;
|
||||
ComponentManager * Manager;
|
||||
ComponentData * Data;
|
||||
OwnerNode=sn;
|
||||
Data=cd;
|
||||
Manager=cm;
|
||||
}
|
||||
|
||||
public:
|
||||
virtual ~Component()=default;
|
||||
|
||||
Component()=delete;
|
||||
Component(SceneNode *sn,ComponentData *cd,ComponentManager *cm)
|
||||
{
|
||||
OwnerNode=sn;
|
||||
Data=cd;
|
||||
Manager=cm;
|
||||
}
|
||||
public:
|
||||
|
||||
virtual ~Component()=default;
|
||||
SceneNode * GetOwnerNode()const{return OwnerNode;}
|
||||
ComponentManager * GetManager ()const{return Manager;}
|
||||
ComponentData * GetData ()const{return Data;}
|
||||
|
||||
public:
|
||||
public:
|
||||
|
||||
SceneNode * GetOwnerNode()const{return OwnerNode;}
|
||||
ComponentManager * GetManager ()const{return Manager;}
|
||||
ComponentData * GetData ()const{return Data;}
|
||||
//virtual void Update(const double delta_time)=0;
|
||||
|
||||
public:
|
||||
public: //事件
|
||||
|
||||
virtual void Update(const double delta_time)=0;
|
||||
virtual void OnFocusLost(){} ///<焦点丢失事件
|
||||
virtual void OnFocusGained(){} ///<焦点获得事件
|
||||
};//class Component
|
||||
|
||||
public: //事件
|
||||
using ComponentSet=SortedSet<Component *>;
|
||||
|
||||
virtual void OnFocusLost(){} ///<焦点丢失事件
|
||||
virtual void OnFocusGained(){} ///<焦点获得事件
|
||||
};//class Component
|
||||
class ComponentManager
|
||||
{
|
||||
ComponentSet component_set;
|
||||
|
||||
using ComponentSet=SortedSet<Component *>;
|
||||
public:
|
||||
|
||||
class ComponentManager
|
||||
{
|
||||
ComponentSet component_set;
|
||||
virtual ~ComponentManager()=default;
|
||||
|
||||
public:
|
||||
public:
|
||||
|
||||
virtual ~ComponentManager()=default;
|
||||
virtual size_t ComponentHashCode()const=0;
|
||||
|
||||
public:
|
||||
virtual Component * CreateComponent(SceneNode *,ComponentData *)=0;
|
||||
|
||||
virtual size_t ComponentHashCode()const=0;
|
||||
int GetComponentCount()const{return component_set.GetCount();}
|
||||
|
||||
virtual Component * CreateComponent(SceneNode *,ComponentData *)=0;
|
||||
ComponentSet & GetComponents(){return component_set;}
|
||||
|
||||
int GetComponentCount()const{return component_set.GetCount();}
|
||||
int GetComponents(List<Component *> &comp_list,SceneNode *);
|
||||
|
||||
ComponentSet & GetComponents(){return component_set;}
|
||||
virtual void UpdateComponents(const double delta_time);
|
||||
|
||||
int GetComponents(List<Component *> &comp_list,SceneNode *);
|
||||
virtual void JoinComponent(Component *c){if(!c)return;component_set.Add(c);}
|
||||
virtual void UnjonComponent(Component *c){if(!c)return;component_set.Delete(c);}
|
||||
|
||||
virtual void UpdateComponents(const double delta_time);
|
||||
|
||||
virtual void JoinComponent(Component *c){if(!c)return;component_set.Add(c);}
|
||||
virtual void UnjonComponent(Component *c){if(!c)return;component_set.Delete(c);}
|
||||
|
||||
public: //事件
|
||||
|
||||
virtual void OnFocusLost(){} ///<焦点丢失事件
|
||||
virtual void OnFocusGained(){} ///<焦点获得事件
|
||||
};//class ComponentManager
|
||||
public: //事件
|
||||
|
||||
virtual void OnFocusLost(){} ///<焦点丢失事件
|
||||
virtual void OnFocusGained(){} ///<焦点获得事件
|
||||
};//class ComponentManager
|
||||
COMPONENT_NAMESPACE_END
|
||||
|
@@ -12,7 +12,8 @@ class PrimitiveComponent:public RenderComponent
|
||||
{
|
||||
public:
|
||||
|
||||
PrimitiveComponent()=default;
|
||||
PrimitiveComponent(SceneNode *psn,ComponentData *cd,ComponentManager *cm)
|
||||
:RenderComponent(psn,cd,cm){}
|
||||
virtual ~PrimitiveComponent()=default;
|
||||
};//class PrimitiveComponent
|
||||
|
||||
|
@@ -11,7 +11,8 @@ class RenderComponent: public Component
|
||||
{
|
||||
public:
|
||||
|
||||
RenderComponent()=default;
|
||||
RenderComponent(SceneNode *psn,ComponentData *cd,ComponentManager *cm)
|
||||
:Component(psn,cd,cm){}
|
||||
virtual ~RenderComponent()=default;
|
||||
};//class RenderComponent
|
||||
|
||||
|
@@ -10,7 +10,7 @@ struct StaticMeshComponentData:public ComponentData
|
||||
Renderable *renderable;
|
||||
};//struct StaticMeshComponentData
|
||||
|
||||
class StaticMeshComponent:public PrimitiveComponent;
|
||||
class StaticMeshComponent;
|
||||
|
||||
class StaticMeshComponentManager:public ComponentManager
|
||||
{
|
||||
@@ -18,12 +18,11 @@ public:
|
||||
|
||||
StaticMeshComponentManager()=default;
|
||||
|
||||
size_t ComponentHashCode()const override;
|
||||
|
||||
StaticMeshComponent *CreateStaticMeshComponent(SceneNode *psn,StaticMeshComponentData *data);
|
||||
|
||||
virtual Component *CreateComponent(SceneNode *psn,ComponentData *data) override
|
||||
{
|
||||
return CreateStaticMeshComponent(psn,reinterpret_cast<StaticMeshComponentData *>(data));
|
||||
}
|
||||
virtual Component *CreateComponent(SceneNode *psn,ComponentData *data) override;
|
||||
};//class StaticMeshComponentManager
|
||||
|
||||
class StaticMeshComponent:public PrimitiveComponent
|
||||
@@ -40,7 +39,7 @@ public:
|
||||
|
||||
virtual ~StaticMeshComponent()
|
||||
{
|
||||
SAFE_CLEAR(sm_Data);
|
||||
SAFE_CLEAR(sm_data);
|
||||
}
|
||||
|
||||
StaticMeshComponentData &GetData() {return *sm_data;}
|
||||
|
Reference in New Issue
Block a user