From 04a924943ba45c8f590d43a52a1912115dace8ef Mon Sep 17 00:00:00 2001 From: LUCASTUCIOUS Date: Mon, 22 Jul 2024 23:08:48 +0200 Subject: [PATCH] Animation Tree animation --- player.gd | 11 +- player.tscn | 260 ++++++++++++++++++++++++++++---- player/animations/WalkLeft.res | 4 +- player/animations/WalkRight.res | 4 +- player/animations/idle.res | 4 +- 5 files changed, 242 insertions(+), 41 deletions(-) diff --git a/player.gd b/player.gd index 43ce6b8..2bc4517 100644 --- a/player.gd +++ b/player.gd @@ -24,9 +24,14 @@ func _physics_process(delta): velocity.y = move_toward(velocity.y, 0, SPEED) #endregion - var WalkLeft = directionX < 0 - $AnimationTree.set("parameters/Locomotion/conditions/Idle",(velocity.x == 0 and velocity.y == 0)) - $AnimationTree.set("parameters/Locomotion/conditions/WalkLeft",velocity.x != 0) +#region Animation + + var WalkLeft = directionX < 0 or (directionY < 0 and directionY != 0) + var Idle = (velocity.x == 0 and velocity.y == 0) + $AnimationTree.set("parameters/Locomotion/conditions/Idle",Idle) + $AnimationTree.set("parameters/Locomotion/conditions/WalkLeft",WalkLeft and !Idle ) + $AnimationTree.set("parameters/Locomotion/conditions/WalkRight",!WalkLeft and !Idle) +#endregion move_and_slide() diff --git a/player.tscn b/player.tscn index 35b079b..c930d65 100644 --- a/player.tscn +++ b/player.tscn @@ -1,10 +1,11 @@ -[gd_scene load_steps=19 format=3 uid="uid://0m1hk2nu4bps"] +[gd_scene load_steps=25 format=3 uid="uid://0m1hk2nu4bps"] [ext_resource type="Script" path="res://player.gd" id="1_0pgv8"] [ext_resource type="Texture2D" uid="uid://5pmqr3y62guu" path="res://player/currentCloth.tres" id="2_45h8h"] [ext_resource type="Animation" uid="uid://b85dikp6ps8i2" path="res://player/animations/idle.res" id="2_ymiw5"] [ext_resource type="Animation" uid="uid://2woypk4u40b5" path="res://player/animations/WalkLeft.res" id="3_2eohq"] [ext_resource type="Texture2D" uid="uid://5qixrbrclydr" path="res://player/currentHat.tres" id="3_qyf3b"] +[ext_resource type="Animation" uid="uid://d3wpyd6di1ada" path="res://player/animations/WalkRight.res" id="4_pyvsf"] [ext_resource type="Texture2D" uid="uid://sod0ms1cfkjf" path="res://player/playerSkin_ref.png" id="4_ytgpb"] [sub_resource type="RectangleShape2D" id="RectangleShape2D_kapu3"] @@ -42,7 +43,7 @@ tracks/2/interp = 1 tracks/2/loop_wrap = true tracks/2/keys = { "handle_modes": PackedInt32Array(0), -"points": PackedFloat32Array(0, -0.25, 0, 0.25, 0), +"points": PackedFloat32Array(0.153589, -0.25, 0, 0.25, 0), "times": PackedFloat32Array(0) } tracks/3/type = "bezier" @@ -86,7 +87,7 @@ tracks/6/interp = 1 tracks/6/loop_wrap = true tracks/6/keys = { "handle_modes": PackedInt32Array(0), -"points": PackedFloat32Array(33, -0.25, 0, 0.25, 0), +"points": PackedFloat32Array(-30, -0.25, 0, 0.25, 0), "times": PackedFloat32Array(0) } tracks/7/type = "bezier" @@ -97,7 +98,7 @@ tracks/7/interp = 1 tracks/7/loop_wrap = true tracks/7/keys = { "handle_modes": PackedInt32Array(0), -"points": PackedFloat32Array(58, -0.25, 0, 0.25, 0), +"points": PackedFloat32Array(50, -0.25, 0, 0.25, 0), "times": PackedFloat32Array(0) } tracks/8/type = "bezier" @@ -255,11 +256,189 @@ tracks/21/keys = { "points": PackedFloat32Array(45, -0.25, 0, 0.25, 0), "times": PackedFloat32Array(0) } +tracks/22/type = "bezier" +tracks/22/imported = false +tracks/22/enabled = true +tracks/22/path = NodePath("Skeleton2D/root/Hips/Spine/Head:scale:x") +tracks/22/interp = 1 +tracks/22/loop_wrap = true +tracks/22/keys = { +"handle_modes": PackedInt32Array(0), +"points": PackedFloat32Array(1, -0.25, 0, 0.25, 0), +"times": PackedFloat32Array(0) +} +tracks/23/type = "bezier" +tracks/23/imported = false +tracks/23/enabled = true +tracks/23/path = NodePath("Skeleton2D/root/Hips/Spine/Head:scale:y") +tracks/23/interp = 1 +tracks/23/loop_wrap = true +tracks/23/keys = { +"handle_modes": PackedInt32Array(0), +"points": PackedFloat32Array(1, -0.25, 0, 0.25, 0), +"times": PackedFloat32Array(0) +} +tracks/24/type = "value" +tracks/24/imported = false +tracks/24/enabled = true +tracks/24/path = NodePath("Skeleton2D/Body/HandL:show_behind_parent") +tracks/24/interp = 1 +tracks/24/loop_wrap = true +tracks/24/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [false] +} +tracks/25/type = "bezier" +tracks/25/imported = false +tracks/25/enabled = true +tracks/25/path = NodePath("Skeleton2D/root/Hips/Spine:scale:x") +tracks/25/interp = 1 +tracks/25/loop_wrap = true +tracks/25/keys = { +"handle_modes": PackedInt32Array(0), +"points": PackedFloat32Array(1, -0.25, 0, 0.25, 0), +"times": PackedFloat32Array(0) +} +tracks/26/type = "bezier" +tracks/26/imported = false +tracks/26/enabled = true +tracks/26/path = NodePath("Skeleton2D/root/Hips/Spine:scale:y") +tracks/26/interp = 1 +tracks/26/loop_wrap = true +tracks/26/keys = { +"handle_modes": PackedInt32Array(0), +"points": PackedFloat32Array(1, -0.25, 0, 0.25, 0), +"times": PackedFloat32Array(0) +} +tracks/27/type = "bezier" +tracks/27/imported = false +tracks/27/enabled = true +tracks/27/path = NodePath("Skeleton2D/root/Hips/Tail:scale:x") +tracks/27/interp = 1 +tracks/27/loop_wrap = true +tracks/27/keys = { +"handle_modes": PackedInt32Array(0), +"points": PackedFloat32Array(1, -0.25, 0, 0.25, 0), +"times": PackedFloat32Array(0) +} +tracks/28/type = "bezier" +tracks/28/imported = false +tracks/28/enabled = true +tracks/28/path = NodePath("Skeleton2D/root/Hips/Tail:scale:y") +tracks/28/interp = 1 +tracks/28/loop_wrap = true +tracks/28/keys = { +"handle_modes": PackedInt32Array(0), +"points": PackedFloat32Array(1, -0.25, 0, 0.25, 0), +"times": PackedFloat32Array(0) +} +tracks/29/type = "bezier" +tracks/29/imported = false +tracks/29/enabled = true +tracks/29/path = NodePath("Skeleton2D/root/Hips/Spine/Head/Hat:scale:x") +tracks/29/interp = 1 +tracks/29/loop_wrap = true +tracks/29/keys = { +"handle_modes": PackedInt32Array(0), +"points": PackedFloat32Array(0.6, -0.25, 0, 0.25, 0), +"times": PackedFloat32Array(0) +} +tracks/30/type = "bezier" +tracks/30/imported = false +tracks/30/enabled = true +tracks/30/path = NodePath("Skeleton2D/root/Hips/Spine/Head/Hat:scale:y") +tracks/30/interp = 1 +tracks/30/loop_wrap = true +tracks/30/keys = { +"handle_modes": PackedInt32Array(0), +"points": PackedFloat32Array(0.6, -0.25, 0, 0.25, 0), +"times": PackedFloat32Array(0) +} +tracks/31/type = "bezier" +tracks/31/imported = false +tracks/31/enabled = true +tracks/31/path = NodePath("Skeleton2D/root/Hips/Spine/Head/Hat:position:x") +tracks/31/interp = 1 +tracks/31/loop_wrap = true +tracks/31/keys = { +"handle_modes": PackedInt32Array(0), +"points": PackedFloat32Array(65, -0.25, 0, 0.25, 0), +"times": PackedFloat32Array(0) +} +tracks/32/type = "bezier" +tracks/32/imported = false +tracks/32/enabled = true +tracks/32/path = NodePath("Skeleton2D/root/Hips/Spine/Head/Hat:position:y") +tracks/32/interp = 1 +tracks/32/loop_wrap = true +tracks/32/keys = { +"handle_modes": PackedInt32Array(0), +"points": PackedFloat32Array(-103, -0.25, 0, 0.25, 0), +"times": PackedFloat32Array(0) +} +tracks/33/type = "bezier" +tracks/33/imported = false +tracks/33/enabled = true +tracks/33/path = NodePath("Skeleton2D/root/Hips/Spine/ArmLeft:rotation") +tracks/33/interp = 1 +tracks/33/loop_wrap = true +tracks/33/keys = { +"handle_modes": PackedInt32Array(0), +"points": PackedFloat32Array(0, -0.25, 0, 0.25, 0), +"times": PackedFloat32Array(0) +} +tracks/34/type = "bezier" +tracks/34/imported = false +tracks/34/enabled = true +tracks/34/path = NodePath("Skeleton2D/root/Hips/LegLeft:scale:x") +tracks/34/interp = 1 +tracks/34/loop_wrap = true +tracks/34/keys = { +"handle_modes": PackedInt32Array(0), +"points": PackedFloat32Array(1, -0.25, 0, 0.25, 0), +"times": PackedFloat32Array(0) +} +tracks/35/type = "bezier" +tracks/35/imported = false +tracks/35/enabled = true +tracks/35/path = NodePath("Skeleton2D/root/Hips/LegLeft:scale:y") +tracks/35/interp = 1 +tracks/35/loop_wrap = true +tracks/35/keys = { +"handle_modes": PackedInt32Array(0), +"points": PackedFloat32Array(1, -0.25, 0, 0.25, 0), +"times": PackedFloat32Array(0) +} +tracks/36/type = "bezier" +tracks/36/imported = false +tracks/36/enabled = true +tracks/36/path = NodePath("Skeleton2D/root/Hips/LegRight:scale:x") +tracks/36/interp = 1 +tracks/36/loop_wrap = true +tracks/36/keys = { +"handle_modes": PackedInt32Array(0), +"points": PackedFloat32Array(1, -0.25, 0, 0.25, 0), +"times": PackedFloat32Array(0) +} +tracks/37/type = "bezier" +tracks/37/imported = false +tracks/37/enabled = true +tracks/37/path = NodePath("Skeleton2D/root/Hips/LegRight:scale:y") +tracks/37/interp = 1 +tracks/37/loop_wrap = true +tracks/37/keys = { +"handle_modes": PackedInt32Array(0), +"points": PackedFloat32Array(1, -0.25, 0, 0.25, 0), +"times": PackedFloat32Array(0) +} [sub_resource type="AnimationLibrary" id="AnimationLibrary_4k813"] _data = { "RESET": SubResource("Animation_oktsg"), "WalkLeft": ExtResource("3_2eohq"), +"WalkRight": ExtResource("4_pyvsf"), "idle": ExtResource("2_ymiw5") } @@ -268,6 +447,9 @@ _data = { [sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_myrjl"] animation = &"WalkLeft" +[sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_50xfb"] +animation = &"WalkRight" + [sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_dx8h8"] animation = &"idle" @@ -279,22 +461,43 @@ advance_mode = 2 advance_condition = &"WalkLeft" [sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_0oq83"] +xfade_time = 0.2 advance_mode = 2 advance_condition = &"Idle" +[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_p8n5f"] +advance_mode = 2 +advance_condition = &"WalkRight" + +[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_yhvwn"] +xfade_time = 0.2 +advance_mode = 2 +advance_condition = &"Idle" + +[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_xfa3x"] +advance_mode = 2 +advance_condition = &"WalkLeft" + +[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_m2u4j"] +advance_mode = 2 +advance_condition = &"WalkRight" + [sub_resource type="AnimationNodeStateMachine" id="AnimationNodeStateMachine_x16w7"] states/BlendTree/node = SubResource("AnimationNodeBlendTree_hn1cf") states/BlendTree/position = Vector2(668, 238) states/End/position = Vector2(328, 289) states/Start/position = Vector2(371, 25) states/WalkLeft/node = SubResource("AnimationNodeAnimation_myrjl") -states/WalkLeft/position = Vector2(534, 122) +states/WalkLeft/position = Vector2(495, 179) +states/WalkRight/node = SubResource("AnimationNodeAnimation_50xfb") +states/WalkRight/position = Vector2(259, 179) states/idle/node = SubResource("AnimationNodeAnimation_dx8h8") states/idle/position = Vector2(371, 111) -transitions = ["Start", "idle", SubResource("AnimationNodeStateMachineTransition_ogkr4"), "idle", "WalkLeft", SubResource("AnimationNodeStateMachineTransition_q2u5u"), "WalkLeft", "idle", SubResource("AnimationNodeStateMachineTransition_0oq83")] -graph_offset = Vector2(-48, -19) +transitions = ["Start", "idle", SubResource("AnimationNodeStateMachineTransition_ogkr4"), "idle", "WalkLeft", SubResource("AnimationNodeStateMachineTransition_q2u5u"), "WalkLeft", "idle", SubResource("AnimationNodeStateMachineTransition_0oq83"), "idle", "WalkRight", SubResource("AnimationNodeStateMachineTransition_p8n5f"), "WalkRight", "idle", SubResource("AnimationNodeStateMachineTransition_yhvwn"), "WalkRight", "WalkLeft", SubResource("AnimationNodeStateMachineTransition_xfa3x"), "WalkLeft", "WalkRight", SubResource("AnimationNodeStateMachineTransition_m2u4j")] +graph_offset = Vector2(-106, 41) [sub_resource type="AnimationNodeBlendTree" id="AnimationNodeBlendTree_wgp38"] +graph_offset = Vector2(-144, 42) nodes/Locomotion/node = SubResource("AnimationNodeStateMachine_x16w7") nodes/Locomotion/position = Vector2(180, 120) nodes/output/position = Vector2(380, 120) @@ -331,59 +534,56 @@ tree_root = SubResource("AnimationNodeBlendTree_wgp38") anim_player = NodePath("../AnimationPlayer") parameters/Locomotion/conditions/Idle = false parameters/Locomotion/conditions/WalkLeft = false +parameters/Locomotion/conditions/WalkRight = false [node name="Skeleton2D" type="Skeleton2D" parent="."] position = Vector2(17, 0) [node name="BootL" type="Sprite2D" parent="Skeleton2D"] -position = Vector2(39.7013, -40.9008) -rotation = -0.509857 -scale = Vector2(1, 1) +position = Vector2(42, -41) texture = ExtResource("2_45h8h") region_enabled = true region_rect = Rect2(896, 768, 128, 128) [node name="BootR" type="Sprite2D" parent="Skeleton2D"] -position = Vector2(-69.1147, -47.8842) -rotation = 0.472078 -scale = Vector2(1, 1) +position = Vector2(-71, -48) texture = ExtResource("2_45h8h") region_enabled = true region_rect = Rect2(896, 768, 128, 128) [node name="Body" type="Sprite2D" parent="Skeleton2D"] -position = Vector2(51, -222) +position = Vector2(51, -222.399) texture = ExtResource("2_45h8h") offset = Vector2(-15, 0) region_enabled = true region_rect = Rect2(0, 640, 384, 384) [node name="HandL" type="Sprite2D" parent="Skeleton2D/Body"] -position = Vector2(33, 58) +position = Vector2(-29.3091, 50.5049) texture = ExtResource("2_45h8h") region_enabled = true region_rect = Rect2(768, 768, 128, 128) [node name="HandR" type="Sprite2D" parent="Skeleton2D/Body"] show_behind_parent = true -position = Vector2(-151, 31) +position = Vector2(-151.18, 31.2505) texture = ExtResource("2_45h8h") region_enabled = true region_rect = Rect2(768, 768, 128, 128) [node name="Tail" type="Sprite2D" parent="Skeleton2D/Body"] show_behind_parent = true -position = Vector2(44, 92) -scale = Vector2(0.999991, 0.999991) +position = Vector2(44, 92.3986) +rotation = -0.217798 +scale = Vector2(1, 1) texture = ExtResource("2_45h8h") offset = Vector2(70, 0) region_enabled = true region_rect = Rect2(768, 640, 256, 128) [node name="Head" type="Sprite2D" parent="Skeleton2D"] -position = Vector2(-40, -395) -rotation = 0.00121922 -scale = Vector2(1, 1) +position = Vector2(-40, -395.399) +rotation = 0.00139138 texture = ExtResource("2_45h8h") offset = Vector2(0, -168) region_enabled = true @@ -391,7 +591,7 @@ region_rect = Rect2(0, 0, 512, 640) [node name="Hat" type="Sprite2D" parent="Skeleton2D/Head"] position = Vector2(65, -103) -scale = Vector2(0.600959, 0.600959) +scale = Vector2(0.6, 0.6) texture = ExtResource("3_qyf3b") region_enabled = true region_rect = Rect2(0, 0, 1152, 1136) @@ -406,7 +606,6 @@ rest = Transform2D(1, 0, 0, 1, -18, -93) [node name="LegLeft" type="Bone2D" parent="Skeleton2D/root/Hips"] position = Vector2(77, 52) -scale = Vector2(1, 1) rest = Transform2D(1, 0, 0, 1, 77, 52) [node name="RemoteTransform2D" type="RemoteTransform2D" parent="Skeleton2D/root/Hips/LegLeft"] @@ -414,7 +613,6 @@ remote_path = NodePath("../../../../BootL") [node name="LegRight" type="Bone2D" parent="Skeleton2D/root/Hips"] position = Vector2(-36, 45) -scale = Vector2(1, 1) rest = Transform2D(1, 0, 0, 1, -36, 45) [node name="RemoteTransform2D" type="RemoteTransform2D" parent="Skeleton2D/root/Hips/LegRight"] @@ -426,23 +624,22 @@ rest = Transform2D(1, 0, 0, 1, 86, -129) [node name="Head" type="Bone2D" parent="Skeleton2D/root/Hips/Spine"] position = Vector2(-91, -173) -scale = Vector2(1, 1) rest = Transform2D(1, 0, 0, 1, -91, -173) [node name="Hat" type="Bone2D" parent="Skeleton2D/root/Hips/Spine/Head"] position = Vector2(65, -103) -rest = Transform2D(1, 0, 0, 1, 65, -103) +scale = Vector2(0.6, 0.6) +rest = Transform2D(0.6, 0, 0, 0.6, 65, -103) [node name="RemoteTransform2D" type="RemoteTransform2D" parent="Skeleton2D/root/Hips/Spine/Head/Hat"] remote_path = NodePath("../../../../../../Head/Hat") -update_scale = false [node name="RemoteTransform2D" type="RemoteTransform2D" parent="Skeleton2D/root/Hips/Spine/Head"] remote_path = NodePath("../../../../../Head") [node name="ArmLeft" type="Bone2D" parent="Skeleton2D/root/Hips/Spine"] -position = Vector2(33, 58) -rest = Transform2D(1, 0, 0, 1, 33, 58) +position = Vector2(-30, 50) +rest = Transform2D(1, 0, 0, 1, -30, 50) [node name="RemoteTransform2D" type="RemoteTransform2D" parent="Skeleton2D/root/Hips/Spine/ArmLeft"] remote_path = NodePath("../../../../../Body/HandL") @@ -456,15 +653,14 @@ remote_path = NodePath("../../../../../Body/HandR") [node name="RemoteTransform2D" type="RemoteTransform2D" parent="Skeleton2D/root/Hips/Spine"] remote_path = NodePath("../../../../Body") -update_scale = false [node name="Tail" type="Bone2D" parent="Skeleton2D/root/Hips"] position = Vector2(130, -37) -rest = Transform2D(1, 0, 0, 1, 130, -37) +rotation = 0.153589 +rest = Transform2D(0.973179, -0.23005, 0.23005, 0.973179, 130, -37) [node name="RemoteTransform2D" type="RemoteTransform2D" parent="Skeleton2D/root/Hips/Tail"] remote_path = NodePath("../../../../Body/Tail") -update_scale = false [node name="debug2" type="Sprite2D" parent="."] visible = false diff --git a/player/animations/WalkLeft.res b/player/animations/WalkLeft.res index c5ba134..2d999d1 100644 --- a/player/animations/WalkLeft.res +++ b/player/animations/WalkLeft.res @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:cd8853cb7ddbfbab53f9a4454e3a97449f9b38644740f3f8219a59bd2779c47e -size 863 +oid sha256:07d8882c60e6f472e0e811e3db4c12c02ebb3e27c8040eeae69c34e826815c74 +size 1755 diff --git a/player/animations/WalkRight.res b/player/animations/WalkRight.res index 1ad3aa4..3b2d6ce 100644 --- a/player/animations/WalkRight.res +++ b/player/animations/WalkRight.res @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:08c4b86d1a319b9087bce4a2ee3a0edb7fa7e8b6a45f673db61e499162f50485 -size 867 +oid sha256:3d4577879ae4ddd28b842ee1565b59f97c0a2db70cbcd1dab6f1b2194a9e132d +size 1753 diff --git a/player/animations/idle.res b/player/animations/idle.res index 074d6ef..93b2d04 100644 --- a/player/animations/idle.res +++ b/player/animations/idle.res @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:60830d024859677bd58d684d35f8b1317f1a69aa060ef02f578287fc70ef92f1 -size 1548 +oid sha256:0cd989c7127fc633c1c5c62b87f50cb9f974338bdd42209c40af92975952791f +size 1969