diff --git a/inc/hgl/component/Component.h b/inc/hgl/component/Component.h index 847a83d9..5832fdb6 100644 --- a/inc/hgl/component/Component.h +++ b/inc/hgl/component/Component.h @@ -1,21 +1,76 @@ #pragma once #include +#include namespace hgl::graph { + class ComponentManager; + class SceneNode; + + struct ComponentData{}; + /** * 基础组件
* 是一切组件的基类 */ - class BaseComponent + class Component { + SceneNode * OwnerNode; + ComponentManager * Manager; + ComponentData * Data; + public: - virtual ~BaseComponent()=default; + Component()=delete; + Component(SceneNode *sn,ComponentData *cd,ComponentManager *cm) + { + OwnerNode=sn; + Data=cd; + Manager=cm; + } + virtual ~Component()=default; - public: //序列化 + public: + virtual void Update(const double delta_time)=0; - };//class BaseComponent + 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; + + public: + + virtual ~ComponentManager()=default; + + public: + + virtual size_t ComponentHashCode()const=0; + + virtual Component * CreateComponent(SceneNode *,ComponentData *)=0; + + virtual int GetComponentCount()const=0; + };//class ComponentManager }//namespace hgl::graph diff --git a/inc/hgl/component/RenderComponent.h b/inc/hgl/component/RenderComponent.h index 70cb9902..bf6a3cd4 100644 --- a/inc/hgl/component/RenderComponent.h +++ b/inc/hgl/component/RenderComponent.h @@ -7,7 +7,7 @@ namespace hgl::graph /** * 可渲染组件 */ - class RenderComponent: public BaseComponent + class RenderComponent: public Component { public: diff --git a/inc/hgl/graph/RenderNode.h b/inc/hgl/graph/RenderNode.h index 19c62508..15aca634 100644 --- a/inc/hgl/graph/RenderNode.h +++ b/inc/hgl/graph/RenderNode.h @@ -1,8 +1,8 @@ -#ifndef HGL_GRAPH_RENDER_NODE_INCLUDE -#define HGL_GRAPH_RENDER_NODE_INCLUDE +#pragma once #include #include + namespace hgl { namespace graph @@ -40,4 +40,3 @@ namespace hgl return a.compare(b); } }//namespace hgl -#endif//HGL_GRAPH_RENDER_NODE_INCLUDE