diff --git a/src/Actors/Blobby/Blobby.tscn b/src/Actors/Blobby/Blobby.tscn index fc4c16d..31edfd4 100644 --- a/src/Actors/Blobby/Blobby.tscn +++ b/src/Actors/Blobby/Blobby.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=68 format=2] +[gd_scene load_steps=76 format=2] [ext_resource path="res://src/Actors/Blobby/BlobbyCam.gd" type="Script" id=2] [ext_resource path="res://src/Actors/Blobby/BlobbyStateMachine.gd" type="Script" id=3] @@ -11,12 +11,18 @@ extents = Vector2( 13, 9 ) [sub_resource type="StreamTexture" id=62] load_path = "res://.import/Blobby.png-42eed5028ccb56a7415a0793b79ec61e.stex" +[sub_resource type="AnimationNodeAnimation" id=83] +animation = "duckTurn" + [sub_resource type="AnimationNodeAnimation" id=18] animation = "ducking" [sub_resource type="AnimationNodeAnimation" id=19] animation = "falling" +[sub_resource type="AnimationNodeAnimation" id=84] +animation = "idleTurn" + [sub_resource type="AnimationNodeAnimation" id=21] animation = "idling" @@ -26,6 +32,9 @@ animation = "jumpToFall" [sub_resource type="AnimationNodeAnimation" id=22] animation = "jumping" +[sub_resource type="AnimationNodeAnimation" id=89] +animation = "runToJump" + [sub_resource type="AnimationNodeAnimation" id=23] animation = "running" @@ -47,8 +56,6 @@ animation = "wallsliding" [sub_resource type="AnimationNodeStateMachineTransition" id=31] -[sub_resource type="AnimationNodeStateMachineTransition" id=32] - [sub_resource type="AnimationNodeStateMachineTransition" id=33] [sub_resource type="AnimationNodeStateMachineTransition" id=34] @@ -58,6 +65,7 @@ animation = "wallsliding" [sub_resource type="AnimationNodeStateMachineTransition" id=36] [sub_resource type="AnimationNodeStateMachineTransition" id=37] +priority = 2 [sub_resource type="AnimationNodeStateMachineTransition" id=38] @@ -76,6 +84,7 @@ animation = "wallsliding" [sub_resource type="AnimationNodeStateMachineTransition" id=50] [sub_resource type="AnimationNodeStateMachineTransition" id=51] +priority = 2 [sub_resource type="AnimationNodeStateMachineTransition" id=52] @@ -88,6 +97,7 @@ auto_advance = true [sub_resource type="AnimationNodeStateMachineTransition" id=57] [sub_resource type="AnimationNodeStateMachineTransition" id=59] +priority = 2 [sub_resource type="AnimationNodeStateMachineTransition" id=60] switch_mode = 2 @@ -105,8 +115,6 @@ auto_advance = true [sub_resource type="AnimationNodeStateMachineTransition" id=76] -[sub_resource type="AnimationNodeStateMachineTransition" id=77] - [sub_resource type="AnimationNodeStateMachineTransition" id=78] [sub_resource type="AnimationNodeStateMachineTransition" id=79] @@ -117,17 +125,43 @@ auto_advance = true switch_mode = 2 auto_advance = true +[sub_resource type="AnimationNodeStateMachineTransition" id=85] + +[sub_resource type="AnimationNodeStateMachineTransition" id=87] + +[sub_resource type="AnimationNodeStateMachineTransition" id=88] +switch_mode = 2 +auto_advance = true + +[sub_resource type="AnimationNodeStateMachineTransition" id=90] + +[sub_resource type="AnimationNodeStateMachineTransition" id=91] +switch_mode = 2 +auto_advance = true + +[sub_resource type="AnimationNodeStateMachineTransition" id=92] + +[sub_resource type="AnimationNodeStateMachineTransition" id=93] +switch_mode = 2 +auto_advance = true + [sub_resource type="AnimationNodeStateMachine" id=47] +states/duckTurn/node = SubResource( 83 ) +states/duckTurn/position = Vector2( 680, 347.009 ) states/ducking/node = SubResource( 18 ) -states/ducking/position = Vector2( 680, 399 ) +states/ducking/position = Vector2( 680, 241 ) states/falling/node = SubResource( 19 ) states/falling/position = Vector2( 1097, 241 ) +states/idleTurn/node = SubResource( 84 ) +states/idleTurn/position = Vector2( 228.329, -183.991 ) states/idling/node = SubResource( 21 ) -states/idling/position = Vector2( 356, 38 ) +states/idling/position = Vector2( 215.329, 27 ) states/jumpToFall/node = SubResource( 63 ) -states/jumpToFall/position = Vector2( 680, 493.088 ) +states/jumpToFall/position = Vector2( 680, 416.088 ) states/jumping/node = SubResource( 22 ) states/jumping/position = Vector2( 203, 265 ) +states/runToJump/node = SubResource( 89 ) +states/runToJump/position = Vector2( 97.329, 129.009 ) states/running/node = SubResource( 23 ) states/running/position = Vector2( 1028, 8 ) states/turnToRun/node = SubResource( 54 ) @@ -135,12 +169,12 @@ states/turnToRun/position = Vector2( 685, -219.378 ) states/walking/node = SubResource( 24 ) states/walking/position = Vector2( 685, -54 ) states/wallslideToJump/node = SubResource( 80 ) -states/wallslideToJump/position = Vector2( 227.329, 552.088 ) +states/wallslideToJump/position = Vector2( 208, 612.088 ) states/wallsliding/node = SubResource( 64 ) -states/wallsliding/position = Vector2( 685, 686.088 ) -transitions = [ "idling", "walking", SubResource( 25 ), "walking", "idling", SubResource( 26 ), "idling", "jumping", SubResource( 31 ), "running", "jumping", SubResource( 32 ), "walking", "jumping", SubResource( 33 ), "ducking", "idling", SubResource( 34 ), "idling", "ducking", SubResource( 35 ), "ducking", "running", SubResource( 36 ), "running", "ducking", SubResource( 37 ), "walking", "ducking", SubResource( 38 ), "ducking", "walking", SubResource( 39 ), "falling", "running", SubResource( 40 ), "falling", "ducking", SubResource( 41 ), "falling", "idling", SubResource( 42 ), "falling", "walking", SubResource( 43 ), "ducking", "jumping", SubResource( 44 ), "walking", "falling", SubResource( 50 ), "running", "falling", SubResource( 51 ), "ducking", "falling", SubResource( 52 ), "idling", "turnToRun", SubResource( 55 ), "turnToRun", "running", SubResource( 56 ), "walking", "turnToRun", SubResource( 57 ), "running", "turnToRun", SubResource( 59 ), "turnToRun", "walking", SubResource( 60 ), "turnToRun", "idling", SubResource( 61 ), "jumping", "jumpToFall", SubResource( 65 ), "jumpToFall", "falling", SubResource( 66 ), "falling", "wallsliding", SubResource( 76 ), "wallsliding", "jumping", SubResource( 77 ), "wallsliding", "falling", SubResource( 78 ), "wallsliding", "idling", SubResource( 79 ), "wallsliding", "wallslideToJump", SubResource( 81 ), "wallslideToJump", "jumping", SubResource( 82 ) ] +states/wallsliding/position = Vector2( 572, 612.088 ) +transitions = [ "idling", "walking", SubResource( 25 ), "walking", "idling", SubResource( 26 ), "idling", "jumping", SubResource( 31 ), "walking", "jumping", SubResource( 33 ), "ducking", "idling", SubResource( 34 ), "idling", "ducking", SubResource( 35 ), "ducking", "running", SubResource( 36 ), "running", "ducking", SubResource( 37 ), "walking", "ducking", SubResource( 38 ), "ducking", "walking", SubResource( 39 ), "falling", "running", SubResource( 40 ), "falling", "ducking", SubResource( 41 ), "falling", "idling", SubResource( 42 ), "falling", "walking", SubResource( 43 ), "ducking", "jumping", SubResource( 44 ), "walking", "falling", SubResource( 50 ), "running", "falling", SubResource( 51 ), "ducking", "falling", SubResource( 52 ), "idling", "turnToRun", SubResource( 55 ), "turnToRun", "running", SubResource( 56 ), "walking", "turnToRun", SubResource( 57 ), "running", "turnToRun", SubResource( 59 ), "turnToRun", "walking", SubResource( 60 ), "turnToRun", "idling", SubResource( 61 ), "jumping", "jumpToFall", SubResource( 65 ), "jumpToFall", "falling", SubResource( 66 ), "falling", "wallsliding", SubResource( 76 ), "wallsliding", "falling", SubResource( 78 ), "wallsliding", "idling", SubResource( 79 ), "wallsliding", "wallslideToJump", SubResource( 81 ), "wallslideToJump", "jumping", SubResource( 82 ), "idling", "idleTurn", SubResource( 85 ), "ducking", "duckTurn", SubResource( 87 ), "duckTurn", "ducking", SubResource( 88 ), "running", "runToJump", SubResource( 90 ), "runToJump", "jumping", SubResource( 91 ), "walking", "idleTurn", SubResource( 92 ), "idleTurn", "walking", SubResource( 93 ) ] start_node = "idling" -graph_offset = Vector2( -241.671, 220.009 ) +graph_offset = Vector2( -192.671, -315.991 ) [sub_resource type="AnimationNodeStateMachinePlayback" id=48] @@ -414,6 +448,7 @@ __meta__ = { [node name="AnimationTree" type="AnimationTree" parent="BlobbySprite"] tree_root = SubResource( 47 ) anim_player = NodePath("../BlobbymationPlayer") +active = true root_motion_track = NodePath(".:frame") parameters/playback = SubResource( 48 ) diff --git a/src/Actors/Blobby/BlobbyCam.gd b/src/Actors/Blobby/BlobbyCam.gd index 37fabc2..93a8ea4 100644 --- a/src/Actors/Blobby/BlobbyCam.gd +++ b/src/Actors/Blobby/BlobbyCam.gd @@ -36,9 +36,9 @@ func _set_boundaries(): if screen_size.end.x * original_x_zoom - h_pixels > 0: zoom.x = h_pixels / screen_size.end.x zoom.y = zoom.x - # if screen_size.end.y * original_y_zoom - v_pixels > 0: - # zoom.y = v_pixels / screen_size.end.y - # zoom.x = zoom.y + if screen_size.end.y * original_y_zoom - v_pixels > 0: + zoom.y = v_pixels / screen_size.end.y + zoom.x = zoom.y # TODO Smoothing the camera limits in godot ruins this still? func _adapt_to_movement(): diff --git a/src/Actors/Blobby/BlobbyStateMachine.gd b/src/Actors/Blobby/BlobbyStateMachine.gd index a153a06..838852a 100644 --- a/src/Actors/Blobby/BlobbyStateMachine.gd +++ b/src/Actors/Blobby/BlobbyStateMachine.gd @@ -11,6 +11,7 @@ onready var anim_player = parent.get_node("BlobbySprite/BlobbymationPlayer") onready var anim_statemachine = parent.get_node("BlobbySprite/AnimationTree").get("parameters/playback") onready var sprite = parent.get_node("BlobbySprite") +var didTurn: bool # Adds the intial states func _ready(): @@ -58,10 +59,15 @@ func _state_logic(delta): var direction = get_horizontal_direction() + didTurn = sprite.flip_h if direction.x < 0: - sprite.flip_h = true + sprite.flip_h = true elif direction.x > 0: - sprite.flip_h = false + sprite.flip_h = false + didTurn = sprite.flip_h != didTurn + + if didTurn: + _trigger_turn_animation() parent.velocity = handle_input_ref.call_func(delta, direction) @@ -178,7 +184,10 @@ func _enter_state(new_state, old_state): match new_state: states.walk: - anim_statemachine.travel("walking") + if old_state == states.idle && didTurn: + anim_statemachine.travel("idleTurn") + else: + anim_statemachine.travel("walking") states.idle: anim_statemachine.travel("idling") states.duck: @@ -191,10 +200,19 @@ func _enter_state(new_state, old_state): states.run: anim_statemachine.travel("running") states.wallslide: - anim_statemachine.travel("wallsliding") func _exit_state(old_state, new_state): pass + +func _trigger_turn_animation(): + match self.state: + states.duck: + anim_statemachine.travel("duckTurn") + states.walk: + anim_statemachine.travel("idleTurn") + states.idle: + anim_statemachine.travel("idleTurn") + \ No newline at end of file