diff options
-rw-r--r-- | core/object/object.h | 2 | ||||
-rw-r--r-- | doc/classes/@GlobalScope.xml | 2 | ||||
-rw-r--r-- | editor/editor_properties.cpp | 2 | ||||
-rw-r--r-- | modules/gdscript/gdscript_editor.cpp | 2 | ||||
-rw-r--r-- | scene/2d/node_2d.cpp | 2 | ||||
-rw-r--r-- | scene/3d/node_3d.cpp | 70 | ||||
-rw-r--r-- | scene/3d/node_3d.h | 1 |
7 files changed, 26 insertions, 55 deletions
diff --git a/core/object/object.h b/core/object/object.h index fe9231cfd8..2a9f2ebf93 100644 --- a/core/object/object.h +++ b/core/object/object.h @@ -47,7 +47,7 @@ enum PropertyHint { PROPERTY_HINT_NONE, ///< no hint provided. - PROPERTY_HINT_RANGE, ///< hint_text = "min,max[,step][,or_greater][,or_lesser][,noslider][,radians][,degrees][,exp][,suffix:<keyword>] range. + PROPERTY_HINT_RANGE, ///< hint_text = "min,max[,step][,or_greater][,or_lesser][,no_slider][,radians][,degrees][,exp][,suffix:<keyword>] range. PROPERTY_HINT_ENUM, ///< hint_text= "val1,val2,val3,etc" PROPERTY_HINT_ENUM_SUGGESTION, ///< hint_text= "val1,val2,val3,etc" PROPERTY_HINT_EXP_EASING, /// exponential easing function (Math::ease) use "attenuation" hint string to revert (flip h), "full" to also include in/out. (ie: "attenuation,inout") diff --git a/doc/classes/@GlobalScope.xml b/doc/classes/@GlobalScope.xml index 4048b483e8..475d166925 100644 --- a/doc/classes/@GlobalScope.xml +++ b/doc/classes/@GlobalScope.xml @@ -2460,7 +2460,7 @@ </constant> <constant name="PROPERTY_HINT_RANGE" value="1" enum="PropertyHint"> Hints that an integer or float property should be within a range specified via the hint string [code]"min,max"[/code] or [code]"min,max,step"[/code]. The hint string can optionally include [code]"or_greater"[/code] and/or [code]"or_lesser"[/code] to allow manual input going respectively above the max or below the min values. Example: [code]"-360,360,1,or_greater,or_lesser"[/code]. - Additionally, other keywords can be included: "exp" for exponential range editing, "radians" for editing radian angles in degrees, "degrees" to hint at an angle and "noslider" to hide the slider. + Additionally, other keywords can be included: "exp" for exponential range editing, "radians" for editing radian angles in degrees, "degrees" to hint at an angle and "no_slider" to hide the slider. </constant> <constant name="PROPERTY_HINT_ENUM" value="2" enum="PropertyHint"> Hints that an integer, float or string property is an enumerated value to pick in a list specified via a hint string. diff --git a/editor/editor_properties.cpp b/editor/editor_properties.cpp index 61b434a240..2562c740aa 100644 --- a/editor/editor_properties.cpp +++ b/editor/editor_properties.cpp @@ -3601,7 +3601,7 @@ static EditorPropertyRangeHint _parse_range_hint(PropertyHint p_hint, const Stri hint.greater = true; } else if (slice == "or_lesser") { hint.lesser = true; - } else if (slice == "noslider") { + } else if (slice == "no_slider") { hint.hide_slider = true; } else if (slice == "exp") { hint.exp_range = true; diff --git a/modules/gdscript/gdscript_editor.cpp b/modules/gdscript/gdscript_editor.cpp index 5345143271..474c8094f2 100644 --- a/modules/gdscript/gdscript_editor.cpp +++ b/modules/gdscript/gdscript_editor.cpp @@ -746,7 +746,7 @@ static void _find_annotation_arguments(const GDScriptParser::AnnotationNode *p_a ScriptLanguage::CodeCompletionOption slider2("or_lesser", ScriptLanguage::CODE_COMPLETION_KIND_PLAIN_TEXT); slider2.insert_text = slider2.display.quote(p_quote_style); r_result.insert(slider2.display, slider2); - ScriptLanguage::CodeCompletionOption slider3("noslider", ScriptLanguage::CODE_COMPLETION_KIND_PLAIN_TEXT); + ScriptLanguage::CodeCompletionOption slider3("no_slider", ScriptLanguage::CODE_COMPLETION_KIND_PLAIN_TEXT); slider3.insert_text = slider3.display.quote(p_quote_style); r_result.insert(slider3.display, slider3); } diff --git a/scene/2d/node_2d.cpp b/scene/2d/node_2d.cpp index b2b848d380..4599785ce4 100644 --- a/scene/2d/node_2d.cpp +++ b/scene/2d/node_2d.cpp @@ -437,7 +437,7 @@ void Node2D::_bind_methods() { ClassDB::bind_method(D_METHOD("get_relative_transform_to_parent", "parent"), &Node2D::get_relative_transform_to_parent); ADD_GROUP("Transform", ""); - ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "position", PROPERTY_HINT_RANGE, "-99999,99999,0.001,or_lesser,or_greater,noslider,suffix:px"), "set_position", "get_position"); + ADD_PROPERTY(PropertyInfo(Variant::VECTOR2, "position", PROPERTY_HINT_RANGE, "-99999,99999,0.001,or_lesser,or_greater,no_slider,suffix:px"), "set_position", "get_position"); 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", PROPERTY_HINT_LINK), "set_scale", "get_scale"); ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "skew", PROPERTY_HINT_RANGE, "-89.9,89.9,0.1,radians"), "set_skew", "get_skew"); diff --git a/scene/3d/node_3d.cpp b/scene/3d/node_3d.cpp index f836fd4a06..60858b00b1 100644 --- a/scene/3d/node_3d.cpp +++ b/scene/3d/node_3d.cpp @@ -85,13 +85,10 @@ void Node3D::_notify_dirty() { } void Node3D::_update_local_transform() const { - if (this->get_rotation_edit_mode() == ROTATION_EDIT_MODE_EULER) { - data.local_transform.basis.set_euler(data.rotation, data.rotation_order); - data.local_transform.basis.scale_local(data.scale); - } else if (this->get_rotation_edit_mode() == ROTATION_EDIT_MODE_QUATERNION) { - data.local_transform.basis = Basis(data.quaternion); - data.local_transform.basis.scale_local(data.scale); + if (this->get_rotation_edit_mode() != ROTATION_EDIT_MODE_BASIS) { + data.local_transform = data.local_transform.orthogonalized(); } + data.local_transform.basis.set_euler_scale(data.rotation, data.scale); data.dirty &= ~DIRTY_LOCAL; } @@ -215,18 +212,7 @@ void Node3D::set_basis(const Basis &p_basis) { set_transform(Transform3D(p_basis, data.local_transform.origin)); } void Node3D::set_quaternion(const Quaternion &p_quaternion) { - if (data.dirty & DIRTY_VECTORS) { - data.rotation = get_transform().basis.get_euler_normalized(data.rotation_order); - data.scale = get_transform().basis.get_scale(); - data.dirty &= ~DIRTY_VECTORS; - } - - data.quaternion = p_quaternion; - data.dirty |= DIRTY_LOCAL; - _propagate_transform_changed(this); - if (data.notify_local_transform) { - notification(NOTIFICATION_LOCAL_TRANSFORM_CHANGED); - } + set_transform(Transform3D(Basis(p_quaternion), data.local_transform.origin)); } void Node3D::set_transform(const Transform3D &p_transform) { @@ -242,14 +228,7 @@ Basis Node3D::get_basis() const { return get_transform().basis; } Quaternion Node3D::get_quaternion() const { - if (data.dirty & DIRTY_VECTORS) { - data.quaternion = get_transform().basis.get_rotation_quaternion(); - data.rotation = get_transform().basis.get_euler_normalized(data.rotation_order); - data.scale = get_transform().basis.get_scale(); - data.dirty &= ~DIRTY_VECTORS; - } - - return data.quaternion; + return Quaternion(get_transform().basis); } void Node3D::set_global_transform(const Transform3D &p_transform) { @@ -276,9 +255,9 @@ Transform3D Node3D::get_global_transform() const { } if (data.parent && !data.top_level_active) { - data.global_transform = data.parent->get_global_transform() * get_transform(); + data.global_transform = data.parent->get_global_transform() * data.local_transform; } else { - data.global_transform = get_transform(); + data.global_transform = data.local_transform; } if (data.disable_scale) { @@ -335,13 +314,9 @@ void Node3D::set_rotation_edit_mode(RotationEditMode p_mode) { if (data.rotation_edit_mode == p_mode) { return; } - - data.quaternion = get_transform().basis.get_rotation_quaternion(); - data.rotation = get_transform().basis.get_euler_normalized(data.rotation_order); - data.scale = get_transform().basis.get_scale(); data.rotation_edit_mode = p_mode; - // Shearing is not allowed except in ROTATION_EDIT_MODE_BASIS, so validate local_transform. + // Shearing is not allowed except in ROTATION_EDIT_MODE_BASIS. data.dirty |= DIRTY_LOCAL; _propagate_transform_changed(this); if (data.notify_local_transform) { @@ -365,9 +340,8 @@ void Node3D::set_rotation_order(RotationOrder p_order) { ERR_FAIL_INDEX(int32_t(order), 6); if (data.dirty & DIRTY_VECTORS) { - data.quaternion = get_transform().basis.get_rotation_quaternion(); - data.rotation = get_transform().basis.get_euler_normalized(order); - data.scale = get_transform().basis.get_scale(); + data.rotation = data.local_transform.basis.get_euler_normalized(order); + data.scale = data.local_transform.basis.get_scale(); data.dirty &= ~DIRTY_VECTORS; } else { data.rotation = Basis::from_euler(data.rotation, data.rotation_order).get_euler_normalized(order); @@ -385,8 +359,7 @@ Node3D::RotationOrder Node3D::get_rotation_order() const { void Node3D::set_rotation(const Vector3 &p_euler_rad) { if (data.dirty & DIRTY_VECTORS) { - data.quaternion = get_transform().basis.get_rotation_quaternion(); - data.scale = get_transform().basis.get_scale(); + data.scale = data.local_transform.basis.get_scale(); data.dirty &= ~DIRTY_VECTORS; } @@ -400,8 +373,7 @@ void Node3D::set_rotation(const Vector3 &p_euler_rad) { void Node3D::set_scale(const Vector3 &p_scale) { if (data.dirty & DIRTY_VECTORS) { - data.quaternion = get_transform().basis.get_rotation_quaternion(); - data.rotation = get_transform().basis.get_euler_normalized(data.rotation_order); + data.rotation = data.local_transform.basis.get_euler_normalized(data.rotation_order); data.dirty &= ~DIRTY_VECTORS; } @@ -414,14 +386,14 @@ void Node3D::set_scale(const Vector3 &p_scale) { } Vector3 Node3D::get_position() const { - return get_transform().origin; + return data.local_transform.origin; } Vector3 Node3D::get_rotation() const { if (data.dirty & DIRTY_VECTORS) { - data.quaternion = get_transform().basis.get_rotation_quaternion(); - data.rotation = get_transform().basis.get_euler_normalized(data.rotation_order); - data.scale = get_transform().basis.get_scale(); + data.scale = data.local_transform.basis.get_scale(); + data.rotation = data.local_transform.basis.get_euler_normalized(data.rotation_order); + data.dirty &= ~DIRTY_VECTORS; } @@ -430,9 +402,9 @@ Vector3 Node3D::get_rotation() const { Vector3 Node3D::get_scale() const { if (data.dirty & DIRTY_VECTORS) { - data.quaternion = get_transform().basis.get_rotation_quaternion(); - data.rotation = get_transform().basis.get_euler_normalized(data.rotation_order); - data.scale = get_transform().basis.get_scale(); + data.scale = data.local_transform.basis.get_scale(); + data.rotation = data.local_transform.basis.get_euler_normalized(data.rotation_order); + data.dirty &= ~DIRTY_VECTORS; } @@ -893,7 +865,7 @@ Variant Node3D::property_get_revert(const String &p_name) { } else if (p_name == "quaternion") { Variant variant = PropertyUtils::get_property_default_value(this, "transform", &valid); if (valid && variant.get_type() == Variant::Type::TRANSFORM3D) { - r_ret = Transform3D(variant).get_basis().get_rotation_quaternion(); + r_ret = Quaternion(Transform3D(variant).get_basis()); } else { return Quaternion(); } @@ -1008,7 +980,7 @@ void Node3D::_bind_methods() { ADD_GROUP("Transform", ""); ADD_PROPERTY(PropertyInfo(Variant::TRANSFORM3D, "transform", PROPERTY_HINT_NONE, "suffix:m", PROPERTY_USAGE_NO_EDITOR), "set_transform", "get_transform"); ADD_PROPERTY(PropertyInfo(Variant::TRANSFORM3D, "global_transform", PROPERTY_HINT_NONE, "suffix:m", PROPERTY_USAGE_NONE), "set_global_transform", "get_global_transform"); - ADD_PROPERTY(PropertyInfo(Variant::VECTOR3, "position", PROPERTY_HINT_RANGE, "-99999,99999,0.001,or_greater,or_lesser,noslider,suffix:m", PROPERTY_USAGE_EDITOR), "set_position", "get_position"); + ADD_PROPERTY(PropertyInfo(Variant::VECTOR3, "position", PROPERTY_HINT_RANGE, "-99999,99999,0.001,or_greater,or_lesser,no_slider,suffix:m", PROPERTY_USAGE_EDITOR), "set_position", "get_position"); 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::QUATERNION, "quaternion", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_EDITOR), "set_quaternion", "get_quaternion"); ADD_PROPERTY(PropertyInfo(Variant::BASIS, "basis", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_EDITOR), "set_basis", "get_basis"); diff --git a/scene/3d/node_3d.h b/scene/3d/node_3d.h index 3d561e8620..6d857a83ea 100644 --- a/scene/3d/node_3d.h +++ b/scene/3d/node_3d.h @@ -81,7 +81,6 @@ private: mutable Transform3D global_transform; mutable Transform3D local_transform; mutable Basis::EulerOrder rotation_order = Basis::EULER_ORDER_YXZ; - mutable Quaternion quaternion; mutable Vector3 rotation; mutable Vector3 scale = Vector3(1, 1, 1); mutable RotationEditMode rotation_edit_mode = ROTATION_EDIT_MODE_EULER; |