实现了由Component实现的自我复制,而无需关心具体的Component派生类.
This commit is contained in:
parent
a23654c73a
commit
dd083bb82b
@ -50,6 +50,8 @@ public:
|
|||||||
|
|
||||||
ComponentData()=default;
|
ComponentData()=default;
|
||||||
virtual ~ComponentData()=default;
|
virtual ~ComponentData()=default;
|
||||||
|
|
||||||
|
virtual ComponentData *Duplication()=0;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -94,7 +96,7 @@ public:
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
virtual Component *Duplication()=0;
|
virtual Component *Duplication();
|
||||||
|
|
||||||
//virtual void Update(const double delta_time)=0;
|
//virtual void Update(const double delta_time)=0;
|
||||||
|
|
||||||
|
@ -22,6 +22,11 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
virtual ~MeshComponentData();
|
virtual ~MeshComponentData();
|
||||||
|
|
||||||
|
ComponentData *Duplication() override
|
||||||
|
{
|
||||||
|
return(new MeshComponentData(mesh));
|
||||||
|
}
|
||||||
};//struct MeshComponentData
|
};//struct MeshComponentData
|
||||||
|
|
||||||
class MeshComponent;
|
class MeshComponent;
|
||||||
@ -75,19 +80,6 @@ public:
|
|||||||
const MeshComponentData &GetData()const {return *sm_data;}
|
const MeshComponentData &GetData()const {return *sm_data;}
|
||||||
|
|
||||||
Mesh *GetMesh() const{return sm_data->mesh;}
|
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
|
};//class MeshComponent
|
||||||
|
|
||||||
COMPONENT_NAMESPACE_END
|
COMPONENT_NAMESPACE_END
|
||||||
|
@ -15,6 +15,17 @@ public:
|
|||||||
|
|
||||||
using Component::Component;
|
using Component::Component;
|
||||||
virtual ~SceneComponent()=default;
|
virtual ~SceneComponent()=default;
|
||||||
|
|
||||||
|
virtual Component *Duplication() override
|
||||||
|
{
|
||||||
|
SceneComponent *sc=(SceneComponent *)Component::Duplication();
|
||||||
|
|
||||||
|
if(!sc)
|
||||||
|
return(sc);
|
||||||
|
|
||||||
|
sc->SetLocalMatrix(GetLocalMatrix());
|
||||||
|
return sc;
|
||||||
|
}
|
||||||
};//class SceneComponent
|
};//class SceneComponent
|
||||||
|
|
||||||
COMPONENT_NAMESPACE_END
|
COMPONENT_NAMESPACE_END
|
||||||
|
@ -34,4 +34,9 @@ namespace hgl::graph
|
|||||||
|
|
||||||
SAFE_CLEAR(Data);
|
SAFE_CLEAR(Data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Component *Component::Duplication()
|
||||||
|
{
|
||||||
|
return GetManager()->CreateComponent(Data?Data->Duplication():nullptr);
|
||||||
|
}
|
||||||
}//namespace hgl::graph
|
}//namespace hgl::graph
|
||||||
|
Loading…
x
Reference in New Issue
Block a user