恢复Duplication(SceneNode *),并实现MeshComponent::Duplication...下一步Component::Duplication()改成由基类实现.
This commit is contained in:
parent
dd2ee57954
commit
a23654c73a
@ -76,7 +76,7 @@ private:
|
|||||||
{
|
{
|
||||||
SceneNode *root=GetSceneRoot();
|
SceneNode *root=GetSceneRoot();
|
||||||
|
|
||||||
root->Add(sm_move);
|
root->Add(Duplication(sm_move));
|
||||||
//root.Add(Duplication(sm_rotate->GetScene()));
|
//root.Add(Duplication(sm_rotate->GetScene()));
|
||||||
//root.CreateSubNode(sm_scale->GetScene());
|
//root.CreateSubNode(sm_scale->GetScene());
|
||||||
}
|
}
|
||||||
|
@ -94,6 +94,8 @@ public:
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
|
virtual Component *Duplication()=0;
|
||||||
|
|
||||||
//virtual void Update(const double delta_time)=0;
|
//virtual void Update(const double delta_time)=0;
|
||||||
|
|
||||||
public: //事件
|
public: //事件
|
||||||
@ -105,6 +107,11 @@ public: //事件
|
|||||||
virtual void OnFocusGained(){} ///<焦点获得事件
|
virtual void OnFocusGained(){} ///<焦点获得事件
|
||||||
};//class Component
|
};//class Component
|
||||||
|
|
||||||
|
#define COMPONENT_CLASS_BODY(name) static name##ComponentManager *GetDefaultManager () {return name##ComponentManager::GetDefaultManager();} \
|
||||||
|
name##ComponentManager *GetManager ()const {return (name##ComponentManager *)Component::GetManager();} \
|
||||||
|
static constexpr const size_t StaticHashCode () {return hgl::GetTypeHash<name##Component>();} \
|
||||||
|
const size_t GetHashCode ()const override{return name##Component::StaticHashCode();}
|
||||||
|
|
||||||
using ComponentSet=SortedSet<Component *>;
|
using ComponentSet=SortedSet<Component *>;
|
||||||
using ComponentList=ArrayList<Component *>;
|
using ComponentList=ArrayList<Component *>;
|
||||||
|
|
||||||
|
@ -61,31 +61,33 @@ class MeshComponent:public RenderComponent
|
|||||||
{
|
{
|
||||||
MeshComponentData *sm_data;
|
MeshComponentData *sm_data;
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
COMPONENT_CLASS_BODY(Mesh)
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
MeshComponent(MeshComponentData *cd,MeshComponentManager *cm):RenderComponent(cd,cm){sm_data=cd;}
|
MeshComponent(MeshComponentData *cd,MeshComponentManager *cm):RenderComponent(cd,cm){sm_data=cd;}
|
||||||
|
|
||||||
virtual ~MeshComponent()=default;
|
virtual ~MeshComponent()=default;
|
||||||
|
|
||||||
static MeshComponentManager *GetDefaultManager()
|
|
||||||
{
|
|
||||||
return MeshComponentManager::GetDefaultManager();
|
|
||||||
}
|
|
||||||
|
|
||||||
static constexpr const size_t StaticHashCode()
|
|
||||||
{
|
|
||||||
return hgl::GetTypeHash<MeshComponent>();
|
|
||||||
}
|
|
||||||
|
|
||||||
const size_t GetHashCode()const override
|
|
||||||
{
|
|
||||||
return MeshComponent::StaticHashCode();
|
|
||||||
}
|
|
||||||
|
|
||||||
MeshComponentData &GetData() {return *sm_data;}
|
MeshComponentData &GetData() {return *sm_data;}
|
||||||
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
|
||||||
|
@ -4,22 +4,25 @@
|
|||||||
|
|
||||||
namespace hgl::graph
|
namespace hgl::graph
|
||||||
{
|
{
|
||||||
//SceneNode *Duplication(SceneNode *src_node)
|
SceneNode *Duplication(SceneNode *src_node)
|
||||||
//{
|
{
|
||||||
// if(!src_node)
|
if(!src_node)
|
||||||
// return nullptr;
|
return nullptr;
|
||||||
|
|
||||||
// SceneNode *node=new SceneNode(*(SceneOrient *)src_node);
|
SceneNode *node=new SceneNode(*(SceneOrient *)src_node);
|
||||||
|
|
||||||
// node->SetRenderable(src_node->GetRenderable());
|
for(SceneNode *sn:src_node->GetChildNode())
|
||||||
|
{
|
||||||
|
node->Add(Duplication(sn));
|
||||||
|
}
|
||||||
|
|
||||||
// for(SceneNode *sn:src_node->GetChildNode())
|
for(Component *c:src_node->GetComponents())
|
||||||
// {
|
{
|
||||||
// node->Add(Duplication(sn));
|
node->AttachComponent(c->Duplication());
|
||||||
// }
|
}
|
||||||
|
|
||||||
// return node;
|
return node;
|
||||||
//}
|
}
|
||||||
|
|
||||||
//void SceneNode::SetRenderable(Mesh *ri)
|
//void SceneNode::SetRenderable(Mesh *ri)
|
||||||
//{
|
//{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user