Refactor animation generation: replace create_walk.gd with create_animations.gd

- Removed the old create_walk.gd script, which generated walk animations.
- Introduced create_animations.gd to unify the generation of walk_left, walk_right, and stand_up animations.
- Added a new SpinBox for rest timeout configuration in physics_test_harness.gd.
- Enhanced StickmanRig to support automatic recovery from ragdoll state with configurable timeout.
- Implemented recovery logic in StickmanRig, allowing for smooth transitions from ragdoll to animated state.
- Updated animation generation logic to use new pose templates for standing and lying down positions.
This commit is contained in:
2026-08-27 12:01:54 -04:00
parent e3df1cc5c0
commit 0e971d99b1
12 changed files with 678 additions and 159 deletions
+108 -32
View File
@@ -61,7 +61,6 @@ constraint_angle_invert = true
constraint_in_localspace = true
[sub_resource type="SkeletonModificationStack2D" id="SkeletonModificationStack2D_j4hao"]
enabled = true
modification_count = 5
modifications/0 = SubResource("SkeletonModification2DTwoBoneIK_yvxej")
modifications/1 = SubResource("SkeletonModification2DTwoBoneIK_f0s26")
@@ -86,6 +85,93 @@ tracks/0/keys = {
[sub_resource type="Animation" id="Animation_ylko5"]
length = 0.8
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("IK_Targets/Torso:position")
tracks/0/interp = 2
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0, 0.8),
"transitions": PackedFloat32Array(1, 1),
"update": 0,
"values": [Vector2(0, 330), Vector2(0, 10)]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("IK_Targets/Head:position")
tracks/1/interp = 2
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0, 0.8),
"transitions": PackedFloat32Array(1, 1),
"update": 0,
"values": [Vector2(-60, 300), Vector2(100, -614)]
}
tracks/2/type = "value"
tracks/2/imported = false
tracks/2/enabled = true
tracks/2/path = NodePath("IK_Targets/Left_Hand:position")
tracks/2/interp = 2
tracks/2/loop_wrap = true
tracks/2/keys = {
"times": PackedFloat32Array(0, 0.8),
"transitions": PackedFloat32Array(1, 1),
"update": 0,
"values": [Vector2(100, 330), Vector2(90, 110)]
}
tracks/3/type = "value"
tracks/3/imported = false
tracks/3/enabled = true
tracks/3/path = NodePath("IK_Targets/Right_Hand:position")
tracks/3/interp = 2
tracks/3/loop_wrap = true
tracks/3/keys = {
"times": PackedFloat32Array(0, 0.8),
"transitions": PackedFloat32Array(1, 1),
"update": 0,
"values": [Vector2(-100, 330), Vector2(-90, 110)]
}
tracks/4/type = "value"
tracks/4/imported = false
tracks/4/enabled = true
tracks/4/path = NodePath("IK_Targets/Left_Leg:position")
tracks/4/interp = 2
tracks/4/loop_wrap = true
tracks/4/keys = {
"times": PackedFloat32Array(0, 0.8),
"transitions": PackedFloat32Array(1, 1),
"update": 0,
"values": [Vector2(90, 300), Vector2(-110, 380)]
}
tracks/5/type = "value"
tracks/5/imported = false
tracks/5/enabled = true
tracks/5/path = NodePath("IK_Targets/Right_Leg:position")
tracks/5/interp = 2
tracks/5/loop_wrap = true
tracks/5/keys = {
"times": PackedFloat32Array(0, 0.8),
"transitions": PackedFloat32Array(1, 1),
"update": 0,
"values": [Vector2(-90, 300), Vector2(110, 390)]
}
tracks/6/type = "value"
tracks/6/imported = false
tracks/6/enabled = true
tracks/6/path = NodePath("IK_Targets/Torso:rotation")
tracks/6/interp = 2
tracks/6/loop_wrap = true
tracks/6/keys = {
"times": PackedFloat32Array(0, 0.8),
"transitions": PackedFloat32Array(1, 1),
"update": 0,
"values": [-1.5707963267948966, 0.0]
}
[sub_resource type="Animation" id="Animation_t75yq"]
length = 0.8
loop_mode = 1
tracks/0/type = "value"
tracks/0/imported = false
@@ -172,7 +258,7 @@ tracks/6/keys = {
"values": [Vector2(-90, 110), Vector2(0, 115), Vector2(90, 110), Vector2(0, 115), Vector2(-90, 110)]
}
[sub_resource type="Animation" id="Animation_t75yq"]
[sub_resource type="Animation" id="Animation_m3sq4"]
length = 0.8
loop_mode = 1
tracks/0/type = "value"
@@ -263,8 +349,9 @@ tracks/6/keys = {
[sub_resource type="AnimationLibrary" id="AnimationLibrary_t75yq"]
_data = {
&"RESET": SubResource("Animation_2leu7"),
&"walk_left": SubResource("Animation_ylko5"),
&"walk_right": SubResource("Animation_t75yq")
&"stand_up": SubResource("Animation_ylko5"),
&"walk_left": SubResource("Animation_t75yq"),
&"walk_right": SubResource("Animation_m3sq4")
}
[sub_resource type="AnimationNodeStateMachine" id="AnimationNodeStateMachine_6rw38"]
@@ -282,69 +369,67 @@ width = 16.0
default_color = Color(0.445488, 0.445488, 0.445488, 1)
[node name="LeftUpperLeg" type="Line2D" parent="Body" unique_id=199373156]
position = Vector2(1.6037084e-05, 10.000003)
rotation = 0.55427897
position = Vector2(1.6098846e-05, 10.000002)
rotation = 0.4947604
points = PackedVector2Array(0, 0, 0, 200)
width = 16.0
default_color = Color(0.445488, 0.445488, 0.445488, 1)
[node name="RightUpperLeg" type="Line2D" parent="Body" unique_id=1396556308]
position = Vector2(-2.4553774e-05, 10.000021)
rotation = -0.43021643
position = Vector2(-2.3252098e-05, 10.000022)
rotation = -0.49392816
scale = Vector2(0.99999994, 0.99999994)
points = PackedVector2Array(0, 0, 0, 200)
width = 16.0
default_color = Color(0.445488, 0.445488, 0.445488, 1)
[node name="LeftLowerLeg" type="Line2D" parent="Body" unique_id=1590485904]
position = Vector2(-105.26607, 180.05603)
rotation = 0.023672067
position = Vector2(-94.96416, 186.0165)
rotation = 0.0051915743
scale = Vector2(0.99999994, 0.99999994)
points = PackedVector2Array(0, 0, 0, 200)
width = 16.0
default_color = Color(0.445488, 0.445488, 0.445488, 1)
[node name="RightLowerLeg" type="Line2D" parent="Body" unique_id=29203948]
position = Vector2(83.4135, 191.77509)
rotation = -0.13332568
scale = Vector2(0.9999997, 0.9999997)
position = Vector2(94.817635, 186.09546)
rotation = -0.0034907677
scale = Vector2(0.9999998, 0.9999998)
points = PackedVector2Array(0, 0, 0, 200)
width = 16.0
default_color = Color(0.445488, 0.445488, 0.445488, 1)
[node name="LeftUpperArm" type="Line2D" parent="Body" unique_id=744524157]
position = Vector2(9.313226e-10, -238)
rotation = -0.48905078
rotation = 1.6184965
points = PackedVector2Array(0, 0, 0, 175)
width = 16.0
default_color = Color(0.445488, 0.445488, 0.445488, 1)
[node name="RightUpperArm" type="Line2D" parent="Body" unique_id=1593646765]
position = Vector2(9.313226e-10, -238)
rotation = 0.48905125
scale = Vector2(0.99999994, 0.99999994)
rotation = -1.6184964
points = PackedVector2Array(0, 0, 0, 175)
width = 16.0
default_color = Color(0.445488, 0.445488, 0.445488, 1)
[node name="LeftLowerArm" type="Line2D" parent="Body" unique_id=2142117097]
position = Vector2(78.92438, -89.6931)
rotation = -0.055406693
position = Vector2(-167.80888, -246.01059)
rotation = 3.1406152
points = PackedVector2Array(0, 0, 0, 200)
width = 16.0
default_color = Color(0.445488, 0.445488, 0.445488, 1)
[node name="RightLowerArm" type="Line2D" parent="Body" unique_id=1200980480]
position = Vector2(-78.924484, -89.69313)
rotation = 0.055405635
position = Vector2(167.80891, -246.01057)
rotation = -3.1406155
points = PackedVector2Array(0, 0, 0, 200)
width = 16.0
default_color = Color(0.445488, 0.445488, 0.445488, 1)
[node name="Head" type="Node2D" parent="Body" unique_id=864822355]
position = Vector2(28.397173, -447.61597)
rotation = 0.4066687
scale = Vector2(0.9999997, 0.9999997)
position = Vector2(-0.07846909, -453.50793)
scale = Vector2(0.99999887, 0.99999887)
script = SubResource("GDScript_f0s26")
[node name="Skeleton2D" type="Skeleton2D" parent="." unique_id=1854735445]
@@ -363,7 +448,6 @@ rest = Transform2D(0.9998273, 0.0005539903, -0.0005539903, 0.9998273, -0.1288230
auto_calculate_length_and_angle = false
length = 90.0
bone_angle = -90.0
metadata/_local_pose_override_enabled_ = true
[node name="RayCast_Aim" type="RayCast2D" parent="Skeleton2D/Torso/Head" unique_id=2000000004]
position = Vector2(0, -90)
@@ -383,7 +467,6 @@ rest = Transform2D(0.9988364, 0.04768082, -0.04768082, 0.9988364, 0, -248)
auto_calculate_length_and_angle = false
length = 168.0
bone_angle = -180.0
metadata/_local_pose_override_enabled_ = true
[node name="LeftLowerArm" type="Bone2D" parent="Skeleton2D/Torso/LeftUpperArm" unique_id=721380545]
position = Vector2(-168, 0)
@@ -392,7 +475,6 @@ rest = Transform2D(0.9987903, -0.04865717, 0.04865717, 0.9987903, -168, 0)
auto_calculate_length_and_angle = false
length = 200.0
bone_angle = -90.0
metadata/_local_pose_override_enabled_ = true
[node name="RemoteTransform2D" type="RemoteTransform2D" parent="Skeleton2D/Torso/LeftUpperArm/LeftLowerArm" unique_id=1189277122]
position = Vector2(3.0517578e-05, 1.9073486e-06)
@@ -410,7 +492,6 @@ rest = Transform2D(0.9988364, -0.047680702, 0.047680702, 0.9988364, 0, -248)
auto_calculate_length_and_angle = false
length = 168.00006
bone_angle = 0.0
metadata/_local_pose_override_enabled_ = true
[node name="RightLowerArm" type="Bone2D" parent="Skeleton2D/Torso/RightUpperArm" unique_id=1018820563]
position = Vector2(168, 0)
@@ -419,7 +500,6 @@ rest = Transform2D(0.048656836, -0.9987903, 0.9987903, 0.048656836, 168, 0)
auto_calculate_length_and_angle = false
length = 200.0
bone_angle = 0.0
metadata/_local_pose_override_enabled_ = true
[node name="RemoteTransform2D" type="RemoteTransform2D" parent="Skeleton2D/Torso/RightUpperArm/RightLowerArm" unique_id=1282597655]
rotation = -1.5707964
@@ -436,7 +516,6 @@ rest = Transform2D(0.88005984, 0.47480857, -0.47480857, 0.88005984, -9.536743e-0
auto_calculate_length_and_angle = false
length = 200.0
bone_angle = 90.0
metadata/_local_pose_override_enabled_ = true
[node name="LeftLowerLeg" type="Bone2D" parent="Skeleton2D/Torso/LeftUpperLeg" unique_id=81288294]
position = Vector2(0, 200)
@@ -445,7 +524,6 @@ rest = Transform2D(0.4702357, 0.8825176, -0.8825176, 0.4702357, 0, 200)
auto_calculate_length_and_angle = false
length = 200.0
bone_angle = 0.0
metadata/_local_pose_override_enabled_ = true
[node name="RemoteTransform2D" type="RemoteTransform2D" parent="Skeleton2D/Torso/LeftUpperLeg/LeftLowerLeg" unique_id=1673135542]
rotation = -1.5707964
@@ -462,7 +540,6 @@ rest = Transform2D(0.8800552, -0.47482592, 0.47482592, 0.8800552, 0, 0)
auto_calculate_length_and_angle = false
length = 200.0
bone_angle = 90.0
metadata/_local_pose_override_enabled_ = true
[node name="RightLowerLeg" type="Bone2D" parent="Skeleton2D/Torso/RightUpperLeg" unique_id=1819999778]
position = Vector2(0, 200)
@@ -472,7 +549,6 @@ rest = Transform2D(-0.47026652, 0.8825017, -0.8825017, -0.47026652, 0, 200)
auto_calculate_length_and_angle = false
length = 200.0
bone_angle = 0.0
metadata/_local_pose_override_enabled_ = true
[node name="RemoteTransform2D" type="RemoteTransform2D" parent="Skeleton2D/Torso/RightUpperLeg/RightLowerLeg" unique_id=278100224]
rotation = -1.5707964