From 6d211b3840e036780a1af309013ff282c630b39f Mon Sep 17 00:00:00 2001 From: hyzboy Date: Tue, 25 Mar 2025 01:04:46 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=9D=E6=AD=A5=E5=AE=8C=E6=88=90Component/C?= =?UTF-8?q?omponentManager=E7=9A=84=E5=AE=9A=E4=B9=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CMCore | 2 +- inc/hgl/component/Component.h | 39 ++++++++++++++++++----------------- 2 files changed, 21 insertions(+), 20 deletions(-) diff --git a/CMCore b/CMCore index b78d31d8..3b3f6e7e 160000 --- a/CMCore +++ b/CMCore @@ -1 +1 @@ -Subproject commit b78d31d8a01ff4e7e86bf433f9046a3f783d63fa +Subproject commit 3b3f6e7e12a67701e143dc0415acbef2d592083b diff --git a/inc/hgl/component/Component.h b/inc/hgl/component/Component.h index 5832fdb6..3d6590ce 100644 --- a/inc/hgl/component/Component.h +++ b/inc/hgl/component/Component.h @@ -29,34 +29,19 @@ namespace hgl::graph Data=cd; Manager=cm; } + virtual ~Component()=default; public: virtual void Update(const double delta_time)=0; + public: //事件 + virtual void OnFocusLost(){} ///<焦点丢失事件 virtual void OnFocusGained(){} ///<焦点获得事件 };//class Component - //Component *CreateComponent(const ObjectBaseInfo &,ComponentData *); - - //template inline T *NewComponentSCL(const SourceCodeLocation &scl,ARGS...args) - //{ - // static size_t new_count=0; - // ObjectBaseInfo obi; - - // obi.hash_code =GetTypeHash(); - // obi.unique_id =new_count; - // obi.scl =scl; - - // ++new_count; - // T *obj=new T(obi); - // return obj; - //} - - //#define NewComponent(T,...) NewComponentSCL(HGL_SOURCE_LOCATION __VA_OPT__(,) __VA_ARGS__) - class ComponentManager { SortedSet ComponentSet; @@ -71,6 +56,22 @@ namespace hgl::graph virtual Component * CreateComponent(SceneNode *,ComponentData *)=0; - virtual int GetComponentCount()const=0; + int GetComponentCount()const{return ComponentSet.GetCount();} + + virtual void UpdateComponents(const double delta_time) + { + Component **cc=ComponentSet.GetData(); + + for(int i=0;iUpdate(delta_time); + } + + virtual void JoinComponent(Component *c){if(!c)return;ComponentSet.Add(c);} + virtual void UnjonComponent(Component *c){if(!c)return;ComponentSet.Delete(c);} + + public: //事件 + + virtual void OnFocusLost(){} ///<焦点丢失事件 + virtual void OnFocusGained(){} ///<焦点获得事件 };//class ComponentManager }//namespace hgl::graph