From fa7a0fca626b5c6d2ab9ca921fc5c56953594703 Mon Sep 17 00:00:00 2001 From: hyzboy Date: Tue, 24 Jun 2025 00:49:18 +0800 Subject: [PATCH] =?UTF-8?q?HashCode=E7=BB=9F=E4=B8=80=E6=94=B9=E5=90=8D?= =?UTF-8?q?=E4=B8=BATypeHash?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- inc/hgl/component/Component.h | 58 ++++++++++--------- inc/hgl/component/MeshComponent.h | 5 +- src/SceneGraph/component/Component.cpp | 4 +- src/SceneGraph/component/ComponentManager.cpp | 2 +- src/SceneGraph/render/RenderList.cpp | 2 +- 5 files changed, 36 insertions(+), 35 deletions(-) diff --git a/inc/hgl/component/Component.h b/inc/hgl/component/Component.h index 255a52e4..c53f3d28 100644 --- a/inc/hgl/component/Component.h +++ b/inc/hgl/component/Component.h @@ -51,17 +51,17 @@ public: ComponentData()=default; virtual ~ComponentData()=default; - virtual const size_t GetHashCode()const=0; ///<取得ComponentData的类型哈希值 - virtual const size_t GetComponentHashCode()const=0; ///<取得Component的类型哈希值 - virtual const size_t GetManagerHashCode()const=0; ///<取得ComponentManager的类型哈希值 + virtual const size_t GetTypeHash()const=0; ///<取得ComponentData的类型哈希值 + virtual const size_t GetComponentTypeHash()const=0; ///<取得Component的类型哈希值 + virtual const size_t GetManagerTypeHash()const=0; ///<取得ComponentManager的类型哈希值 };//struct ComponentData -#define COMPONENT_DATA_CLASS_BODY(name) static constexpr const size_t StaticHashCode (){return hgl::GetTypeHash();} \ - static constexpr const size_t StaticComponentHashCode(){return hgl::GetTypeHash();} \ - static constexpr const size_t StaticManagerHashCode (){return hgl::GetTypeHash();} \ - const size_t GetHashCode ()const override{return name##ComponentData::StaticHashCode();} \ - const size_t GetComponentHashCode ()const override{return name##ComponentData::StaticComponentHashCode();} \ - const size_t GetManagerHashCode ()const override{return name##ComponentData::StaticManagerHashCode();} +#define COMPONENT_DATA_CLASS_BODY(name) static constexpr const size_t StaticTypeHash (){return hgl::GetTypeHash();} \ + static constexpr const size_t StaticComponentTypeHash(){return hgl::GetTypeHash();} \ + static constexpr const size_t StaticManagerTypeHash (){return hgl::GetTypeHash();} \ + const size_t GetTypeHash ()const override{return StaticTypeHash();} \ + const size_t GetComponentTypeHash ()const override{return StaticComponentTypeHash();} \ + const size_t GetManagerTypeHash ()const override{return StaticManagerTypeHash();} using ComponentDataPtr=SharedPtr; @@ -95,9 +95,9 @@ public: Component(ComponentDataPtr,ComponentManager *); virtual ~Component(); - virtual const size_t GetHashCode()const=0; ///<取得Component的类型哈希值 - virtual const size_t GetDataHashCode()const=0; ///<取得ComponentData的类型哈希值 - virtual const size_t GetManagerHashCode()const=0; ///<取得ComponentManager的类型哈希值 + virtual const size_t GetTypeHash()const=0; ///<取得Component的类型哈希值 + virtual const size_t GetDataTypeHash()const=0; ///<取得ComponentData的类型哈希值 + virtual const size_t GetManagerTypeHash()const=0; ///<取得ComponentManager的类型哈希值 public: @@ -126,12 +126,14 @@ public: //事件 virtual void OnFocusGained(){} ///<焦点获得事件 };//class Component -#define COMPONENT_CLASS_BODY(name) static name##ComponentManager *GetDefaultManager () {return name##ComponentManager::GetDefaultManager();} \ - name##ComponentManager *GetManager ()const {return (name##ComponentManager *)Component::GetManager();} \ - static constexpr const size_t StaticHashCode () {return hgl::GetTypeHash();} \ - const size_t GetHashCode ()const override{return name##Component::StaticHashCode();} \ - const size_t GetDataHashCode ()const override{return name::ComponentData::StaticHashCode();} \ - const size_t GetManagerHashCode ()const override{return name##ComponentManager::StaticHashCode();} +#define COMPONENT_CLASS_BODY(name) static name##ComponentManager *GetDefaultManager () {return name##ComponentManager::GetDefaultManager();} \ + name##ComponentManager *GetManager ()const {return (name##ComponentManager *)Component::GetManager();} \ + static constexpr const size_t StaticTypeHash () {return hgl::GetTypeHash();} \ + static constexpr const size_t StaticDataTypeHash () {return hgl::GetTypeHash();} \ + static constexpr const size_t StaticManagerTypeHash () {return hgl::GetTypeHash();} \ + const size_t GetTypeHash ()const override{return StaticTypeHash();} \ + const size_t GetDataTypeHash ()const override{return StaticDataTypeHash();} \ + const size_t GetManagerTypeHash ()const override{return StaticManagerTypeHash();} using ComponentSet=SortedSet; using ComponentList=ArrayList; @@ -149,9 +151,9 @@ protected: public: - virtual const size_t GetComponentHashCode()const=0; ///<取得Component的类型哈希值 - virtual const size_t GetDataHashCode()const=0; ///<取得ComponentData的类型哈希值 - virtual const size_t GetHashCode()const=0; ///<取得ComponentManager的类型哈希值 + virtual const size_t GetComponentTypeHash()const=0; ///<取得Component的类型哈希值 + virtual const size_t GetDataTypeHash()const=0; ///<取得ComponentData的类型哈希值 + virtual const size_t GetTypeHash()const=0; ///<取得ComponentManager的类型哈希值 virtual ~ComponentManager(); @@ -174,19 +176,19 @@ public: //事件 };//class ComponentManager #define COMPONENT_MANAGER_CLASS_BODY(name) static name##ComponentManager * GetDefaultManager () {return GetComponentManager(true);} \ - static constexpr const size_t StaticHashCode () {return hgl::GetTypeHash();} \ - static constexpr const size_t StaticDataHashCode () {return hgl::GetTypeHash();} \ - static constexpr const size_t StaticComponentHashCode () {return hgl::GetTypeHash();} \ - const size_t GetComponentHashCode ()const override{return name##ComponentManager::StaticComponentHashCode();} \ - const size_t GetDataHashCode ()const override{return name##ComponentManager::StaticDataHashCode();} \ - const size_t GetHashCode ()const override{return name##ComponentManager::StaticHashCode();} + static constexpr const size_t StaticTypeHash () {return hgl::GetTypeHash();} \ + static constexpr const size_t StaticDataTypeHash () {return hgl::GetTypeHash();} \ + static constexpr const size_t StaticComponentTypeHash () {return hgl::GetTypeHash();} \ + const size_t GetComponentTypeHash ()const override{return StaticComponentTypeHash();} \ + const size_t GetDataTypeHash ()const override{return StaticDataTypeHash();} \ + const size_t GetTypeHash ()const override{return StaticTypeHash();} bool RegistryComponentManager(ComponentManager *); ComponentManager *GetComponentManager(const size_t hash_code); template inline T *GetComponentManager(bool create_default=true) { - T *cm=(T *)GetComponentManager(T::StaticHashCode()); + T *cm=(T *)GetComponentManager(T::StaticTypeHash()); if(!cm&&create_default) { diff --git a/inc/hgl/component/MeshComponent.h b/inc/hgl/component/MeshComponent.h index 4b38bd0c..c48c9d61 100644 --- a/inc/hgl/component/MeshComponent.h +++ b/inc/hgl/component/MeshComponent.h @@ -7,6 +7,9 @@ COMPONENT_NAMESPACE_BEGIN +class MeshComponent; +class MeshComponentManager; + struct MeshComponentData:public ComponentData { //static uint unique_id_count; @@ -38,8 +41,6 @@ public: COMPONENT_DATA_CLASS_BODY(Mesh) };//struct MeshComponentData -class MeshComponent; - class MeshComponentManager:public ComponentManager { public: diff --git a/src/SceneGraph/component/Component.cpp b/src/SceneGraph/component/Component.cpp index f087d125..ea057734 100644 --- a/src/SceneGraph/component/Component.cpp +++ b/src/SceneGraph/component/Component.cpp @@ -44,9 +44,7 @@ namespace hgl::graph if(Data==cdp) return(true); //数据没有变化 - ComponentData *cd=cdp.get(); - - if(cd->GetHashCode()!=GetHashCode()) //类型不对 + if(cdp->GetTypeHash()!=GetTypeHash()) //类型不对 { LOG_ERROR(OS_TEXT("Component::ChangeData: component data type mismatch.")); return(false); diff --git a/src/SceneGraph/component/ComponentManager.cpp b/src/SceneGraph/component/ComponentManager.cpp index a529fdeb..b5b60ce0 100644 --- a/src/SceneGraph/component/ComponentManager.cpp +++ b/src/SceneGraph/component/ComponentManager.cpp @@ -39,7 +39,7 @@ namespace hgl::graph if(!component_manager_map) return(false); - const size_t hash_code=cm->GetHashCode(); + const size_t hash_code=cm->GetTypeHash(); if(component_manager_map->contains(hash_code)) return(false); diff --git a/src/SceneGraph/render/RenderList.cpp b/src/SceneGraph/render/RenderList.cpp index bfad7816..c93f53fb 100644 --- a/src/SceneGraph/render/RenderList.cpp +++ b/src/SceneGraph/render/RenderList.cpp @@ -25,7 +25,7 @@ namespace hgl for(auto component:sn->GetComponents()) { - if(component->GetHashCode()!=MeshComponent::StaticHashCode()) //暂时只支持MeshComponent + if(component->GetTypeHash()!=MeshComponent::StaticTypeHash()) //暂时只支持MeshComponent continue; MeshComponent *smc=dynamic_cast(component);