Skip to content

Commit 6e826b2

Browse files
committed
Merge pull request #101148 from TokageItLab/skelmod-generic
Move enum BoneAxis to SkeletonModifier from LookAtModifier
2 parents 3de10d5 + f1f152e commit 6e826b2

6 files changed

+117
-105
lines changed

doc/classes/LookAtModifier3D.xml

+1-19
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@
4747
<member name="ease_type" type="int" setter="set_ease_type" getter="get_ease_type" enum="Tween.EaseType" default="0">
4848
The ease type of the time-based interpolation. See also [enum Tween.EaseType].
4949
</member>
50-
<member name="forward_axis" type="int" setter="set_forward_axis" getter="get_forward_axis" enum="LookAtModifier3D.BoneAxis" default="4">
50+
<member name="forward_axis" type="int" setter="set_forward_axis" getter="get_forward_axis" enum="SkeletonModifier3D.BoneAxis" default="4">
5151
The forward axis of the bone. This [SkeletonModifier3D] modifies the bone so that this axis points toward the [member target_node].
5252
</member>
5353
<member name="origin_bone" type="int" setter="set_origin_bone" getter="get_origin_bone">
@@ -129,24 +129,6 @@
129129
</member>
130130
</members>
131131
<constants>
132-
<constant name="BONE_AXIS_PLUS_X" value="0" enum="BoneAxis">
133-
Enumerated value for the +X axis.
134-
</constant>
135-
<constant name="BONE_AXIS_MINUS_X" value="1" enum="BoneAxis">
136-
Enumerated value for the -X axis.
137-
</constant>
138-
<constant name="BONE_AXIS_PLUS_Y" value="2" enum="BoneAxis">
139-
Enumerated value for the +Y axis.
140-
</constant>
141-
<constant name="BONE_AXIS_MINUS_Y" value="3" enum="BoneAxis">
142-
Enumerated value for the -Y axis.
143-
</constant>
144-
<constant name="BONE_AXIS_PLUS_Z" value="4" enum="BoneAxis">
145-
Enumerated value for the +Z axis.
146-
</constant>
147-
<constant name="BONE_AXIS_MINUS_Z" value="5" enum="BoneAxis">
148-
Enumerated value for the -Z axis.
149-
</constant>
150132
<constant name="ORIGIN_FROM_SELF" value="0" enum="OriginFrom">
151133
The bone rest position of the bone specified in [member bone] is used as origin.
152134
</constant>

doc/classes/SkeletonModifier3D.xml

+21-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<?xml version="1.0" encoding="UTF-8" ?>
22
<class name="SkeletonModifier3D" inherits="Node3D" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../class.xsd">
33
<brief_description>
4-
A Node that may modify Skeleton3D's bone.
4+
A node that may modify Skeleton3D's bone.
55
</brief_description>
66
<description>
77
[SkeletonModifier3D] retrieves a target [Skeleton3D] by having a [Skeleton3D] parent.
@@ -43,4 +43,24 @@
4343
</description>
4444
</signal>
4545
</signals>
46+
<constants>
47+
<constant name="BONE_AXIS_PLUS_X" value="0" enum="BoneAxis">
48+
Enumerated value for the +X axis.
49+
</constant>
50+
<constant name="BONE_AXIS_MINUS_X" value="1" enum="BoneAxis">
51+
Enumerated value for the -X axis.
52+
</constant>
53+
<constant name="BONE_AXIS_PLUS_Y" value="2" enum="BoneAxis">
54+
Enumerated value for the +Y axis.
55+
</constant>
56+
<constant name="BONE_AXIS_MINUS_Y" value="3" enum="BoneAxis">
57+
Enumerated value for the -Y axis.
58+
</constant>
59+
<constant name="BONE_AXIS_PLUS_Z" value="4" enum="BoneAxis">
60+
Enumerated value for the +Z axis.
61+
</constant>
62+
<constant name="BONE_AXIS_MINUS_Z" value="5" enum="BoneAxis">
63+
Enumerated value for the -Z axis.
64+
</constant>
65+
</constants>
4666
</class>

scene/3d/look_at_modifier_3d.cpp

+7-70
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ void LookAtModifier3D::set_forward_axis(BoneAxis p_axis) {
109109
update_configuration_warnings();
110110
}
111111

112-
LookAtModifier3D::BoneAxis LookAtModifier3D::get_forward_axis() const {
112+
SkeletonModifier3D::BoneAxis LookAtModifier3D::get_forward_axis() const {
113113
return forward_axis;
114114
}
115115

@@ -482,13 +482,6 @@ void LookAtModifier3D::_bind_methods() {
482482
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "secondary_negative_limit_angle", PROPERTY_HINT_RANGE, "0,180,0.01,radians_as_degrees"), "set_secondary_negative_limit_angle", "get_secondary_negative_limit_angle");
483483
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "secondary_negative_damp_threshold", PROPERTY_HINT_RANGE, "0,1,0.01"), "set_secondary_negative_damp_threshold", "get_secondary_negative_damp_threshold");
484484

485-
BIND_ENUM_CONSTANT(BONE_AXIS_PLUS_X);
486-
BIND_ENUM_CONSTANT(BONE_AXIS_MINUS_X);
487-
BIND_ENUM_CONSTANT(BONE_AXIS_PLUS_Y);
488-
BIND_ENUM_CONSTANT(BONE_AXIS_MINUS_Y);
489-
BIND_ENUM_CONSTANT(BONE_AXIS_PLUS_Z);
490-
BIND_ENUM_CONSTANT(BONE_AXIS_MINUS_Z);
491-
492485
BIND_ENUM_CONSTANT(ORIGIN_FROM_SELF);
493486
BIND_ENUM_CONSTANT(ORIGIN_FROM_SPECIFIC_BONE);
494487
BIND_ENUM_CONSTANT(ORIGIN_FROM_EXTERNAL_NODE);
@@ -610,7 +603,7 @@ bool LookAtModifier3D::is_intersecting_axis(const Vector3 &p_prev, const Vector3
610603
return signbit(p_prev[p_flipping_axis]) != signbit(p_current[p_flipping_axis]);
611604
}
612605

613-
Vector3 LookAtModifier3D::get_basis_vector_from_bone_axis(const Basis &p_basis, LookAtModifier3D::BoneAxis p_axis) const {
606+
Vector3 LookAtModifier3D::get_basis_vector_from_bone_axis(const Basis &p_basis, BoneAxis p_axis) {
614607
Vector3 ret;
615608
switch (p_axis) {
616609
case BONE_AXIS_PLUS_X: {
@@ -635,67 +628,12 @@ Vector3 LookAtModifier3D::get_basis_vector_from_bone_axis(const Basis &p_basis,
635628
return ret;
636629
}
637630

638-
Vector3 LookAtModifier3D::get_vector_from_bone_axis(const LookAtModifier3D::BoneAxis &p_axis) const {
639-
Vector3 ret;
640-
switch (p_axis) {
641-
case BONE_AXIS_PLUS_X: {
642-
ret = Vector3(1, 0, 0);
643-
} break;
644-
case BONE_AXIS_MINUS_X: {
645-
ret = Vector3(-1, 0, 0);
646-
} break;
647-
case BONE_AXIS_PLUS_Y: {
648-
ret = Vector3(0, 1, 0);
649-
} break;
650-
case BONE_AXIS_MINUS_Y: {
651-
ret = Vector3(0, -1, 0);
652-
} break;
653-
case BONE_AXIS_PLUS_Z: {
654-
ret = Vector3(0, 0, 1);
655-
} break;
656-
case BONE_AXIS_MINUS_Z: {
657-
ret = Vector3(0, 0, -1);
658-
} break;
659-
}
660-
return ret;
661-
}
662-
663-
Vector3 LookAtModifier3D::get_vector_from_axis(const Vector3::Axis &p_axis) const {
664-
Vector3 ret;
665-
switch (p_axis) {
666-
case Vector3::AXIS_X: {
667-
ret = Vector3(1, 0, 0);
668-
} break;
669-
case Vector3::AXIS_Y: {
670-
ret = Vector3(0, 1, 0);
671-
} break;
672-
case Vector3::AXIS_Z: {
673-
ret = Vector3(0, 0, 1);
674-
} break;
675-
}
676-
return ret;
677-
}
678-
679-
Vector3::Axis LookAtModifier3D::get_axis_from_bone_axis(BoneAxis p_axis) const {
680-
Vector3::Axis ret = Vector3::AXIS_X;
681-
switch (p_axis) {
682-
case BONE_AXIS_PLUS_X:
683-
case BONE_AXIS_MINUS_X: {
684-
ret = Vector3::AXIS_X;
685-
} break;
686-
case BONE_AXIS_PLUS_Y:
687-
case BONE_AXIS_MINUS_Y: {
688-
ret = Vector3::AXIS_Y;
689-
} break;
690-
case BONE_AXIS_PLUS_Z:
691-
case BONE_AXIS_MINUS_Z: {
692-
ret = Vector3::AXIS_Z;
693-
} break;
694-
}
695-
return ret;
631+
Vector3::Axis LookAtModifier3D::get_secondary_rotation_axis(BoneAxis p_forward_axis, Vector3::Axis p_primary_rotation_axis) {
632+
Vector3 secondary_plane = get_vector_from_bone_axis(p_forward_axis) + get_vector_from_axis(p_primary_rotation_axis);
633+
return Math::is_zero_approx(secondary_plane.x) ? Vector3::AXIS_X : (Math::is_zero_approx(secondary_plane.y) ? Vector3::AXIS_Y : Vector3::AXIS_Z);
696634
}
697635

698-
Vector2 LookAtModifier3D::get_projection_vector(const Vector3 &p_vector, Vector3::Axis p_axis) const {
636+
Vector2 LookAtModifier3D::get_projection_vector(const Vector3 &p_vector, Vector3::Axis p_axis) {
699637
// NOTE: axis is swapped between 2D and 3D.
700638
Vector2 ret;
701639
switch (p_axis) {
@@ -789,8 +727,7 @@ Transform3D LookAtModifier3D::look_at_with_axes(const Transform3D &p_rest) {
789727
}
790728

791729
// Needs for detecting flipping even if use_secondary_rotation is false.
792-
Vector3 secondary_plane = get_vector_from_bone_axis(forward_axis) + get_vector_from_axis(primary_rotation_axis);
793-
secondary_rotation_axis = Math::is_zero_approx(secondary_plane.x) ? Vector3::AXIS_X : (Math::is_zero_approx(secondary_plane.y) ? Vector3::AXIS_Y : Vector3::AXIS_Z);
730+
secondary_rotation_axis = get_secondary_rotation_axis(forward_axis, primary_rotation_axis);
794731

795732
if (!use_secondary_rotation) {
796733
return current_result;

scene/3d/look_at_modifier_3d.h

+4-15
Original file line numberDiff line numberDiff line change
@@ -38,15 +38,6 @@ class LookAtModifier3D : public SkeletonModifier3D {
3838
GDCLASS(LookAtModifier3D, SkeletonModifier3D);
3939

4040
public:
41-
enum BoneAxis {
42-
BONE_AXIS_PLUS_X,
43-
BONE_AXIS_MINUS_X,
44-
BONE_AXIS_PLUS_Y,
45-
BONE_AXIS_MINUS_Y,
46-
BONE_AXIS_PLUS_Z,
47-
BONE_AXIS_MINUS_Z,
48-
};
49-
5041
enum OriginFrom {
5142
ORIGIN_FROM_SELF,
5243
ORIGIN_FROM_SPECIFIC_BONE,
@@ -104,11 +95,6 @@ class LookAtModifier3D : public SkeletonModifier3D {
10495
float remaining = 0;
10596
float time_step = 1.0;
10697

107-
Vector3 get_basis_vector_from_bone_axis(const Basis &p_basis, BoneAxis p_axis) const;
108-
Vector3 get_vector_from_bone_axis(const BoneAxis &p_axis) const;
109-
Vector3 get_vector_from_axis(const Vector3::Axis &p_axis) const;
110-
Vector3::Axis get_axis_from_bone_axis(BoneAxis p_axis) const;
111-
Vector2 get_projection_vector(const Vector3 &p_vector, Vector3::Axis p_axis) const;
11298
float remap_damped(float p_from, float p_to, float p_damp_threshold, float p_value) const;
11399
double get_bspline_y(const Vector2 &p_from, const Vector2 &p_control, const Vector2 &p_to, double p_x) const;
114100
bool is_intersecting_axis(const Vector3 &p_prev, const Vector3 &p_current, Vector3::Axis p_flipping_axis, Vector3::Axis p_check_axis, bool p_check_plane = false) const;
@@ -197,9 +183,12 @@ class LookAtModifier3D : public SkeletonModifier3D {
197183
float get_interpolation_remaining() const;
198184
bool is_interpolating() const;
199185
bool is_target_within_limitation() const;
186+
187+
static Vector3::Axis get_secondary_rotation_axis(BoneAxis p_forward_axis, Vector3::Axis p_primary_rotation_axis);
188+
static Vector3 get_basis_vector_from_bone_axis(const Basis &p_basis, BoneAxis p_axis);
189+
static Vector2 get_projection_vector(const Vector3 &p_vector, Vector3::Axis p_axis);
200190
};
201191

202-
VARIANT_ENUM_CAST(LookAtModifier3D::BoneAxis);
203192
VARIANT_ENUM_CAST(LookAtModifier3D::OriginFrom);
204193

205194
#endif // LOOK_AT_MODIFIER_3D_H

scene/3d/skeleton_modifier_3d.cpp

+67
Original file line numberDiff line numberDiff line change
@@ -152,6 +152,73 @@ void SkeletonModifier3D::_bind_methods() {
152152

153153
ADD_SIGNAL(MethodInfo("modification_processed"));
154154
GDVIRTUAL_BIND(_process_modification);
155+
156+
BIND_ENUM_CONSTANT(BONE_AXIS_PLUS_X);
157+
BIND_ENUM_CONSTANT(BONE_AXIS_MINUS_X);
158+
BIND_ENUM_CONSTANT(BONE_AXIS_PLUS_Y);
159+
BIND_ENUM_CONSTANT(BONE_AXIS_MINUS_Y);
160+
BIND_ENUM_CONSTANT(BONE_AXIS_PLUS_Z);
161+
BIND_ENUM_CONSTANT(BONE_AXIS_MINUS_Z);
162+
}
163+
164+
Vector3 SkeletonModifier3D::get_vector_from_bone_axis(BoneAxis p_axis) {
165+
Vector3 ret;
166+
switch (p_axis) {
167+
case BONE_AXIS_PLUS_X: {
168+
ret = Vector3(1, 0, 0);
169+
} break;
170+
case BONE_AXIS_MINUS_X: {
171+
ret = Vector3(-1, 0, 0);
172+
} break;
173+
case BONE_AXIS_PLUS_Y: {
174+
ret = Vector3(0, 1, 0);
175+
} break;
176+
case BONE_AXIS_MINUS_Y: {
177+
ret = Vector3(0, -1, 0);
178+
} break;
179+
case BONE_AXIS_PLUS_Z: {
180+
ret = Vector3(0, 0, 1);
181+
} break;
182+
case BONE_AXIS_MINUS_Z: {
183+
ret = Vector3(0, 0, -1);
184+
} break;
185+
}
186+
return ret;
187+
}
188+
189+
Vector3 SkeletonModifier3D::get_vector_from_axis(Vector3::Axis p_axis) {
190+
Vector3 ret;
191+
switch (p_axis) {
192+
case Vector3::AXIS_X: {
193+
ret = Vector3(1, 0, 0);
194+
} break;
195+
case Vector3::AXIS_Y: {
196+
ret = Vector3(0, 1, 0);
197+
} break;
198+
case Vector3::AXIS_Z: {
199+
ret = Vector3(0, 0, 1);
200+
} break;
201+
}
202+
return ret;
203+
}
204+
205+
Vector3::Axis SkeletonModifier3D::get_axis_from_bone_axis(BoneAxis p_axis) {
206+
Vector3::Axis ret = Vector3::AXIS_X;
207+
switch (p_axis) {
208+
case BONE_AXIS_PLUS_X:
209+
case BONE_AXIS_MINUS_X: {
210+
ret = Vector3::AXIS_X;
211+
} break;
212+
case BONE_AXIS_PLUS_Y:
213+
case BONE_AXIS_MINUS_Y: {
214+
ret = Vector3::AXIS_Y;
215+
} break;
216+
case BONE_AXIS_PLUS_Z:
217+
case BONE_AXIS_MINUS_Z: {
218+
ret = Vector3::AXIS_Z;
219+
} break;
220+
}
221+
return ret;
155222
}
156223

157224
SkeletonModifier3D::SkeletonModifier3D() {

scene/3d/skeleton_modifier_3d.h

+17
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,16 @@ class SkeletonModifier3D : public Node3D {
4040

4141
void rebind();
4242

43+
public:
44+
enum BoneAxis {
45+
BONE_AXIS_PLUS_X,
46+
BONE_AXIS_MINUS_X,
47+
BONE_AXIS_PLUS_Y,
48+
BONE_AXIS_MINUS_Y,
49+
BONE_AXIS_PLUS_Z,
50+
BONE_AXIS_MINUS_Z,
51+
};
52+
4353
protected:
4454
bool active = true;
4555
real_t influence = 1.0;
@@ -76,7 +86,14 @@ class SkeletonModifier3D : public Node3D {
7686

7787
void process_modification();
7888

89+
// Utility APIs.
90+
static Vector3 get_vector_from_bone_axis(BoneAxis p_axis);
91+
static Vector3 get_vector_from_axis(Vector3::Axis p_axis);
92+
static Vector3::Axis get_axis_from_bone_axis(BoneAxis p_axis);
93+
7994
SkeletonModifier3D();
8095
};
8196

97+
VARIANT_ENUM_CAST(SkeletonModifier3D::BoneAxis);
98+
8299
#endif // SKELETON_MODIFIER_3D_H

0 commit comments

Comments
 (0)