Turning animations with blend spaces

This commit is contained in:
Jakob Feldmann 2022-08-02 00:20:45 +02:00
parent 2a92de18c7
commit 50c349c236
2 changed files with 49 additions and 27 deletions

View File

@ -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"]

View File

@ -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")