@@ -37,7 +37,7 @@ bool AimModifier3D::_set(const StringName &p_path, const Variant &p_value) {
3737 if (path.begins_with (" settings/" )) {
3838 int which = path.get_slicec (' /' , 1 ).to_int ();
3939 String what = path.get_slicec (' /' , 2 );
40- ERR_FAIL_INDEX_V (which, settings.size (), false );
40+ ERR_FAIL_INDEX_V (which, ( int ) settings.size (), false );
4141
4242 if (what == " forward_axis" ) {
4343 set_forward_axis (which, static_cast <BoneAxis>((int )p_value));
@@ -60,7 +60,7 @@ bool AimModifier3D::_get(const StringName &p_path, Variant &r_ret) const {
6060 if (path.begins_with (" settings/" )) {
6161 int which = path.get_slicec (' /' , 1 ).to_int ();
6262 String what = path.get_slicec (' /' , 2 );
63- ERR_FAIL_INDEX_V (which, settings.size (), false );
63+ ERR_FAIL_INDEX_V (which, ( int ) settings.size (), false );
6464
6565 if (what == " forward_axis" ) {
6666 r_ret = (int )get_forward_axis (which);
@@ -80,7 +80,7 @@ bool AimModifier3D::_get(const StringName &p_path, Variant &r_ret) const {
8080void AimModifier3D::_get_property_list (List<PropertyInfo> *p_list) const {
8181 BoneConstraint3D::get_property_list (p_list);
8282
83- for (int i = 0 ; i < settings.size (); i++) {
83+ for (uint32_t i = 0 ; i < settings.size (); i++) {
8484 String path = " settings/" + itos (i) + " /" ;
8585 int rotation_usage = is_using_euler (i) ? PROPERTY_USAGE_DEFAULT : PROPERTY_USAGE_NONE;
8686
@@ -93,7 +93,7 @@ void AimModifier3D::_get_property_list(List<PropertyInfo> *p_list) const {
9393
9494PackedStringArray AimModifier3D::get_configuration_warnings () const {
9595 PackedStringArray warnings = BoneConstraint3D::get_configuration_warnings ();
96- for (int i = 0 ; i < settings.size (); i++) {
96+ for (uint32_t i = 0 ; i < settings.size (); i++) {
9797 if (is_using_euler (i) && get_axis_from_bone_axis (get_forward_axis (i)) == get_primary_rotation_axis (i)) {
9898 warnings.push_back (vformat (RTR (" Forward axis and primary rotation axis must not be parallel in setting %s." ), itos (i)));
9999 }
@@ -103,57 +103,57 @@ PackedStringArray AimModifier3D::get_configuration_warnings() const {
103103}
104104
105105void AimModifier3D::_validate_setting (int p_index) {
106- settings. write [p_index] = memnew (AimModifier3DSetting);
106+ settings[p_index] = memnew (AimModifier3DSetting);
107107}
108108
109109void AimModifier3D::set_forward_axis (int p_index, BoneAxis p_axis) {
110- ERR_FAIL_INDEX (p_index, settings.size ());
110+ ERR_FAIL_INDEX (p_index, ( int ) settings.size ());
111111 AimModifier3DSetting *setting = static_cast <AimModifier3DSetting *>(settings[p_index]);
112112 setting->forward_axis = p_axis;
113113 update_configuration_warnings ();
114114}
115115
116116SkeletonModifier3D::BoneAxis AimModifier3D::get_forward_axis (int p_index) const {
117- ERR_FAIL_INDEX_V (p_index, settings.size (), BONE_AXIS_PLUS_Y);
117+ ERR_FAIL_INDEX_V (p_index, ( int ) settings.size (), BONE_AXIS_PLUS_Y);
118118 AimModifier3DSetting *setting = static_cast <AimModifier3DSetting *>(settings[p_index]);
119119 return setting->forward_axis ;
120120}
121121
122122void AimModifier3D::set_use_euler (int p_index, bool p_enabled) {
123- ERR_FAIL_INDEX (p_index, settings.size ());
123+ ERR_FAIL_INDEX (p_index, ( int ) settings.size ());
124124 AimModifier3DSetting *setting = static_cast <AimModifier3DSetting *>(settings[p_index]);
125125 setting->use_euler = p_enabled;
126126 notify_property_list_changed ();
127127 update_configuration_warnings ();
128128}
129129
130130bool AimModifier3D::is_using_euler (int p_index) const {
131- ERR_FAIL_INDEX_V (p_index, settings.size (), false );
131+ ERR_FAIL_INDEX_V (p_index, ( int ) settings.size (), false );
132132 AimModifier3DSetting *setting = static_cast <AimModifier3DSetting *>(settings[p_index]);
133133 return setting->use_euler ;
134134}
135135
136136void AimModifier3D::set_primary_rotation_axis (int p_index, Vector3::Axis p_axis) {
137- ERR_FAIL_INDEX (p_index, settings.size ());
137+ ERR_FAIL_INDEX (p_index, ( int ) settings.size ());
138138 AimModifier3DSetting *setting = static_cast <AimModifier3DSetting *>(settings[p_index]);
139139 setting->primary_rotation_axis = p_axis;
140140 update_configuration_warnings ();
141141}
142142
143143Vector3::Axis AimModifier3D::get_primary_rotation_axis (int p_index) const {
144- ERR_FAIL_INDEX_V (p_index, settings.size (), Vector3::AXIS_X);
144+ ERR_FAIL_INDEX_V (p_index, ( int ) settings.size (), Vector3::AXIS_X);
145145 AimModifier3DSetting *setting = static_cast <AimModifier3DSetting *>(settings[p_index]);
146146 return setting->primary_rotation_axis ;
147147}
148148
149149void AimModifier3D::set_use_secondary_rotation (int p_index, bool p_enabled) {
150- ERR_FAIL_INDEX (p_index, settings.size ());
150+ ERR_FAIL_INDEX (p_index, ( int ) settings.size ());
151151 AimModifier3DSetting *setting = static_cast <AimModifier3DSetting *>(settings[p_index]);
152152 setting->use_secondary_rotation = p_enabled;
153153}
154154
155155bool AimModifier3D::is_using_secondary_rotation (int p_index) const {
156- ERR_FAIL_INDEX_V (p_index, settings.size (), false );
156+ ERR_FAIL_INDEX_V (p_index, ( int ) settings.size (), false );
157157 AimModifier3DSetting *setting = static_cast <AimModifier3DSetting *>(settings[p_index]);
158158 return setting->use_secondary_rotation ;
159159}
@@ -171,16 +171,28 @@ void AimModifier3D::_bind_methods() {
171171 ADD_ARRAY_COUNT (" Settings" , " setting_count" , " set_setting_count" , " get_setting_count" , " settings/" );
172172}
173173
174- void AimModifier3D::_process_constraint (int p_index, Skeleton3D *p_skeleton, int p_apply_bone, int p_reference_bone, float p_amount) {
174+ void AimModifier3D::_process_constraint_by_bone (int p_index, Skeleton3D *p_skeleton, int p_apply_bone, int p_reference_bone, float p_amount) {
175175 if (p_apply_bone == p_reference_bone) {
176176 ERR_PRINT_ONCE_ED (vformat (" In setting %s, the reference bone must not be same with the apply bone." , itos (p_index)));
177177 return ;
178178 }
179+ Vector3 reference_origin = p_skeleton->get_bone_global_pose (p_reference_bone).origin ;
180+ _process_aim (p_index, p_skeleton, p_apply_bone, reference_origin, p_amount);
181+ }
179182
183+ void AimModifier3D::_process_constraint_by_node (int p_index, Skeleton3D *p_skeleton, int p_apply_bone, const NodePath &p_reference_node, float p_amount) {
184+ Node3D *nd = Object::cast_to<Node3D>(get_node_or_null (p_reference_node));
185+ if (!nd) {
186+ return ;
187+ }
188+ Vector3 reference_origin = nd->get_global_transform_interpolated ().origin - p_skeleton->get_global_transform_interpolated ().origin ;
189+ _process_aim (p_index, p_skeleton, p_apply_bone, reference_origin, p_amount);
190+ }
191+
192+ void AimModifier3D::_process_aim (int p_index, Skeleton3D *p_skeleton, int p_apply_bone, Vector3 p_target, float p_amount) {
180193 AimModifier3DSetting *setting = static_cast <AimModifier3DSetting *>(settings[p_index]);
181194
182195 // Prepare forward_vector and rest.
183- Vector3 reference_origin = p_skeleton->get_bone_global_pose (p_reference_bone).origin ;
184196 Transform3D src_bone_rest = p_skeleton->get_bone_rest (p_apply_bone);
185197 Transform3D bone_rest_space;
186198 int parent_bone = p_skeleton->get_bone_parent (p_apply_bone);
@@ -190,7 +202,7 @@ void AimModifier3D::_process_constraint(int p_index, Skeleton3D *p_skeleton, int
190202 bone_rest_space = p_skeleton->get_bone_global_pose (parent_bone);
191203 bone_rest_space.translate_local (src_bone_rest.origin );
192204 }
193- Vector3 forward_vector = bone_rest_space.basis .get_rotation_quaternion ().xform_inv (reference_origin - bone_rest_space.origin );
205+ Vector3 forward_vector = bone_rest_space.basis .get_rotation_quaternion ().xform_inv (p_target - bone_rest_space.origin );
194206 if (forward_vector.is_zero_approx ()) {
195207 return ;
196208 }
0 commit comments