增加ComponentManager::GetComponents(..SceneNode)

This commit is contained in:
hyzboy 2025-03-25 01:17:18 +08:00
parent 6d211b3840
commit ee5d633596
3 changed files with 54 additions and 15 deletions

View File

@ -2,6 +2,7 @@
#include<hgl/type/DataType.h>
#include<hgl/type/SortedSet.h>
#include<hgl/type/List.h>
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<Component *>;
class ComponentManager
{
SortedSet<Component *> 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;i<ComponentSet.GetCount();i++)
cc[i]->Update(delta_time);
}
int GetComponents(List<Component *> &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

View File

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

View File

@ -0,0 +1,30 @@
#include<hgl/component/Component.h>
namespace hgl::graph
{
int ComponentManager::GetComponents(List<Component *> &comp_list,SceneNode *node)
{
if(!node)return(-1);
Component **cc=component_set.GetData();
int result=0;
for(int i=0;i<component_set.GetCount();i++)
if(cc[i]->GetOwnerNode()==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;i<component_set.GetCount();i++)
cc[i]->Update(delta_time);
}
}//namespace hgl::graph