Fix bone pose override not being reset when IK animation is stopped
Fixes #35409
This commit is contained in:
parent
91b0be18dc
commit
551c37167b
|
@ -329,6 +329,17 @@ void FabrikInverseKinematic::solve(Task *p_task, real_t blending_delta, bool ove
|
|||
}
|
||||
}
|
||||
|
||||
void FabrikInverseKinematic::reset(Task *p_task) {
|
||||
ChainItem *ci(&p_task->chain.chain_root);
|
||||
while (ci) {
|
||||
p_task->skeleton->set_bone_global_pose_override(ci->bone, Transform(), 0);
|
||||
if (!ci->children.empty())
|
||||
ci = &ci->children.write[0];
|
||||
else
|
||||
ci = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
void SkeletonIK::_validate_property(PropertyInfo &property) const {
|
||||
|
||||
if (property.name == "root_bone" || property.name == "tip_bone") {
|
||||
|
@ -531,6 +542,8 @@ void SkeletonIK::start(bool p_one_time) {
|
|||
|
||||
void SkeletonIK::stop() {
|
||||
set_process_internal(false);
|
||||
if (task)
|
||||
FabrikInverseKinematic::reset(task);
|
||||
}
|
||||
|
||||
Transform SkeletonIK::_get_target_transform() {
|
||||
|
|
|
@ -139,6 +139,7 @@ public:
|
|||
static void set_goal(Task *p_task, const Transform &p_goal);
|
||||
static void make_goal(Task *p_task, const Transform &p_inverse_transf, real_t blending_delta);
|
||||
static void solve(Task *p_task, real_t blending_delta, bool override_tip_basis, bool p_use_magnet, const Vector3 &p_magnet_position);
|
||||
static void reset(Task *p_task);
|
||||
};
|
||||
|
||||
class SkeletonIK : public Node {
|
||||
|
|
Loading…
Reference in New Issue