mirror of
https://github.com/Relintai/props_2d.git
synced 2025-02-04 16:15:57 +01:00
Improved the prop serialization api. And added Node2D and CanvasItem serialization to DataEntry.
This commit is contained in:
parent
ce69529ceb
commit
4b876aad7b
@ -26,32 +26,88 @@ SOFTWARE.
|
||||
|
||||
#include "core/version.h"
|
||||
|
||||
#if VERSION_MAJOR < 4
|
||||
#include "scene/3d/spatial.h"
|
||||
#else
|
||||
#include "scene/3d/node_3d.h"
|
||||
#define Spatial Node3D
|
||||
#endif
|
||||
#include "scene/2d/node_2d.h"
|
||||
|
||||
#if TEXTURE_PACKER_PRESENT
|
||||
#include "../../texture_packer/texture_packer.h"
|
||||
#endif
|
||||
|
||||
|
||||
#include "../prop_2d_mesher.h"
|
||||
|
||||
Transform Prop2DDataEntry::get_transform() const {
|
||||
return _transform;
|
||||
return Transform();
|
||||
}
|
||||
void Prop2DDataEntry::set_transform(const Transform &value) {
|
||||
_transform = value;
|
||||
}
|
||||
|
||||
Transform2D Prop2DDataEntry::get_transform_2d() const {
|
||||
return _transform_2d;
|
||||
return _transform;
|
||||
}
|
||||
void Prop2DDataEntry::set_transform_2d(const Transform2D &value) {
|
||||
_transform_2d = value;
|
||||
_transform = value;
|
||||
}
|
||||
|
||||
int Prop2DDataEntry::get_z_index() const {
|
||||
return _z_index;
|
||||
}
|
||||
void Prop2DDataEntry::set_z_index(const int value) {
|
||||
_z_index = value;
|
||||
}
|
||||
|
||||
bool Prop2DDataEntry::get_z_as_relative() const {
|
||||
return _z_as_relative;
|
||||
}
|
||||
void Prop2DDataEntry::set_z_as_relative(const bool value) {
|
||||
_z_as_relative = value;
|
||||
}
|
||||
|
||||
bool Prop2DDataEntry::get_visible() const {
|
||||
return _visible;
|
||||
}
|
||||
void Prop2DDataEntry::set_visible(const bool value) {
|
||||
_visible = value;
|
||||
}
|
||||
|
||||
Color Prop2DDataEntry::get_modulate() const {
|
||||
return _modulate;
|
||||
}
|
||||
void Prop2DDataEntry::set_modulate(const Color &value) {
|
||||
_modulate = value;
|
||||
}
|
||||
|
||||
Color Prop2DDataEntry::get_self_modulate() const {
|
||||
return _self_modulate;
|
||||
}
|
||||
void Prop2DDataEntry::set_self_modulate(const Color &value) {
|
||||
_self_modulate = value;
|
||||
}
|
||||
|
||||
bool Prop2DDataEntry::get_show_behind_parent() const {
|
||||
return _show_behind_parent;
|
||||
}
|
||||
void Prop2DDataEntry::set_show_behind_parent(const bool value) {
|
||||
_show_behind_parent = value;
|
||||
}
|
||||
|
||||
int Prop2DDataEntry::get_light_mask() const {
|
||||
return _light_mask;
|
||||
}
|
||||
void Prop2DDataEntry::set_light_mask(const int value) {
|
||||
_light_mask = value;
|
||||
}
|
||||
|
||||
Ref<Material> Prop2DDataEntry::get_material() const {
|
||||
return _material;
|
||||
}
|
||||
void Prop2DDataEntry::set_material(const Ref<Material> &value) {
|
||||
_material = value;
|
||||
}
|
||||
|
||||
bool Prop2DDataEntry::get_use_parent_material() const {
|
||||
return _use_parent_material;
|
||||
}
|
||||
void Prop2DDataEntry::set_use_parent_material(const bool value) {
|
||||
_use_parent_material = value;
|
||||
}
|
||||
|
||||
#if TEXTURE_PACKER_PRESENT
|
||||
@ -77,16 +133,72 @@ bool Prop2DDataEntry::processor_evaluate_children() {
|
||||
bool Prop2DDataEntry::_processor_handles(Node *node) {
|
||||
return false;
|
||||
}
|
||||
void Prop2DDataEntry::_processor_process(Ref<Prop2DData> prop_data, Node *node, const Transform2D &transform) {
|
||||
void Prop2DDataEntry::_processor_process(Ref<Prop2DData> prop_data, Node *node, const Transform2D &transform, Ref<Prop2DDataEntry> entry) {
|
||||
Node2D *n = Object::cast_to<Node2D>(node);
|
||||
|
||||
ERR_FAIL_COND(!n);
|
||||
|
||||
Ref<Prop2DDataEntry> e;
|
||||
|
||||
if (entry.is_valid()) {
|
||||
e = entry;
|
||||
} else {
|
||||
e.instance();
|
||||
}
|
||||
Node *Prop2DDataEntry::_processor_get_node_for(const Transform2D &transform) {
|
||||
return NULL;
|
||||
|
||||
e->set_transform_2d(transform * n->get_transform());
|
||||
e->set_z_index(n->get_z_index());
|
||||
e->set_z_as_relative(n->is_z_relative());
|
||||
e->set_visible(n->is_visible());
|
||||
e->set_modulate(n->get_modulate());
|
||||
e->set_self_modulate(n->get_self_modulate());
|
||||
e->set_show_behind_parent(n->is_draw_behind_parent_enabled());
|
||||
e->set_light_mask(n->get_light_mask());
|
||||
e->set_material(n->get_material());
|
||||
e->set_use_parent_material(n->get_use_parent_material());
|
||||
|
||||
prop_data->add_prop(e);
|
||||
}
|
||||
Node *Prop2DDataEntry::_processor_get_node_for(const Transform2D &transform, Node *node) {
|
||||
Node2D *n;
|
||||
|
||||
if (node) {
|
||||
n = Object::cast_to<Node2D>(node);
|
||||
} else {
|
||||
n = memnew(Node2D());
|
||||
}
|
||||
|
||||
n->set_transform(transform * get_transform_2d());
|
||||
|
||||
n->set_z_index(get_z_index());
|
||||
n->set_z_as_relative(get_z_as_relative());
|
||||
n->set_visible(get_visible());
|
||||
n->set_modulate(get_modulate());
|
||||
n->set_self_modulate(get_self_modulate());
|
||||
n->set_draw_behind_parent(get_show_behind_parent());
|
||||
|
||||
n->set_light_mask(get_light_mask());
|
||||
n->set_material(get_material());
|
||||
n->set_use_parent_material(get_use_parent_material());
|
||||
|
||||
return n;
|
||||
}
|
||||
bool Prop2DDataEntry::_processor_evaluate_children() {
|
||||
return true;
|
||||
}
|
||||
|
||||
Prop2DDataEntry::Prop2DDataEntry() {
|
||||
_z_index = 0;
|
||||
_z_as_relative = true;
|
||||
|
||||
_visible = true;
|
||||
_modulate = Color(1, 1, 1, 1);
|
||||
_self_modulate = Color(1, 1, 1, 1);
|
||||
_show_behind_parent = false;
|
||||
|
||||
_light_mask = 1;
|
||||
|
||||
_use_parent_material = false;
|
||||
}
|
||||
Prop2DDataEntry::~Prop2DDataEntry() {
|
||||
}
|
||||
@ -100,6 +212,42 @@ void Prop2DDataEntry::_bind_methods() {
|
||||
ClassDB::bind_method(D_METHOD("set_transform_2d", "value"), &Prop2DDataEntry::set_transform_2d);
|
||||
ADD_PROPERTY(PropertyInfo(Variant::TRANSFORM2D, "transform_2d"), "set_transform_2d", "get_transform_2d");
|
||||
|
||||
ClassDB::bind_method(D_METHOD("get_z_index"), &Prop2DDataEntry::get_z_index);
|
||||
ClassDB::bind_method(D_METHOD("set_z_index", "value"), &Prop2DDataEntry::set_z_index);
|
||||
ADD_PROPERTY(PropertyInfo(Variant::INT, "z_index"), "set_z_index", "get_z_index");
|
||||
|
||||
ClassDB::bind_method(D_METHOD("get_z_as_relative"), &Prop2DDataEntry::get_z_as_relative);
|
||||
ClassDB::bind_method(D_METHOD("set_z_as_relative", "value"), &Prop2DDataEntry::set_z_as_relative);
|
||||
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "z_as_relative"), "set_z_as_relative", "get_z_as_relative");
|
||||
|
||||
ClassDB::bind_method(D_METHOD("get_visible"), &Prop2DDataEntry::get_visible);
|
||||
ClassDB::bind_method(D_METHOD("set_visible", "value"), &Prop2DDataEntry::set_visible);
|
||||
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "visible"), "set_visible", "get_visible");
|
||||
|
||||
ClassDB::bind_method(D_METHOD("get_modulate"), &Prop2DDataEntry::get_modulate);
|
||||
ClassDB::bind_method(D_METHOD("set_modulate", "value"), &Prop2DDataEntry::set_modulate);
|
||||
ADD_PROPERTY(PropertyInfo(Variant::COLOR, "modulate"), "set_modulate", "get_modulate");
|
||||
|
||||
ClassDB::bind_method(D_METHOD("get_self_modulate"), &Prop2DDataEntry::get_self_modulate);
|
||||
ClassDB::bind_method(D_METHOD("set_self_modulate", "value"), &Prop2DDataEntry::set_self_modulate);
|
||||
ADD_PROPERTY(PropertyInfo(Variant::COLOR, "self_modulate"), "set_self_modulate", "get_self_modulate");
|
||||
|
||||
ClassDB::bind_method(D_METHOD("get_show_behind_parent"), &Prop2DDataEntry::get_show_behind_parent);
|
||||
ClassDB::bind_method(D_METHOD("set_show_behind_parent", "value"), &Prop2DDataEntry::set_show_behind_parent);
|
||||
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "show_behind_parent"), "set_show_behind_parent", "get_show_behind_parent");
|
||||
|
||||
ClassDB::bind_method(D_METHOD("get_light_mask"), &Prop2DDataEntry::get_light_mask);
|
||||
ClassDB::bind_method(D_METHOD("set_light_mask", "value"), &Prop2DDataEntry::set_light_mask);
|
||||
ADD_PROPERTY(PropertyInfo(Variant::INT, "light_mask"), "set_light_mask", "get_light_mask");
|
||||
|
||||
ClassDB::bind_method(D_METHOD("get_material"), &Prop2DDataEntry::get_material);
|
||||
ClassDB::bind_method(D_METHOD("set_material", "value"), &Prop2DDataEntry::set_material);
|
||||
ADD_PROPERTY(PropertyInfo(Variant::INT, "material"), "set_material", "get_material");
|
||||
|
||||
ClassDB::bind_method(D_METHOD("get_use_parent_material"), &Prop2DDataEntry::get_use_parent_material);
|
||||
ClassDB::bind_method(D_METHOD("set_use_parent_material", "value"), &Prop2DDataEntry::set_use_parent_material);
|
||||
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "use_parent_material"), "set_use_parent_material", "get_use_parent_material");
|
||||
|
||||
#if TEXTURE_PACKER_PRESENT
|
||||
BIND_VMETHOD(MethodInfo("_add_textures_into", PropertyInfo(Variant::OBJECT, "texture_packer", PROPERTY_HINT_RESOURCE_TYPE, "TexturePacker")));
|
||||
|
||||
|
@ -38,6 +38,8 @@ SOFTWARE.
|
||||
#include "core/resource.h"
|
||||
#endif
|
||||
|
||||
#include "scene/resources/material.h"
|
||||
|
||||
class Prop2DData;
|
||||
class Prop2DMesher;
|
||||
class TexturePacker;
|
||||
@ -52,6 +54,33 @@ public:
|
||||
Transform2D get_transform_2d() const;
|
||||
void set_transform_2d(const Transform2D &value);
|
||||
|
||||
int get_z_index() const;
|
||||
void set_z_index(const int value);
|
||||
|
||||
bool get_z_as_relative() const;
|
||||
void set_z_as_relative(const bool value);
|
||||
|
||||
bool get_visible() const;
|
||||
void set_visible(const bool value);
|
||||
|
||||
Color get_modulate() const;
|
||||
void set_modulate(const Color &value);
|
||||
|
||||
Color get_self_modulate() const;
|
||||
void set_self_modulate(const Color &value);
|
||||
|
||||
bool get_show_behind_parent() const;
|
||||
void set_show_behind_parent(const bool value);
|
||||
|
||||
int get_light_mask() const;
|
||||
void set_light_mask(const int value);
|
||||
|
||||
Ref<Material> get_material() const;
|
||||
void set_material(const Ref<Material> &value);
|
||||
|
||||
bool get_use_parent_material() const;
|
||||
void set_use_parent_material(const bool value);
|
||||
|
||||
#if TEXTURE_PACKER_PRESENT
|
||||
void add_textures_into(Ref<TexturePacker> texture_packer);
|
||||
#endif
|
||||
@ -62,8 +91,8 @@ public:
|
||||
bool processor_evaluate_children();
|
||||
|
||||
virtual bool _processor_handles(Node *node);
|
||||
virtual void _processor_process(Ref<Prop2DData> prop_data, Node *node, const Transform2D &transform);
|
||||
virtual Node *_processor_get_node_for(const Transform2D &transform);
|
||||
virtual void _processor_process(Ref<Prop2DData> prop_data, Node *node, const Transform2D &transform, Ref<Prop2DDataEntry> entry = Ref<Prop2DDataEntry>());
|
||||
virtual Node *_processor_get_node_for(const Transform2D &transform, Node *node = nullptr);
|
||||
virtual bool _processor_evaluate_children();
|
||||
|
||||
Prop2DDataEntry();
|
||||
@ -73,8 +102,19 @@ protected:
|
||||
static void _bind_methods();
|
||||
|
||||
private:
|
||||
Transform _transform;
|
||||
Transform2D _transform_2d;
|
||||
Transform2D _transform;
|
||||
int _z_index;
|
||||
bool _z_as_relative;
|
||||
|
||||
bool _visible;
|
||||
Color _modulate;
|
||||
Color _self_modulate;
|
||||
bool _show_behind_parent;
|
||||
|
||||
int _light_mask;
|
||||
|
||||
Ref<Material> _material;
|
||||
bool _use_parent_material;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
@ -52,7 +52,7 @@ bool Prop2DDataLight::_processor_handles(Node *node) {
|
||||
return i;
|
||||
}
|
||||
|
||||
void Prop2DDataLight::_processor_process(Ref<Prop2DData> prop_data, Node *node, const Transform2D &transform) {
|
||||
void Prop2DDataLight::_processor_process(Ref<Prop2DData> prop_data, Node *node, const Transform2D &transform, Ref<Prop2DDataEntry> entry) {
|
||||
OmniLight *i = Object::cast_to<OmniLight>(node);
|
||||
|
||||
ERR_FAIL_COND(!i);
|
||||
@ -65,7 +65,7 @@ void Prop2DDataLight::_processor_process(Ref<Prop2DData> prop_data, Node *node,
|
||||
prop_data->add_prop(l);
|
||||
}
|
||||
|
||||
Node *Prop2DDataLight::_processor_get_node_for(const Transform2D &transform) {
|
||||
Node *Prop2DDataLight::_processor_get_node_for(const Transform2D &transform, Node *node) {
|
||||
OmniLight *i = memnew(OmniLight);
|
||||
|
||||
i->set_color(get_light_color());
|
||||
|
@ -44,8 +44,8 @@ public:
|
||||
void set_light_size(const int value);
|
||||
|
||||
bool _processor_handles(Node *node);
|
||||
void _processor_process(Ref<Prop2DData> prop_data, Node *node, const Transform2D &transform);
|
||||
Node *_processor_get_node_for(const Transform2D &transform);
|
||||
void _processor_process(Ref<Prop2DData> prop_data, Node *node, const Transform2D &transform, Ref<Prop2DDataEntry> entry = Ref<Prop2DDataEntry>());
|
||||
Node *_processor_get_node_for(const Transform2D &transform, Node *node = nullptr);
|
||||
|
||||
Prop2DDataLight();
|
||||
~Prop2DDataLight();
|
||||
|
@ -67,7 +67,7 @@ bool Prop2DDataPortal::_processor_handles(Node *node) {
|
||||
return p;
|
||||
}
|
||||
|
||||
void Prop2DDataPortal::_processor_process(Ref<Prop2DData> prop_data, Node *node, const Transform2D &transform) {
|
||||
void Prop2DDataPortal::_processor_process(Ref<Prop2DData> prop_data, Node *node, const Transform2D &transform, Ref<Prop2DDataEntry> entry) {
|
||||
Portal *p = Object::cast_to<Portal>(node);
|
||||
|
||||
ERR_FAIL_COND(!p);
|
||||
@ -84,7 +84,7 @@ void Prop2DDataPortal::_processor_process(Ref<Prop2DData> prop_data, Node *node,
|
||||
prop_data->add_prop(l);
|
||||
}
|
||||
|
||||
Node *Prop2DDataPortal::_processor_get_node_for(const Transform2D &transform) {
|
||||
Node *Prop2DDataPortal::_processor_get_node_for(const Transform2D &transform, Node *node) {
|
||||
Portal *p = memnew(Portal);
|
||||
|
||||
p->set_portal_active(get_is_active());
|
||||
|
@ -47,8 +47,8 @@ public:
|
||||
void set_points(const PoolVector<Vector2> &p_points);
|
||||
|
||||
bool _processor_handles(Node *node);
|
||||
void _processor_process(Ref<Prop2DData> prop_data, Node *node, const Transform2D &transform);
|
||||
Node *_processor_get_node_for(const Transform2D &transform);
|
||||
void _processor_process(Ref<Prop2DData> prop_data, Node *node, const Transform2D &transform, Ref<Prop2DDataEntry> entry = Ref<Prop2DDataEntry>());
|
||||
Node *_processor_get_node_for(const Transform2D &transform, Node *node = nullptr);
|
||||
|
||||
Prop2DDataPortal();
|
||||
~Prop2DDataPortal();
|
||||
|
@ -46,7 +46,7 @@ bool Prop2DDataProp2D::_processor_handles(Node *node) {
|
||||
return i;
|
||||
}
|
||||
|
||||
void Prop2DDataProp2D::_processor_process(Ref<Prop2DData> prop_data, Node *node, const Transform2D &transform) {
|
||||
void Prop2DDataProp2D::_processor_process(Ref<Prop2DData> prop_data, Node *node, const Transform2D &transform, Ref<Prop2DDataEntry> entry) {
|
||||
Prop2DInstance *i = Object::cast_to<Prop2DInstance>(node);
|
||||
|
||||
ERR_FAIL_COND(!i);
|
||||
@ -58,7 +58,7 @@ void Prop2DDataProp2D::_processor_process(Ref<Prop2DData> prop_data, Node *node,
|
||||
prop_data->add_prop(l);
|
||||
}
|
||||
|
||||
Node *Prop2DDataProp2D::_processor_get_node_for(const Transform2D &transform) {
|
||||
Node *Prop2DDataProp2D::_processor_get_node_for(const Transform2D &transform, Node *node) {
|
||||
Prop2DInstance *i = memnew(Prop2DInstance);
|
||||
|
||||
i->set_prop_data(get_prop());
|
||||
|
@ -45,8 +45,8 @@ public:
|
||||
#endif
|
||||
|
||||
bool _processor_handles(Node *node);
|
||||
void _processor_process(Ref<Prop2DData> prop_data, Node *node, const Transform2D &transform);
|
||||
Node *_processor_get_node_for(const Transform2D &transform);
|
||||
void _processor_process(Ref<Prop2DData> prop_data, Node *node, const Transform2D &transform, Ref<Prop2DDataEntry> entry = Ref<Prop2DDataEntry>());
|
||||
Node *_processor_get_node_for(const Transform2D &transform, Node *node = nullptr);
|
||||
|
||||
Prop2DDataProp2D();
|
||||
~Prop2DDataProp2D();
|
||||
|
@ -38,7 +38,7 @@ bool Prop2DDataScene::_processor_handles(Node *node) {
|
||||
return i;
|
||||
}
|
||||
|
||||
void Prop2DDataScene::_processor_process(Ref<Prop2DData> prop_data, Node *node, const Transform2D &transform) {
|
||||
void Prop2DDataScene::_processor_process(Ref<Prop2DData> prop_data, Node *node, const Transform2D &transform, Ref<Prop2DDataEntry> entry) {
|
||||
Prop2DSceneInstance *i = Object::cast_to<Prop2DSceneInstance>(node);
|
||||
|
||||
ERR_FAIL_COND(!i);
|
||||
@ -50,7 +50,7 @@ void Prop2DDataScene::_processor_process(Ref<Prop2DData> prop_data, Node *node,
|
||||
prop_data->add_prop(l);
|
||||
}
|
||||
|
||||
Node *Prop2DDataScene::_processor_get_node_for(const Transform2D &transform) {
|
||||
Node *Prop2DDataScene::_processor_get_node_for(const Transform2D &transform, Node *node) {
|
||||
Prop2DSceneInstance *i = memnew(Prop2DSceneInstance);
|
||||
|
||||
i->set_scene(get_scene());
|
||||
|
@ -36,8 +36,8 @@ public:
|
||||
void set_scene(const Ref<PackedScene> &value);
|
||||
|
||||
bool _processor_handles(Node *node);
|
||||
void _processor_process(Ref<Prop2DData> prop_data, Node *node, const Transform2D &transform);
|
||||
Node *_processor_get_node_for(const Transform2D &transform);
|
||||
void _processor_process(Ref<Prop2DData> prop_data, Node *node, const Transform2D &transform, Ref<Prop2DDataEntry> entry = Ref<Prop2DDataEntry>());
|
||||
Node *_processor_get_node_for(const Transform2D &transform, Node *node = nullptr);
|
||||
|
||||
Prop2DDataScene();
|
||||
~Prop2DDataScene();
|
||||
|
@ -61,7 +61,7 @@ bool Prop2DDataTiledWall2D::_processor_handles(Node *node) {
|
||||
return t;
|
||||
}
|
||||
|
||||
void Prop2DDataTiledWall2D::_processor_process(Ref<Prop2DData> prop_data, Node *node, const Transform2D &transform) {
|
||||
void Prop2DDataTiledWall2D::_processor_process(Ref<Prop2DData> prop_data, Node *node, const Transform2D &transform, Ref<Prop2DDataEntry> entry) {
|
||||
TiledWall2D *t = Object::cast_to<TiledWall2D>(node);
|
||||
|
||||
ERR_FAIL_COND(!t);
|
||||
@ -77,7 +77,7 @@ void Prop2DDataTiledWall2D::_processor_process(Ref<Prop2DData> prop_data, Node *
|
||||
prop_data->add_prop(tw);
|
||||
}
|
||||
|
||||
Node *Prop2DDataTiledWall2D::_processor_get_node_for(const Transform2D &transform) {
|
||||
Node *Prop2DDataTiledWall2D::_processor_get_node_for(const Transform2D &transform, Node *node) {
|
||||
TiledWall2D *t = memnew(TiledWall2D);
|
||||
|
||||
t->set_width(get_width());
|
||||
|
@ -45,8 +45,8 @@ public:
|
||||
void set_collision(const int value);
|
||||
|
||||
bool _processor_handles(Node *node);
|
||||
void _processor_process(Ref<Prop2DData> prop_data, Node *node, const Transform2D &transform);
|
||||
Node *_processor_get_node_for(const Transform2D &transform);
|
||||
void _processor_process(Ref<Prop2DData> prop_data, Node *node, const Transform2D &transform, Ref<Prop2DDataEntry> entry = Ref<Prop2DDataEntry>());
|
||||
Node *_processor_get_node_for(const Transform2D &transform, Node *node = nullptr);
|
||||
|
||||
Prop2DDataTiledWall2D();
|
||||
~Prop2DDataTiledWall2D();
|
||||
|
Loading…
Reference in New Issue
Block a user