summaryrefslogtreecommitdiff
path: root/scene
diff options
context:
space:
mode:
authorAaron Franke <arnfranke@yahoo.com>2021-08-29 14:49:13 -0500
committerGitHub <noreply@github.com>2021-08-29 14:49:13 -0500
commitf27fa5139d05e3b85707b0e0eafd160adca423ff (patch)
treed419ed8886352e30e16e3467a0d004de59c20dae /scene
parent4d08a737fb868b4c2f47946aea7c9ec4ee97894d (diff)
parentee7bb9bbb9ebf5f4bb6d046340807e2982879428 (diff)
Merge pull request #47635 from aaronfranke/node2d3d-transform
Display a matrix for Node2D and don't display a duplicate origin
Diffstat (limited to 'scene')
-rw-r--r--scene/2d/node_2d.cpp4
-rw-r--r--scene/3d/node_3d.cpp29
-rw-r--r--scene/3d/node_3d.h2
3 files changed, 31 insertions, 4 deletions
diff --git a/scene/2d/node_2d.cpp b/scene/2d/node_2d.cpp
index 6a8788ee6e..6567598e7a 100644
--- a/scene/2d/node_2d.cpp
+++ b/scene/2d/node_2d.cpp
@@ -421,11 +421,13 @@ void Node2D::_bind_methods() {
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "rotation", PROPERTY_HINT_RANGE, "-360,360,0.1,or_lesser,or_greater,radians"), "set_rotation", "get_rotation");
ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "scale"), "set_scale", "get_scale");
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "skew", PROPERTY_HINT_RANGE, "-89.9,89.9,0.1,radians"), "set_skew", "get_skew");
- ADD_PROPERTY(PropertyInfo(Variant::TRANSFORM2D, "transform", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NONE), "set_transform", "get_transform");
ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "global_position", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NONE), "set_global_position", "get_global_position");
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "global_rotation", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NONE), "set_global_rotation", "get_global_rotation");
ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "global_scale", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NONE), "set_global_scale", "get_global_scale");
+
+ ADD_GROUP("Raw Matrix", "");
+ ADD_PROPERTY(PropertyInfo(Variant::TRANSFORM2D, "transform", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_EDITOR), "set_transform", "get_transform");
ADD_PROPERTY(PropertyInfo(Variant::TRANSFORM2D, "global_transform", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NONE), "set_global_transform", "get_global_transform");
ADD_GROUP("Ordering", "");
diff --git a/scene/3d/node_3d.cpp b/scene/3d/node_3d.cpp
index 12470939f5..c4abecfc82 100644
--- a/scene/3d/node_3d.cpp
+++ b/scene/3d/node_3d.cpp
@@ -220,6 +220,15 @@ void Node3D::_notification(int p_what) {
}
}
+void Node3D::set_basis(const Basis &p_basis) {
+ data.local_transform = Transform3D(p_basis, data.local_transform.origin);
+ data.dirty |= DIRTY_VECTORS;
+ _propagate_transform_changed(this);
+ if (data.notify_local_transform) {
+ notification(NOTIFICATION_LOCAL_TRANSFORM_CHANGED);
+ }
+}
+
void Node3D::set_transform(const Transform3D &p_transform) {
data.local_transform = p_transform;
data.dirty |= DIRTY_VECTORS;
@@ -238,6 +247,14 @@ void Node3D::set_global_transform(const Transform3D &p_transform) {
set_transform(xform);
}
+Basis Node3D::get_basis() const {
+ if (data.dirty & DIRTY_LOCAL) {
+ _update_local_transform();
+ }
+
+ return data.local_transform.basis;
+}
+
Transform3D Node3D::get_transform() const {
if (data.dirty & DIRTY_LOCAL) {
_update_local_transform();
@@ -765,7 +782,9 @@ NodePath Node3D::get_visibility_parent() const {
}
void Node3D::_bind_methods() {
- ClassDB::bind_method(D_METHOD("set_transform", "local"), &Node3D::set_transform);
+ ClassDB::bind_method(D_METHOD("set_basis", "basis"), &Node3D::set_basis);
+ ClassDB::bind_method(D_METHOD("get_basis"), &Node3D::get_basis);
+ ClassDB::bind_method(D_METHOD("set_transform", "transform"), &Node3D::set_transform);
ClassDB::bind_method(D_METHOD("get_transform"), &Node3D::get_transform);
ClassDB::bind_method(D_METHOD("set_position", "position"), &Node3D::set_position);
ClassDB::bind_method(D_METHOD("get_position"), &Node3D::get_position);
@@ -838,8 +857,12 @@ void Node3D::_bind_methods() {
ADD_PROPERTY(PropertyInfo(Variant::VECTOR3, "rotation", PROPERTY_HINT_RANGE, "-360,360,0.1,or_lesser,or_greater,radians", PROPERTY_USAGE_EDITOR), "set_rotation", "get_rotation");
ADD_PROPERTY(PropertyInfo(Variant::VECTOR3, "scale", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_EDITOR), "set_scale", "get_scale");
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "top_level"), "set_as_top_level", "is_set_as_top_level");
- ADD_GROUP("Matrix", "");
- ADD_PROPERTY(PropertyInfo(Variant::TRANSFORM3D, "transform", PROPERTY_HINT_NONE, ""), "set_transform", "get_transform");
+
+ ADD_GROUP("Raw Matrix", "");
+ // No need to display the full Transform, we already have the translation above.
+ ADD_PROPERTY(PropertyInfo(Variant::TRANSFORM3D, "transform", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_STORAGE), "set_transform", "get_transform");
+ ADD_PROPERTY(PropertyInfo(Variant::BASIS, "basis", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_EDITOR), "set_basis", "get_basis");
+
ADD_GROUP("Visibility", "");
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "visible"), "set_visible", "is_visible");
ADD_PROPERTY(PropertyInfo(Variant::NODE_PATH, "visibility_parent", PROPERTY_HINT_NODE_PATH_VALID_TYPES, "GeometryInstance3D"), "set_visibility_parent", "get_visibility_parent");
diff --git a/scene/3d/node_3d.h b/scene/3d/node_3d.h
index 0fd0c4e205..3d9a7ab075 100644
--- a/scene/3d/node_3d.h
+++ b/scene/3d/node_3d.h
@@ -136,9 +136,11 @@ public:
Vector3 get_rotation() const;
Vector3 get_scale() const;
+ void set_basis(const Basis &p_basis);
void set_transform(const Transform3D &p_transform);
void set_global_transform(const Transform3D &p_transform);
+ Basis get_basis() const;
Transform3D get_transform() const;
Transform3D get_global_transform() const;