From dd083bb82b8c5f63bc7881c5ee41077e50d11d2f Mon Sep 17 00:00:00 2001 From: hyzboy Date: Mon, 16 Jun 2025 00:28:21 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=9E=E7=8E=B0=E4=BA=86=E7=94=B1Component?= =?UTF-8?q?=E5=AE=9E=E7=8E=B0=E7=9A=84=E8=87=AA=E6=88=91=E5=A4=8D=E5=88=B6?= =?UTF-8?q?=EF=BC=8C=E8=80=8C=E6=97=A0=E9=9C=80=E5=85=B3=E5=BF=83=E5=85=B7?= =?UTF-8?q?=E4=BD=93=E7=9A=84Component=E6=B4=BE=E7=94=9F=E7=B1=BB.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- inc/hgl/component/Component.h | 4 +++- inc/hgl/component/MeshComponent.h | 18 +++++------------- inc/hgl/component/SceneComponent.h | 11 +++++++++++ src/SceneGraph/component/Component.cpp | 5 +++++ 4 files changed, 24 insertions(+), 14 deletions(-) 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