ULRE/inc/hgl/component/StaticMeshComponent.h

89 lines
2.2 KiB
C
Raw Normal View History

#pragma once
#include<hgl/component/PrimitiveComponent.h>
#include<hgl/graph/Mesh.h>
COMPONENT_NAMESPACE_BEGIN
struct StaticMeshComponentData:public ComponentData
{
2025-06-12 03:01:50 +08:00
Mesh *mesh;
public:
StaticMeshComponentData()
{
mesh=nullptr;
}
StaticMeshComponentData(Mesh *m)
{
mesh=m;
}
2025-06-14 02:32:15 +08:00
virtual ~StaticMeshComponentData();
};//struct StaticMeshComponentData
2025-04-01 01:11:32 +08:00
class StaticMeshComponent;
class StaticMeshComponentManager:public ComponentManager
{
public:
static StaticMeshComponentManager *GetDefaultManager()
{
return GetComponentManager<StaticMeshComponentManager>(true);
}
static constexpr const size_t StaticHashCode (){return hgl::GetTypeHash<StaticMeshComponentManager>();}
static constexpr const size_t StaticComponentHashCode (){return hgl::GetTypeHash<StaticMeshComponent>();}
const size_t GetComponentHashCode ()const override{return StaticMeshComponentManager::StaticComponentHashCode();}
const size_t GetHashCode ()const override{return StaticMeshComponentManager::StaticHashCode();}
public:
StaticMeshComponentManager()=default;
2025-04-01 01:11:32 +08:00
2025-06-14 02:32:15 +08:00
StaticMeshComponent *CreateStaticMeshComponent(StaticMeshComponentData *data);
2025-06-12 03:01:50 +08:00
StaticMeshComponent *CreateStaticMeshComponent(Mesh *m)
{
return CreateStaticMeshComponent(new StaticMeshComponentData(m));
}
2025-06-14 02:32:15 +08:00
virtual Component *CreateComponent(ComponentData *data) override;
};//class StaticMeshComponentManager
class StaticMeshComponent:public PrimitiveComponent
{
StaticMeshComponentData *sm_data;
public:
2025-06-14 02:32:15 +08:00
StaticMeshComponent(StaticMeshComponentData *cd,StaticMeshComponentManager *cm)
:PrimitiveComponent(cd,cm)
{
2025-06-12 03:01:50 +08:00
sm_data=cd;
}
virtual ~StaticMeshComponent()=default;
static constexpr const size_t StaticHashCode()
{
return hgl::GetTypeHash<StaticMeshComponent>();
}
const size_t GetHashCode()const override
{
return StaticMeshComponent::StaticHashCode();
}
StaticMeshComponentData &GetData() {return *sm_data;}
const StaticMeshComponentData &GetData()const {return *sm_data;}
2025-06-14 02:32:15 +08:00
Mesh *GetMesh() const{return sm_data->mesh;}
};//class StaticMeshComponent
COMPONENT_NAMESPACE_END