From 3c9ae1a391542c65a6dab37551ce5923a3dd81c8 Mon Sep 17 00:00:00 2001 From: Relintai Date: Fri, 25 Feb 2022 13:54:14 +0100 Subject: [PATCH] Updated the serialization logic in all of the PropDataEntries. --- props/prop_2d_data_light.cpp | 7 ++++++- props/prop_2d_data_portal.cpp | 23 ++++++++++++++++------- props/prop_2d_data_prop.cpp | 23 +++++++++++++++++------ props/prop_2d_data_scene.cpp | 24 ++++++++++++++++++------ props/prop_2d_data_tiled_wall_2d.cpp | 21 ++++++++++++++++----- 5 files changed, 73 insertions(+), 25 deletions(-) diff --git a/props/prop_2d_data_light.cpp b/props/prop_2d_data_light.cpp index 532624c..ed5460c 100644 --- a/props/prop_2d_data_light.cpp +++ b/props/prop_2d_data_light.cpp @@ -80,7 +80,12 @@ void Prop2DDataLight::_processor_process(Ref prop_data, Node *node, ERR_FAIL_COND(!i); Ref l; - l.instance(); + + if (entry.is_valid()) { + l = entry; + } else { + l.instance(); + } l->set_light_color(i->get_color()); diff --git a/props/prop_2d_data_portal.cpp b/props/prop_2d_data_portal.cpp index 111e12c..8d14f90 100644 --- a/props/prop_2d_data_portal.cpp +++ b/props/prop_2d_data_portal.cpp @@ -73,19 +73,30 @@ void Prop2DDataPortal::_processor_process(Ref prop_data, Node *node, ERR_FAIL_COND(!p); Ref l; - l.instance(); + + if (entry.is_valid()) { + l = entry; + } else { + l.instance(); + } + l->set_is_active(p->get_portal_active()); l->set_is_two_way(p->is_two_way()); l->set_use_default_margin(p->get_use_default_margin()); l->set_portal_margin(p->get_portal_margin()); l->set_points(p->get_points()); - //l->set_transform(transform * p->get_transform()); - prop_data->add_prop(l); + Prop2DDataEntry::_processor_process(prop_data, node, transform, l); } Node *Prop2DDataPortal::_processor_get_node_for(const Transform2D &transform, Node *node) { - Portal *p = memnew(Portal); + Portal *p = nullptr; + + if (!node) { + p = memnew(Portal); + } else { + p = Object::cast_to(node); + } p->set_portal_active(get_is_active()); p->set_two_way(get_is_two_way()); @@ -93,9 +104,7 @@ Node *Prop2DDataPortal::_processor_get_node_for(const Transform2D &transform, No p->set_portal_margin(get_portal_margin()); p->set_points(get_points()); - //p->set_transform(get_transform()); - - return p; + return Prop2DDataEntry::_processor_get_node_for(transform, p); } Prop2DDataPortal::Prop2DDataPortal() { diff --git a/props/prop_2d_data_prop.cpp b/props/prop_2d_data_prop.cpp index aa21c13..8108e95 100644 --- a/props/prop_2d_data_prop.cpp +++ b/props/prop_2d_data_prop.cpp @@ -52,19 +52,30 @@ void Prop2DDataProp2D::_processor_process(Ref prop_data, Node *node, ERR_FAIL_COND(!i); Ref l; - l.instance(); + + if (entry.is_valid()) { + l = entry; + } else { + l.instance(); + } + l->set_prop(i->get_prop_data()); - //l->set_transform(transform * i->get_transform()); - prop_data->add_prop(l); + + Prop2DDataEntry::_processor_process(prop_data, node, transform, l); } Node *Prop2DDataProp2D::_processor_get_node_for(const Transform2D &transform, Node *node) { - Prop2DInstance *i = memnew(Prop2DInstance); + Prop2DInstance *i = nullptr; + + if (!node) { + i = memnew(Prop2DInstance); + } else { + i = Object::cast_to(node); + } i->set_prop_data(get_prop()); - //i->set_transform(get_transform()); - return i; + return Prop2DDataEntry::_processor_get_node_for(transform, i); } Prop2DDataProp2D::Prop2DDataProp2D() { diff --git a/props/prop_2d_data_scene.cpp b/props/prop_2d_data_scene.cpp index 0293d5d..d6a89ab 100644 --- a/props/prop_2d_data_scene.cpp +++ b/props/prop_2d_data_scene.cpp @@ -44,19 +44,31 @@ void Prop2DDataScene::_processor_process(Ref prop_data, Node *node, ERR_FAIL_COND(!i); Ref l; - l.instance(); + + if (entry.is_valid()) { + l = entry; + } else { + l.instance(); + } + l->set_scene(i->get_scene()); - //l->set_transform(transform * i->get_transform()); - prop_data->add_prop(l); + + Prop2DDataEntry::_processor_process(prop_data, node, transform, l); } Node *Prop2DDataScene::_processor_get_node_for(const Transform2D &transform, Node *node) { - Prop2DSceneInstance *i = memnew(Prop2DSceneInstance); + Prop2DSceneInstance *i = nullptr; + + if (!node) { + i = memnew(Prop2DSceneInstance); + } else { + i = Object::cast_to(node); + } + i->set_scene(get_scene()); - //i->set_transform(get_transform()); - return i; + return Prop2DDataEntry::_processor_get_node_for(transform, i); } Prop2DDataScene::Prop2DDataScene() { diff --git a/props/prop_2d_data_tiled_wall_2d.cpp b/props/prop_2d_data_tiled_wall_2d.cpp index 439f4ca..23ef346 100644 --- a/props/prop_2d_data_tiled_wall_2d.cpp +++ b/props/prop_2d_data_tiled_wall_2d.cpp @@ -67,18 +67,29 @@ void Prop2DDataTiledWall2D::_processor_process(Ref prop_data, Node * ERR_FAIL_COND(!t); Ref tw; - tw.instance(); + + if (entry.is_valid()) { + tw = entry; + } else { + tw.instance(); + } tw->set_width(t->get_width()); tw->set_heigth(t->get_heigth()); tw->set_data(t->get_data()); //tw->set_collision(t->get_collision()); - //tw->set_transform(transform * t->get_transform()); - prop_data->add_prop(tw); + + Prop2DDataEntry::_processor_process(prop_data, node, transform, tw); } Node *Prop2DDataTiledWall2D::_processor_get_node_for(const Transform2D &transform, Node *node) { - TiledWall2D *t = memnew(TiledWall2D); + TiledWall2D *t; + + if (node) { + t = Object::cast_to(node); + } else { + t = memnew(TiledWall2D()); + } t->set_width(get_width()); t->set_heigth(get_heigth()); @@ -86,7 +97,7 @@ Node *Prop2DDataTiledWall2D::_processor_get_node_for(const Transform2D &transfor t->set_data(get_data()); //t->set_transform(get_transform()); - return t; + return Prop2DDataEntry::_processor_get_node_for(transform, t); } Prop2DDataTiledWall2D::Prop2DDataTiledWall2D() {