diff --git a/inc/hgl/component/Component.h b/inc/hgl/component/Component.h index 3d6590ce..c2a3db5e 100644 --- a/inc/hgl/component/Component.h +++ b/inc/hgl/component/Component.h @@ -2,6 +2,7 @@ #include #include +#include namespace hgl::graph { @@ -32,6 +33,12 @@ namespace hgl::graph virtual ~Component()=default; + public: + + SceneNode * GetOwnerNode()const{return OwnerNode;} + ComponentManager * GetManager ()const{return Manager;} + ComponentData * GetData ()const{return Data;} + public: virtual void Update(const double delta_time)=0; @@ -42,9 +49,11 @@ namespace hgl::graph virtual void OnFocusGained(){} ///<焦点获得事件 };//class Component + using ComponentSet=SortedSet; + class ComponentManager { - SortedSet ComponentSet; + ComponentSet component_set; public: @@ -52,26 +61,24 @@ namespace hgl::graph public: - virtual size_t ComponentHashCode()const=0; + virtual size_t ComponentHashCode()const=0; - virtual Component * CreateComponent(SceneNode *,ComponentData *)=0; + virtual Component * CreateComponent(SceneNode *,ComponentData *)=0; - int GetComponentCount()const{return ComponentSet.GetCount();} + int GetComponentCount()const{return component_set.GetCount();} - virtual void UpdateComponents(const double delta_time) - { - Component **cc=ComponentSet.GetData(); + ComponentSet & GetComponents(){return component_set;} - for(int i=0;iUpdate(delta_time); - } + int GetComponents(List &comp_list,SceneNode *); - virtual void JoinComponent(Component *c){if(!c)return;ComponentSet.Add(c);} - virtual void UnjonComponent(Component *c){if(!c)return;ComponentSet.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(){} ///<焦点获得事件 + virtual void OnFocusLost(){} ///<焦点丢失事件 + virtual void OnFocusGained(){} ///<焦点获得事件 };//class ComponentManager }//namespace hgl::graph diff --git a/src/SceneGraph/CMakeLists.txt b/src/SceneGraph/CMakeLists.txt index d288cc31..2a07cdba 100644 --- a/src/SceneGraph/CMakeLists.txt +++ b/src/SceneGraph/CMakeLists.txt @@ -300,7 +300,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}/PrimitiveComponent.h + component/ComponentManager.cpp +) SOURCE_GROUP("Component" FILES ${COMPONENT_FILES}) diff --git a/src/SceneGraph/component/ComponentManager.cpp b/src/SceneGraph/component/ComponentManager.cpp new file mode 100644 index 00000000..d4c6a50e --- /dev/null +++ b/src/SceneGraph/component/ComponentManager.cpp @@ -0,0 +1,30 @@ +#include + +namespace hgl::graph +{ + int ComponentManager::GetComponents(List &comp_list,SceneNode *node) + { + if(!node)return(-1); + + Component **cc=component_set.GetData(); + + int result=0; + + for(int i=0;iGetOwnerNode()==node) + { + comp_list.Add(cc[i]); + ++result; + } + + return result; + } + + void ComponentManager::UpdateComponents(const double delta_time) + { + Component **cc=component_set.GetData(); + + for(int i=0;iUpdate(delta_time); + } +}//namespace hgl::graph