Feat/14 movement overhaul #20

Merged
Dotts merged 86 commits from feat/14-movement-overhaul into main 2026-07-17 10:44:23 -07:00
Showing only changes of commit 252137d10b - Show all commits
+9 -3
View File
@@ -153,6 +153,7 @@ func _create_and_play_anim(ap: AnimationPlayer, anim_name: String, anim: Animati
if lib.has_animation(anim_name): if lib.has_animation(anim_name):
lib.remove_animation(anim_name) lib.remove_animation(anim_name)
lib.add_animation(anim_name, anim) lib.add_animation(anim_name, anim)
print("SkinnedPlayerModel: replaced '%s' with %d tracks" % [anim_name, anim.get_track_count()])
func _create_walk_anim() -> Animation: func _create_walk_anim() -> Animation:
var anim = Animation.new() var anim = Animation.new()
@@ -251,13 +252,18 @@ func _create_idle_anim() -> Animation:
return anim return anim
func _add_rot_track(anim: Animation, bone_name: String, keyframes: Array) -> void: func _add_rot_track(anim: Animation, bone_name: String, keyframes: Array) -> void:
var track = anim.add_track(Animation.TYPE_ROTATION_3D) # TYPE_ROTATION_3D = 2 var track = anim.add_track(Animation.TYPE_ROTATION_3D)
if track < 0:
print("SkinnedPlayerModel: ERROR failed to add rotation track for " + bone_name)
return
anim.track_set_path(track, "MikuRig/Skeleton3D:" + bone_name) anim.track_set_path(track, "MikuRig/Skeleton3D:" + bone_name)
anim.track_set_interpolation_type(track, Animation.INTERPOLATION_LINEAR) anim.track_set_interpolation_type(track, Animation.INTERPOLATION_LINEAR)
for kf in keyframes: for kf in keyframes:
# Rotation tracks require Quaternion values
var quat = Quaternion.from_euler(kf["rot"]) var quat = Quaternion.from_euler(kf["rot"])
anim.track_insert_key(track, kf["t"], quat) var err = anim.track_insert_key(track, kf["t"], quat)
if err != OK:
print("SkinnedPlayerModel: ERROR inserting key for " + bone_name + " t=" + str(kf["t"]))
print("SkinnedPlayerModel: rotation track '%s' has %d keys" % [bone_name, anim.track_get_key_count(track)])
func _is_animation_broken(ap: AnimationPlayer, anim_name: String) -> bool: func _is_animation_broken(ap: AnimationPlayer, anim_name: String) -> bool:
## Returns true if the animation has near-zero motion (Blender GLTF track stripping). ## Returns true if the animation has near-zero motion (Blender GLTF track stripping).