实现了由Component实现的自我复制,而无需关心具体的Component派生类.
This commit is contained in:
@@ -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;
|
||||
|
||||
|
@@ -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
|
||||
|
@@ -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
|
||||
|
Reference in New Issue
Block a user