实现一些Component/ComponentManager定义StaticHashCode/GetHashCode()...RegistryComponentManager/GetComponentManager()
This commit is contained in:
@@ -65,7 +65,12 @@ public:
|
||||
Manager=cm;
|
||||
}
|
||||
|
||||
virtual ~Component()=default;
|
||||
virtual ~Component()
|
||||
{
|
||||
SAFE_CLEAR(Data);
|
||||
}
|
||||
|
||||
virtual const size_t GetHashCode()const=0;
|
||||
|
||||
public:
|
||||
|
||||
@@ -91,12 +96,13 @@ class ComponentManager
|
||||
|
||||
public:
|
||||
|
||||
virtual const size_t GetComponentHashCode()const=0;
|
||||
virtual const size_t GetHashCode()const=0;
|
||||
|
||||
virtual ~ComponentManager()=default;
|
||||
|
||||
public:
|
||||
|
||||
virtual size_t ComponentHashCode()const=0;
|
||||
|
||||
virtual Component * CreateComponent(SceneNode *,ComponentData *)=0;
|
||||
|
||||
int GetComponentCount()const{return component_set.GetCount();}
|
||||
@@ -115,4 +121,21 @@ public: //事件
|
||||
virtual void OnFocusLost(){} ///<焦点丢失事件
|
||||
virtual void OnFocusGained(){} ///<焦点获得事件
|
||||
};//class ComponentManager
|
||||
|
||||
bool RegistryComponentManager(ComponentManager *);
|
||||
ComponentManager *GetComponentManager(const size_t hash_code);
|
||||
|
||||
template<typename T> inline T *GetComponentManager(bool create_default=true)
|
||||
{
|
||||
T *cm=(T *)GetComponentManager(T::StaticHashCode());
|
||||
|
||||
if(!cm&&create_default)
|
||||
{
|
||||
cm=new T;
|
||||
|
||||
RegistryComponentManager(cm);
|
||||
}
|
||||
|
||||
return cm;
|
||||
}
|
||||
COMPONENT_NAMESPACE_END
|
||||
|
@@ -16,9 +16,20 @@ class StaticMeshComponentManager:public ComponentManager
|
||||
{
|
||||
public:
|
||||
|
||||
StaticMeshComponentManager()=default;
|
||||
static StaticMeshComponentManager *GetDefaultManager()
|
||||
{
|
||||
return GetComponentManager<StaticMeshComponentManager>(true);
|
||||
}
|
||||
|
||||
size_t ComponentHashCode()const override;
|
||||
static constexpr const size_t StaticHashCode (){return hgl::GetTypeHash<StaticMeshComponentManager>();}
|
||||
static constexpr const size_t StaticComponentHashCode (){return hgl::GetTypeHash<StaticMeshComponent>();}
|
||||
|
||||
const size_t GetComponentHashCode ()const override{return StaticMeshComponentManager::StaticComponentHashCode();}
|
||||
const size_t GetHashCode ()const override{return StaticMeshComponentManager::StaticHashCode();}
|
||||
|
||||
public:
|
||||
|
||||
StaticMeshComponentManager()=default;
|
||||
|
||||
StaticMeshComponent *CreateStaticMeshComponent(SceneNode *psn,StaticMeshComponentData *data);
|
||||
|
||||
@@ -37,9 +48,16 @@ public:
|
||||
sm_data=reinterpret_cast<StaticMeshComponentData *>(cd);
|
||||
}
|
||||
|
||||
virtual ~StaticMeshComponent()
|
||||
virtual ~StaticMeshComponent()=default;
|
||||
|
||||
static constexpr const size_t StaticHashCode()
|
||||
{
|
||||
SAFE_CLEAR(sm_data);
|
||||
return hgl::GetTypeHash<StaticMeshComponent>();
|
||||
}
|
||||
|
||||
const size_t GetHashCode()const override
|
||||
{
|
||||
return StaticMeshComponent::StaticHashCode();
|
||||
}
|
||||
|
||||
StaticMeshComponentData &GetData() {return *sm_data;}
|
||||
|
@@ -1,40 +1,38 @@
|
||||
#pragma once
|
||||
|
||||
#include<hgl/graph/SceneNode.h>
|
||||
|
||||
namespace hgl
|
||||
namespace hgl::graph
|
||||
{
|
||||
namespace graph
|
||||
class CameraData
|
||||
{
|
||||
class CameraData
|
||||
};
|
||||
|
||||
class CameraManager
|
||||
{
|
||||
public:
|
||||
};
|
||||
|
||||
/**
|
||||
* 世界场景管理器<Br>
|
||||
* 管理一个世界场景中的所有资源与场景节点
|
||||
*/
|
||||
class SceneWorld
|
||||
{
|
||||
SceneNode *root_node; ///<世界根节点
|
||||
|
||||
public:
|
||||
|
||||
SceneWorld()
|
||||
{
|
||||
};
|
||||
root_node=new SceneNode;
|
||||
}
|
||||
|
||||
class CameraManager
|
||||
virtual ~SceneWorld()
|
||||
{
|
||||
public:
|
||||
};
|
||||
SAFE_CLEAR(root_node);
|
||||
}
|
||||
|
||||
/**
|
||||
* 世界场景管理器<Br>
|
||||
* 管理一个世界场景中的所有资源与场景节点
|
||||
*/
|
||||
class SceneWorld
|
||||
{
|
||||
SceneNode *root_node; ///<世界根节点
|
||||
|
||||
public:
|
||||
|
||||
SceneWorld()
|
||||
{
|
||||
root_node=new SceneNode;
|
||||
}
|
||||
|
||||
virtual ~SceneWorld()
|
||||
{
|
||||
SAFE_CLEAR(root_node);
|
||||
}
|
||||
|
||||
SceneNode *GetRootNode() { return root_node; }
|
||||
};//class SceneWorld
|
||||
}//namespace graph
|
||||
}//namespace hgl
|
||||
SceneNode *GetRootNode(){return root_node;}
|
||||
};//class SceneWorld
|
||||
}//namespace hgl::graph
|
||||
|
Reference in New Issue
Block a user