From 50c349c2364b59cdf5819de1140994f49d6e94c2 Mon Sep 17 00:00:00 2001 From: Jakob Feldmann Date: Tue, 2 Aug 2022 00:20:45 +0200 Subject: [PATCH] Turning animations with blend spaces --- src/Actors/Blobby/Blobby.tscn | 41 +++++++++++++------------ src/Actors/Blobby/BlobbyStateMachine.gd | 35 ++++++++++++++++----- 2 files changed, 49 insertions(+), 27 deletions(-) diff --git a/src/Actors/Blobby/Blobby.tscn b/src/Actors/Blobby/Blobby.tscn index f8dafc1..082a7f1 100644 --- a/src/Actors/Blobby/Blobby.tscn +++ b/src/Actors/Blobby/Blobby.tscn @@ -134,9 +134,9 @@ animation = "wallslideToJumpRight" [sub_resource type="AnimationNodeBlendSpace1D" id=136] blend_point_0/node = SubResource( 134 ) -blend_point_0/pos = -1.0 +blend_point_0/pos = 1.0 blend_point_1/node = SubResource( 135 ) -blend_point_1/pos = 1.0 +blend_point_1/pos = -1.0 [sub_resource type="AnimationNodeAnimation" id=179] animation = "wallsliding" @@ -151,8 +151,6 @@ blend_point_1/node = SubResource( 180 ) blend_point_1/pos = 1.0 snap = 1.0 -[sub_resource type="AnimationNodeStateMachineTransition" id=137] - [sub_resource type="AnimationNodeStateMachineTransition" id=138] [sub_resource type="AnimationNodeStateMachineTransition" id=139] @@ -215,8 +213,10 @@ priority = 2 [sub_resource type="AnimationNodeStateMachineTransition" id=166] [sub_resource type="AnimationNodeStateMachineTransition" id=167] +xfade_time = 0.1 [sub_resource type="AnimationNodeStateMachineTransition" id=168] +xfade_time = 0.1 priority = 2 [sub_resource type="AnimationNodeStateMachineTransition" id=169] @@ -240,6 +240,7 @@ switch_mode = 2 auto_advance = true [sub_resource type="AnimationNodeStateMachineTransition" id=176] +xfade_time = 0.5 [sub_resource type="AnimationNodeStateMachineTransition" id=177] switch_mode = 2 @@ -247,6 +248,8 @@ auto_advance = true [sub_resource type="AnimationNodeStateMachineTransition" id=178] +[sub_resource type="AnimationNodeStateMachineTransition" id=137] + [sub_resource type="AnimationNodeStateMachine" id=47] states/duckTurn/node = SubResource( 126 ) states/duckTurn/position = Vector2( 1795.54, 241 ) @@ -271,12 +274,12 @@ states/turnToRun/position = Vector2( 1795.54, -308.991 ) states/walking/node = SubResource( 133 ) states/walking/position = Vector2( 1795.54, -54 ) states/wallslideToJump/node = SubResource( 136 ) -states/wallslideToJump/position = Vector2( 1375.54, 296.009 ) +states/wallslideToJump/position = Vector2( 1568.54, 459.009 ) states/wallsliding/node = SubResource( 96 ) -states/wallsliding/position = Vector2( 1803.54, 563.009 ) -transitions = [ "wallsliding", "falling", SubResource( 137 ), "falling", "wallsliding", SubResource( 138 ), "wallsliding", "idling", SubResource( 139 ), "wallsliding", "wallslideToJump", SubResource( 140 ), "wallslideToJump", "jumping", SubResource( 141 ), "idling", "jumping", SubResource( 147 ), "runToJump", "jumping", SubResource( 148 ), "ducking", "jumping", SubResource( 149 ), "jumping", "jumpToFall", SubResource( 150 ), "jumpToFall", "falling", SubResource( 151 ), "ducking", "duckTurn", SubResource( 152 ), "duckTurn", "ducking", SubResource( 153 ), "falling", "ducking", SubResource( 154 ), "ducking", "falling", SubResource( 155 ), "ducking", "walking", SubResource( 156 ), "walking", "ducking", SubResource( 157 ), "idling", "ducking", SubResource( 158 ), "ducking", "idling", SubResource( 159 ), "ducking", "running", SubResource( 160 ), "running", "ducking", SubResource( 161 ), "running", "falling", SubResource( 162 ), "falling", "running", SubResource( 163 ), "walking", "falling", SubResource( 164 ), "falling", "walking", SubResource( 165 ), "falling", "idling", SubResource( 166 ), "idling", "walking", SubResource( 167 ), "walking", "idling", SubResource( 168 ), "walking", "turnToRun", SubResource( 169 ), "turnToRun", "walking", SubResource( 170 ), "running", "turnToRun", SubResource( 171 ), "turnToRun", "running", SubResource( 172 ), "idling", "idleTurn", SubResource( 173 ), "walking", "idleTurn", SubResource( 174 ), "idleTurn", "walking", SubResource( 175 ), "idling", "turnToRun", SubResource( 176 ), "turnToRun", "idling", SubResource( 177 ), "running", "runToJump", SubResource( 178 ) ] +states/wallsliding/position = Vector2( 1766.54, 606.009 ) +transitions = [ "falling", "wallsliding", SubResource( 138 ), "wallsliding", "idling", SubResource( 139 ), "wallsliding", "wallslideToJump", SubResource( 140 ), "wallslideToJump", "jumping", SubResource( 141 ), "idling", "jumping", SubResource( 147 ), "runToJump", "jumping", SubResource( 148 ), "ducking", "jumping", SubResource( 149 ), "jumping", "jumpToFall", SubResource( 150 ), "jumpToFall", "falling", SubResource( 151 ), "ducking", "duckTurn", SubResource( 152 ), "duckTurn", "ducking", SubResource( 153 ), "falling", "ducking", SubResource( 154 ), "ducking", "falling", SubResource( 155 ), "ducking", "walking", SubResource( 156 ), "walking", "ducking", SubResource( 157 ), "idling", "ducking", SubResource( 158 ), "ducking", "idling", SubResource( 159 ), "ducking", "running", SubResource( 160 ), "running", "ducking", SubResource( 161 ), "running", "falling", SubResource( 162 ), "falling", "running", SubResource( 163 ), "walking", "falling", SubResource( 164 ), "falling", "walking", SubResource( 165 ), "falling", "idling", SubResource( 166 ), "idling", "walking", SubResource( 167 ), "walking", "idling", SubResource( 168 ), "walking", "turnToRun", SubResource( 169 ), "turnToRun", "walking", SubResource( 170 ), "running", "turnToRun", SubResource( 171 ), "turnToRun", "running", SubResource( 172 ), "idling", "idleTurn", SubResource( 173 ), "walking", "idleTurn", SubResource( 174 ), "idleTurn", "walking", SubResource( 175 ), "idling", "turnToRun", SubResource( 176 ), "turnToRun", "idling", SubResource( 177 ), "running", "runToJump", SubResource( 178 ), "wallsliding", "falling", SubResource( 137 ) ] start_node = "idling" -graph_offset = Vector2( 1001.54, 39.009 ) +graph_offset = Vector2( 921.542, -100.991 ) [sub_resource type="AnimationNodeStateMachinePlayback" id=48] @@ -1658,7 +1661,7 @@ tracks/10/keys = { } [sub_resource type="Animation" id=71] -length = 0.1 +length = 0.13 loop = true tracks/0/type = "value" tracks/0/path = NodePath(".:frame") @@ -1795,7 +1798,7 @@ tracks/10/keys = { [sub_resource type="Animation" id=105] resource_name = "jumpToFallLeft" -length = 0.1 +length = 0.13 loop = true tracks/0/type = "value" tracks/0/path = NodePath(".:frame") @@ -2204,7 +2207,7 @@ tracks/10/keys = { } [sub_resource type="Animation" id=72] -length = 0.3 +length = 0.23 loop = true tracks/0/type = "value" tracks/0/path = NodePath(".:frame") @@ -2213,10 +2216,10 @@ tracks/0/loop_wrap = false tracks/0/imported = false tracks/0/enabled = true tracks/0/keys = { -"times": PoolRealArray( 0, 0.15 ), -"transitions": PoolRealArray( 1, 1 ), +"times": PoolRealArray( 0 ), +"transitions": PoolRealArray( 1 ), "update": 1, -"values": [ 27.0, 28 ] +"values": [ 27.0 ] } tracks/1/type = "value" tracks/1/path = NodePath("../BlobbySkin/CollisionPolygon2D:shape:extents") @@ -2341,7 +2344,7 @@ tracks/10/keys = { [sub_resource type="Animation" id=143] resource_name = "runToJumpLeft" -length = 0.3 +length = 0.23 loop = true tracks/0/type = "value" tracks/0/path = NodePath(".:frame") @@ -2350,10 +2353,10 @@ tracks/0/loop_wrap = false tracks/0/imported = false tracks/0/enabled = true tracks/0/keys = { -"times": PoolRealArray( 0, 0.15 ), -"transitions": PoolRealArray( 1, 1 ), +"times": PoolRealArray( 0 ), +"transitions": PoolRealArray( 1 ), "update": 1, -"values": [ 27, 28 ] +"values": [ 27 ] } tracks/1/type = "value" tracks/1/path = NodePath("../BlobbySkin/CollisionPolygon2D:shape:extents") @@ -3883,7 +3886,7 @@ parameters/runToJump/blend_position = 1.0 parameters/running/blend_position = 1.0 parameters/turnToRun/blend_position = 1.0 parameters/walking/blend_position = 1.0 -parameters/wallslideToJump/blend_position = 1.0 +parameters/wallslideToJump/blend_position = 0.997743 parameters/wallsliding/blend_position = 1.0 [node name="BlobbymationPlayer" type="AnimationPlayer" parent="BlobbySprite"] diff --git a/src/Actors/Blobby/BlobbyStateMachine.gd b/src/Actors/Blobby/BlobbyStateMachine.gd index cdd5b0c..4a790d6 100644 --- a/src/Actors/Blobby/BlobbyStateMachine.gd +++ b/src/Actors/Blobby/BlobbyStateMachine.gd @@ -12,7 +12,8 @@ onready var anim_state_playback = parent.get_node("BlobbySprite/AnimationTree"). onready var anim_tree = parent.get_node("BlobbySprite/AnimationTree") onready var sprite = parent.get_node("BlobbySprite") -var didTurn: bool +var facing = 1 +var didTurn # Adds the intial states func _ready(): @@ -59,15 +60,19 @@ func _state_logic(delta): print("don't panik") var direction = get_horizontal_direction() + didTurn = false + + + if direction.x < 0 && facing == 1: + didTurn = true + facing = sign(direction.x) + elif direction.x > 0 && facing == -1: + didTurn = true + facing = sign(direction.x) - didTurn = sprite.flip_h - if direction.x < 0: - anim_state_playback - elif direction.x > 0: - sprite.flip_h = false - didTurn = sprite.flip_h != didTurn if didTurn: + _set_blendspaces_direction(facing) _trigger_turn_animation() parent.velocity = handle_input_ref.call_func(delta, direction) @@ -185,6 +190,7 @@ func _enter_state(new_state, old_state): match new_state: states.walk: + # TODO I need this when there is a turn happening between two different states if old_state == states.idle && didTurn: anim_state_playback.travel("idleTurn") else: @@ -208,6 +214,19 @@ func _enter_state(new_state, old_state): func _exit_state(old_state, new_state): pass +func _set_blendspaces_direction(value): + anim_tree.set("parameters/ducking/blend_position", value) + anim_tree.set("parameters/falling/blend_position", value) + anim_tree.set("parameters/idling/blend_position", value) + anim_tree.set("parameters/jumpToFall/blend_position", value) + anim_tree.set("parameters/jumping/blend_position", value) + anim_tree.set("parameters/runToJump/blend_position", value) + anim_tree.set("parameters/running/blend_position", value) + anim_tree.set("parameters/turnToRun/blend_position", value) + anim_tree.set("parameters/walking/blend_position", value) + anim_tree.set("parameters/wallslideToJump/blend_position", value) + anim_tree.set("parameters/wallsliding/blend_position", value) + func _trigger_turn_animation(): match self.state: states.duck: @@ -216,4 +235,4 @@ func _trigger_turn_animation(): anim_state_playback.travel("idleTurn") states.idle: anim_state_playback.travel("idleTurn") - \ No newline at end of file +