StaticMeshComponentManager

This commit is contained in:
hyzboy 2025-04-01 01:11:32 +08:00
parent a50c3ef10b
commit 44b1f13048
8 changed files with 105 additions and 65 deletions

2
CMCore

@ -1 +1 @@
Subproject commit 3b3f6e7e12a67701e143dc0415acbef2d592083b
Subproject commit d09fe4326ea3629434adcd034a99ebbdb8fa6c22

View File

@ -11,10 +11,16 @@
*
* AMD FidelityFX中Component存放于Entity下SceneNode
* Entity还是SceneNodeComponent的管理
* AMD FidelityFX中的SceneSceneWorld
*
* ComponentData是每个Component的数据Component或是其它模块提供数据
* ComponentManager是Component的管理器Component的创建
*
* AMD FidelityFX一样ComponentManager与SceneWorld基本无关
* World之中
* SceneWorld密切相关的Component它对应的Manager才会出现在SceneWorld中CameraManager/LightManager
* StaticMeshComponent之类的纯资源型就会是独立存在的
*
* Component是组件的基类
*
*
@ -69,7 +75,7 @@ COMPONENT_NAMESPACE_BEGIN
public:
virtual void Update(const double delta_time)=0;
//virtual void Update(const double delta_time)=0;
public: //事件
@ -109,5 +115,4 @@ COMPONENT_NAMESPACE_BEGIN
virtual void OnFocusLost(){} ///<焦点丢失事件
virtual void OnFocusGained(){} ///<焦点获得事件
};//class ComponentManager
COMPONENT_NAMESPACE_END

View File

@ -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

View File

@ -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

View File

@ -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;}

View File

@ -24,12 +24,17 @@ namespace hgl
public:
SceneWorld()
{
root_node=new SceneNode;
}
virtual ~SceneWorld()
{
SAFE_CLEAR(root_node);
}
public:
SceneNode *GetRootNode() { return root_node; }
};//class SceneWorld
}//namespace graph
}//namespace hgl

View File

@ -294,7 +294,9 @@ set(COMPONENT_INCLUDE_PATH ${ROOT_INCLUDE_PATH}/hgl/component)
SET(COMPONENT_FILES ${COMPONENT_INCLUDE_PATH}/Component.h
${COMPONENT_INCLUDE_PATH}/RenderComponent.h
${COMPONENT_INCLUDE_PATH}/PrimitiveComponent.h
${COMPONENT_INCLUDE_PATH}/StaticMeshComponent.h
component/ComponentManager.cpp
component/StaticMeshComponentManager.cpp
)
SOURCE_GROUP("Component" FILES ${COMPONENT_FILES})

View File

@ -0,0 +1,27 @@
#include<hgl/component/StaticMeshComponent.h>
#include<hgl/graph/SceneNode.h>
COMPONENT_NAMESPACE_BEGIN
size_t StaticMeshComponentManager::ComponentHashCode()const
{
return GetTypeHash<StaticMeshComponentManager>();
}
StaticMeshComponent *StaticMeshComponentManager::CreateStaticMeshComponent(SceneNode *psn,StaticMeshComponentData *data)
{
if(!psn||!data)return(nullptr);
StaticMeshComponent *smc=new StaticMeshComponent(psn,data,this);
psn->AddComponent(smc);
return smc;
}
Component *StaticMeshComponentManager::CreateComponent(SceneNode *psn,ComponentData *data)
{
return CreateStaticMeshComponent(psn,reinterpret_cast<StaticMeshComponentData *>(data));
}
COMPONENT_NAMESPACE_END