Added the following features to RemoteTransform and RemoteTransform2D:
- Added the ability to toggle changes in position, rotation, and scale - Added the ability to toggle changes in either local or global coordinates
This commit is contained in:
parent
a2e4b80ff5
commit
3400c42c4d
|
@ -63,7 +63,50 @@ void RemoteTransform2D::_update_remote() {
|
|||
return;
|
||||
|
||||
//todo make faster
|
||||
n->set_global_transform(get_global_transform());
|
||||
if (use_global_coordinates) {
|
||||
|
||||
if (update_remote_position && update_remote_rotation && update_remote_scale) {
|
||||
n->set_global_transform(get_global_transform());
|
||||
} else {
|
||||
Transform2D n_trans = n->get_global_transform();
|
||||
Transform2D our_trans = get_global_transform();
|
||||
Vector2 n_scale = n->get_global_scale();
|
||||
|
||||
if (!update_remote_position)
|
||||
our_trans.set_origin(n_trans.get_origin());
|
||||
if (!update_remote_rotation)
|
||||
our_trans.set_rotation(n_trans.get_rotation());
|
||||
|
||||
n->set_global_transform(our_trans);
|
||||
|
||||
if (update_remote_scale)
|
||||
n->set_scale(get_global_scale());
|
||||
else
|
||||
n->set_scale(n_scale);
|
||||
}
|
||||
|
||||
} else {
|
||||
|
||||
if (update_remote_position && update_remote_rotation && update_remote_scale) {
|
||||
n->set_transform(get_transform());
|
||||
} else {
|
||||
Transform2D n_trans = n->get_transform();
|
||||
Transform2D our_trans = get_transform();
|
||||
Vector2 n_scale = n->get_scale();
|
||||
|
||||
if (!update_remote_position)
|
||||
our_trans.set_origin(n_trans.get_origin());
|
||||
if (!update_remote_rotation)
|
||||
our_trans.set_rotation(n_trans.get_rotation());
|
||||
|
||||
n->set_transform(our_trans);
|
||||
|
||||
if (update_remote_scale)
|
||||
n->set_scale(get_scale());
|
||||
else
|
||||
n->set_scale(n_scale);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void RemoteTransform2D::_notification(int p_what) {
|
||||
|
@ -102,6 +145,41 @@ NodePath RemoteTransform2D::get_remote_node() const {
|
|||
return remote_node;
|
||||
}
|
||||
|
||||
void RemoteTransform2D::set_use_global_coordinates(const bool p_enable) {
|
||||
use_global_coordinates = p_enable;
|
||||
}
|
||||
|
||||
bool RemoteTransform2D::get_use_global_coordinates() const {
|
||||
return use_global_coordinates;
|
||||
}
|
||||
|
||||
void RemoteTransform2D::set_update_position(const bool p_update) {
|
||||
update_remote_position = p_update;
|
||||
_update_remote();
|
||||
}
|
||||
|
||||
bool RemoteTransform2D::get_update_position() const {
|
||||
return update_remote_position;
|
||||
}
|
||||
|
||||
void RemoteTransform2D::set_update_rotation(const bool p_update) {
|
||||
update_remote_rotation = p_update;
|
||||
_update_remote();
|
||||
}
|
||||
|
||||
bool RemoteTransform2D::get_update_rotation() const {
|
||||
return update_remote_rotation;
|
||||
}
|
||||
|
||||
void RemoteTransform2D::set_update_scale(const bool p_update) {
|
||||
update_remote_scale = p_update;
|
||||
_update_remote();
|
||||
}
|
||||
|
||||
bool RemoteTransform2D::get_update_scale() const {
|
||||
return update_remote_scale;
|
||||
}
|
||||
|
||||
String RemoteTransform2D::get_configuration_warning() const {
|
||||
|
||||
if (!has_node(remote_node) || !get_node(remote_node) || !get_node(remote_node)->cast_to<Node2D>()) {
|
||||
|
@ -116,11 +194,32 @@ void RemoteTransform2D::_bind_methods() {
|
|||
ClassDB::bind_method(D_METHOD("set_remote_node", "path"), &RemoteTransform2D::set_remote_node);
|
||||
ClassDB::bind_method(D_METHOD("get_remote_node"), &RemoteTransform2D::get_remote_node);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("set_use_global_coordinates", "use_global_coordinates"), &RemoteTransform2D::set_use_global_coordinates);
|
||||
ClassDB::bind_method(D_METHOD("get_use_global_coordinates"), &RemoteTransform2D::get_use_global_coordinates);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("set_update_position", "update_remote_position"), &RemoteTransform2D::set_update_position);
|
||||
ClassDB::bind_method(D_METHOD("get_update_position"), &RemoteTransform2D::get_update_position);
|
||||
ClassDB::bind_method(D_METHOD("set_update_rotation", "update_remote_rotation"), &RemoteTransform2D::set_update_rotation);
|
||||
ClassDB::bind_method(D_METHOD("get_update_rotation"), &RemoteTransform2D::get_update_rotation);
|
||||
ClassDB::bind_method(D_METHOD("set_update_scale", "update_remote_scale"), &RemoteTransform2D::set_update_scale);
|
||||
ClassDB::bind_method(D_METHOD("get_update_scale"), &RemoteTransform2D::get_update_scale);
|
||||
|
||||
ADD_PROPERTY(PropertyInfo(Variant::NODE_PATH, "remote_path"), "set_remote_node", "get_remote_node");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "use_global_coordinates"), "set_use_global_coordinates", "get_use_global_coordinates");
|
||||
|
||||
ADD_GROUP("Update", "update_");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "update_position"), "set_update_position", "get_update_position");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "update_rotation"), "set_update_rotation", "get_update_rotation");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "update_scale"), "set_update_scale", "get_update_scale");
|
||||
}
|
||||
|
||||
RemoteTransform2D::RemoteTransform2D() {
|
||||
|
||||
use_global_coordinates = true;
|
||||
update_remote_position = true;
|
||||
update_remote_rotation = true;
|
||||
update_remote_scale = true;
|
||||
|
||||
cache = 0;
|
||||
set_notify_transform(true);
|
||||
}
|
||||
|
|
|
@ -37,6 +37,11 @@ class RemoteTransform2D : public Node2D {
|
|||
|
||||
ObjectID cache;
|
||||
|
||||
bool use_global_coordinates;
|
||||
bool update_remote_position;
|
||||
bool update_remote_rotation;
|
||||
bool update_remote_scale;
|
||||
|
||||
void _update_remote();
|
||||
void _update_cache();
|
||||
//void _node_exited_scene();
|
||||
|
@ -48,6 +53,18 @@ public:
|
|||
void set_remote_node(const NodePath &p_remote_node);
|
||||
NodePath get_remote_node() const;
|
||||
|
||||
void set_use_global_coordinates(const bool p_enable);
|
||||
bool get_use_global_coordinates() const;
|
||||
|
||||
void set_update_position(const bool p_update);
|
||||
bool get_update_position() const;
|
||||
|
||||
void set_update_rotation(const bool p_update);
|
||||
bool get_update_rotation() const;
|
||||
|
||||
void set_update_scale(const bool p_update);
|
||||
bool get_update_scale() const;
|
||||
|
||||
virtual String get_configuration_warning() const;
|
||||
|
||||
RemoteTransform2D();
|
||||
|
|
|
@ -63,7 +63,45 @@ void RemoteTransform::_update_remote() {
|
|||
return;
|
||||
|
||||
//todo make faster
|
||||
n->set_global_transform(get_global_transform());
|
||||
if (use_global_coordinates) {
|
||||
|
||||
if (update_remote_position && update_remote_rotation && update_remote_scale) {
|
||||
n->set_global_transform(get_global_transform());
|
||||
} else {
|
||||
Transform n_trans = n->get_global_transform();
|
||||
Transform our_trans = get_global_transform();
|
||||
|
||||
if (!update_remote_position)
|
||||
our_trans.set_origin(n_trans.get_origin());
|
||||
|
||||
n->set_global_transform(our_trans);
|
||||
|
||||
if (!update_remote_rotation)
|
||||
n->set_rotation(n_trans.basis.get_rotation());
|
||||
|
||||
if (!update_remote_scale)
|
||||
n->set_scale(n_trans.basis.get_scale());
|
||||
}
|
||||
|
||||
} else {
|
||||
if (update_remote_position && update_remote_rotation && update_remote_scale) {
|
||||
n->set_global_transform(get_global_transform());
|
||||
} else {
|
||||
Transform n_trans = n->get_transform();
|
||||
Transform our_trans = get_transform();
|
||||
|
||||
if (!update_remote_position)
|
||||
our_trans.set_origin(n_trans.get_origin());
|
||||
|
||||
n->set_transform(our_trans);
|
||||
|
||||
if (!update_remote_rotation)
|
||||
n->set_rotation(n_trans.basis.get_rotation());
|
||||
|
||||
if (!update_remote_scale)
|
||||
n->set_scale(n_trans.basis.get_scale());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void RemoteTransform::_notification(int p_what) {
|
||||
|
@ -102,6 +140,41 @@ NodePath RemoteTransform::get_remote_node() const {
|
|||
return remote_node;
|
||||
}
|
||||
|
||||
void RemoteTransform::set_use_global_coordinates(const bool p_enable) {
|
||||
use_global_coordinates = p_enable;
|
||||
}
|
||||
|
||||
bool RemoteTransform::get_use_global_coordinates() const {
|
||||
return use_global_coordinates;
|
||||
}
|
||||
|
||||
void RemoteTransform::set_update_position(const bool p_update) {
|
||||
update_remote_position = p_update;
|
||||
_update_remote();
|
||||
}
|
||||
|
||||
bool RemoteTransform::get_update_position() const {
|
||||
return update_remote_position;
|
||||
}
|
||||
|
||||
void RemoteTransform::set_update_rotation(const bool p_update) {
|
||||
update_remote_rotation = p_update;
|
||||
_update_remote();
|
||||
}
|
||||
|
||||
bool RemoteTransform::get_update_rotation() const {
|
||||
return update_remote_rotation;
|
||||
}
|
||||
|
||||
void RemoteTransform::set_update_scale(const bool p_update) {
|
||||
update_remote_scale = p_update;
|
||||
_update_remote();
|
||||
}
|
||||
|
||||
bool RemoteTransform::get_update_scale() const {
|
||||
return update_remote_scale;
|
||||
}
|
||||
|
||||
String RemoteTransform::get_configuration_warning() const {
|
||||
|
||||
if (!has_node(remote_node) || !get_node(remote_node) || !get_node(remote_node)->cast_to<Spatial>()) {
|
||||
|
@ -116,11 +189,32 @@ void RemoteTransform::_bind_methods() {
|
|||
ClassDB::bind_method(D_METHOD("set_remote_node", "path"), &RemoteTransform::set_remote_node);
|
||||
ClassDB::bind_method(D_METHOD("get_remote_node"), &RemoteTransform::get_remote_node);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("set_use_global_coordinates", "use_global_coordinates"), &RemoteTransform::set_use_global_coordinates);
|
||||
ClassDB::bind_method(D_METHOD("get_use_global_coordinates"), &RemoteTransform::get_use_global_coordinates);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("set_update_position", "update_remote_position"), &RemoteTransform::set_update_position);
|
||||
ClassDB::bind_method(D_METHOD("get_update_position"), &RemoteTransform::get_update_position);
|
||||
ClassDB::bind_method(D_METHOD("set_update_rotation", "update_remote_rotation"), &RemoteTransform::set_update_rotation);
|
||||
ClassDB::bind_method(D_METHOD("get_update_rotation"), &RemoteTransform::get_update_rotation);
|
||||
ClassDB::bind_method(D_METHOD("set_update_scale", "update_remote_scale"), &RemoteTransform::set_update_scale);
|
||||
ClassDB::bind_method(D_METHOD("get_update_scale"), &RemoteTransform::get_update_scale);
|
||||
|
||||
ADD_PROPERTY(PropertyInfo(Variant::NODE_PATH, "remote_path"), "set_remote_node", "get_remote_node");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "use_global_coordinates"), "set_use_global_coordinates", "get_use_global_coordinates");
|
||||
|
||||
ADD_GROUP("Update", "update_");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "update_position"), "set_update_position", "get_update_position");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "update_rotation"), "set_update_rotation", "get_update_rotation");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "update_scale"), "set_update_scale", "get_update_scale");
|
||||
}
|
||||
|
||||
RemoteTransform::RemoteTransform() {
|
||||
|
||||
use_global_coordinates = true;
|
||||
update_remote_position = true;
|
||||
update_remote_rotation = true;
|
||||
update_remote_scale = true;
|
||||
|
||||
cache = 0;
|
||||
set_notify_transform(true);
|
||||
}
|
||||
|
|
|
@ -39,6 +39,11 @@ class RemoteTransform : public Spatial {
|
|||
|
||||
ObjectID cache;
|
||||
|
||||
bool use_global_coordinates;
|
||||
bool update_remote_position;
|
||||
bool update_remote_rotation;
|
||||
bool update_remote_scale;
|
||||
|
||||
void _update_remote();
|
||||
void _update_cache();
|
||||
|
||||
|
@ -50,6 +55,18 @@ public:
|
|||
void set_remote_node(const NodePath &p_remote_node);
|
||||
NodePath get_remote_node() const;
|
||||
|
||||
void set_use_global_coordinates(const bool p_enable);
|
||||
bool get_use_global_coordinates() const;
|
||||
|
||||
void set_update_position(const bool p_update);
|
||||
bool get_update_position() const;
|
||||
|
||||
void set_update_rotation(const bool p_update);
|
||||
bool get_update_rotation() const;
|
||||
|
||||
void set_update_scale(const bool p_update);
|
||||
bool get_update_scale() const;
|
||||
|
||||
virtual String get_configuration_warning() const;
|
||||
|
||||
RemoteTransform();
|
||||
|
|
Loading…
Reference in New Issue