diff --git a/game/addons/bone_editor/BoneEditor.gd b/game/addons/bone_editor/BoneEditor.gd index 0bebc38d..f9f36160 100644 --- a/game/addons/bone_editor/BoneEditor.gd +++ b/game/addons/bone_editor/BoneEditor.gd @@ -236,10 +236,21 @@ func get_add_bone(): func is_done_editor(): return true +func evaluate_rest_pose(n : Spatial): + if !n: + return + + n.set_as_rest_pose() + + for ch in n.get_children(): + evaluate_rest_pose(ch as Spatial) + func set_set_pose_as_rest(val): if val: - for n in bone_handle_nodes: - n.set_as_rest_pose() + for ch in get_children(): + evaluate_rest_pose(ch as Spatial) + #for n in bone_handle_nodes: + # n.set_as_rest_pose() for n in bone_handle_nodes: n._ready() diff --git a/game/addons/bone_editor/BoneHandle.gd b/game/addons/bone_editor/BoneHandle.gd index 897b01a4..d30c18fe 100644 --- a/game/addons/bone_editor/BoneHandle.gd +++ b/game/addons/bone_editor/BoneHandle.gd @@ -37,9 +37,19 @@ func set_pose( basis:Basis, origin:Vector3 ): # printt( self.bone_name, basis, origin ) func set_as_rest_pose(): - original_rest = self.pose - self.skeleton.set_bone_rest(self.bone_id, original_rest) + self.skeleton.set_bone_rest(self.bone_id, transform) self.skeleton.set_bone_pose( self.bone_id, Transform( )) + transform = Transform() + + self.original_rest = self.skeleton.get_bone_rest( self.bone_id ) + + var parent_bone_id:int = self.skeleton.get_bone_parent( self.bone_id ) + if parent_bone_id != -1: + self.original_parent_rest = self.skeleton.get_bone_global_pose( parent_bone_id ) + + self.transform.basis = Basis( ) + self.transform.origin = self.original_parent_rest.basis.xform( self.original_rest.origin ) + self.original_global_rest_origin = self.transform.origin func _process( delta:float ):