实现一些Component/ComponentManager定义StaticHashCode/GetHashCode()...RegistryComponentManager/GetComponentManager()

This commit is contained in:
2025-04-03 01:35:39 +08:00
parent 44b1f13048
commit 0e6546b514
5 changed files with 109 additions and 46 deletions

View File

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