diff --git a/inc/hgl/component/Component.h b/inc/hgl/component/Component.h index 79866c91..ec61324b 100644 --- a/inc/hgl/component/Component.h +++ b/inc/hgl/component/Component.h @@ -50,6 +50,8 @@ public: ComponentData()=default; virtual ~ComponentData()=default; + + virtual ComponentData *Duplication()=0; }; /** @@ -94,7 +96,7 @@ public: public: - virtual Component *Duplication()=0; + virtual Component *Duplication(); //virtual void Update(const double delta_time)=0; diff --git a/inc/hgl/component/MeshComponent.h b/inc/hgl/component/MeshComponent.h index 62785068..3e2eeac3 100644 --- a/inc/hgl/component/MeshComponent.h +++ b/inc/hgl/component/MeshComponent.h @@ -22,6 +22,11 @@ public: } virtual ~MeshComponentData(); + + ComponentData *Duplication() override + { + return(new MeshComponentData(mesh)); + } };//struct MeshComponentData class MeshComponent; @@ -75,19 +80,6 @@ public: const MeshComponentData &GetData()const {return *sm_data;} Mesh *GetMesh() const{return sm_data->mesh;} - -public: - - virtual Component *Duplication() override - { - MeshComponentManager *manager=GetManager(); - - MeshComponent *mc=manager->CreateComponent(sm_data->mesh); - - mc->SetLocalMatrix(GetLocalMatrix()); - - return mc; - } };//class MeshComponent COMPONENT_NAMESPACE_END diff --git a/inc/hgl/component/SceneComponent.h b/inc/hgl/component/SceneComponent.h index 9628f82e..ec10ce44 100644 --- a/inc/hgl/component/SceneComponent.h +++ b/inc/hgl/component/SceneComponent.h @@ -15,6 +15,17 @@ public: using Component::Component; virtual ~SceneComponent()=default; + + virtual Component *Duplication() override + { + SceneComponent *sc=(SceneComponent *)Component::Duplication(); + + if(!sc) + return(sc); + + sc->SetLocalMatrix(GetLocalMatrix()); + return sc; + } };//class SceneComponent COMPONENT_NAMESPACE_END diff --git a/src/SceneGraph/component/Component.cpp b/src/SceneGraph/component/Component.cpp index 1627dd0d..365a8537 100644 --- a/src/SceneGraph/component/Component.cpp +++ b/src/SceneGraph/component/Component.cpp @@ -34,4 +34,9 @@ namespace hgl::graph SAFE_CLEAR(Data); } + + Component *Component::Duplication() + { + return GetManager()->CreateComponent(Data?Data->Duplication():nullptr); + } }//namespace hgl::graph