[gd_scene load_steps=59 format=3 uid="uid://dhfawoy2d8lsq"] [ext_resource type="Texture2D" uid="uid://cejt0nhot8uw4" path="res://assets/character/gobbo.png" id="2_0vjlc"] [ext_resource type="Script" uid="uid://dwbhtjvpv0utl" path="res://scripts/states/StateMachine.cs" id="2_5y66v"] [ext_resource type="Script" uid="uid://dvytggb7uhxsf" path="res://scripts/Player.cs" id="2_wmtbp"] [ext_resource type="PackedScene" uid="uid://ciycf4hbxu0v5" path="res://assets/character/model.tscn" id="3_0vjlc"] [ext_resource type="Script" uid="uid://dv3sve5vfcn55" path="res://scripts/states/player/PlayerGrounded.cs" id="3_wmtbp"] [ext_resource type="Script" uid="uid://desj0bmav00ec" path="res://scripts/states/player/PlayerAirborn.cs" id="4_5y66v"] [ext_resource type="Script" uid="uid://dn3js76wk06we" path="res://scripts/states/player/PlayerWallGrab.cs" id="5_uicah"] [sub_resource type="LabelSettings" id="LabelSettings_wmtbp"] font_size = 24 [sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_g2qfr"] animation = &"parachute_up_left" [sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_e5n5u"] animation = &"parachute_down_left" [sub_resource type="AnimationNodeBlendSpace1D" id="AnimationNodeBlendSpace1D_jb4us"] blend_point_0/node = SubResource("AnimationNodeAnimation_g2qfr") blend_point_0/pos = -100.0 blend_point_1/node = SubResource("AnimationNodeAnimation_e5n5u") blend_point_1/pos = 100.0 min_space = -100.0 max_space = 100.0 sync = true [sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_x06ku"] animation = &"parachute_up_right" [sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_pygui"] animation = &"parachute_down_right" [sub_resource type="AnimationNodeBlendSpace1D" id="AnimationNodeBlendSpace1D_okkwj"] blend_point_0/node = SubResource("AnimationNodeAnimation_x06ku") blend_point_0/pos = -100.0 blend_point_1/node = SubResource("AnimationNodeAnimation_pygui") blend_point_1/pos = 100.0 min_space = -100.0 max_space = 100.0 sync = true [sub_resource type="AnimationNodeBlendSpace1D" id="AnimationNodeBlendSpace1D_erpy8"] blend_point_0/node = SubResource("AnimationNodeBlendSpace1D_jb4us") blend_point_0/pos = -1.0 blend_point_1/node = SubResource("AnimationNodeBlendSpace1D_okkwj") blend_point_1/pos = 1.0 sync = true [sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_erpy8"] animation = &"airborne_up_left" [sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_uicah"] animation = &"airborne_down_left" [sub_resource type="AnimationNodeBlendSpace1D" id="AnimationNodeBlendSpace1D_g2qfr"] blend_point_0/node = SubResource("AnimationNodeAnimation_erpy8") blend_point_0/pos = -100.0 blend_point_1/node = SubResource("AnimationNodeAnimation_uicah") blend_point_1/pos = 100.0 min_space = -100.0 max_space = 100.0 sync = true [sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_vreni"] animation = &"airborne_up_right" [sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_7r6u0"] animation = &"airborne_down_right" [sub_resource type="AnimationNodeBlendSpace1D" id="AnimationNodeBlendSpace1D_e5n5u"] blend_point_0/node = SubResource("AnimationNodeAnimation_vreni") blend_point_0/pos = -100.0 blend_point_1/node = SubResource("AnimationNodeAnimation_7r6u0") blend_point_1/pos = 100.0 min_space = -100.0 max_space = 100.0 sync = true [sub_resource type="AnimationNodeBlendSpace1D" id="AnimationNodeBlendSpace1D_wmtbp"] blend_point_0/node = SubResource("AnimationNodeBlendSpace1D_g2qfr") blend_point_0/pos = -1.0 blend_point_1/node = SubResource("AnimationNodeBlendSpace1D_e5n5u") blend_point_1/pos = 1.0 sync = true [sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_vreni"] switch_mode = 1 advance_mode = 2 [sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_e5n5u"] xfade_time = 0.2 switch_mode = 1 [sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_ba010"] xfade_time = 0.2 switch_mode = 1 [sub_resource type="AnimationNodeStateMachine" id="AnimationNodeStateMachine_erpy8"] states/Parachute/node = SubResource("AnimationNodeBlendSpace1D_erpy8") states/Parachute/position = Vector2(596, 87) states/Standard/node = SubResource("AnimationNodeBlendSpace1D_wmtbp") states/Standard/position = Vector2(368, 87) states/Start/position = Vector2(197, 87) transitions = ["Start", "Standard", SubResource("AnimationNodeStateMachineTransition_vreni"), "Standard", "Parachute", SubResource("AnimationNodeStateMachineTransition_e5n5u"), "Parachute", "Standard", SubResource("AnimationNodeStateMachineTransition_ba010")] graph_offset = Vector2(-169, -32) [sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_wmtbp"] animation = &"idle_left" [sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_5y66v"] animation = &"idle_right" [sub_resource type="AnimationNodeBlendSpace1D" id="AnimationNodeBlendSpace1D_uicah"] blend_point_0/node = SubResource("AnimationNodeAnimation_wmtbp") blend_point_0/pos = -1.0 blend_point_1/node = SubResource("AnimationNodeAnimation_5y66v") blend_point_1/pos = 1.0 sync = true [sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_jb4us"] animation = &"skidturn_left_to_right" [sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_ux0ro"] animation = &"skidturn_right_to_left" [sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_vhx6d"] animation = &"sprint_left" [sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_2smwq"] animation = &"sprint_right" [sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_x06ku"] xfade_time = 0.05 switch_mode = 1 [sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_pygui"] xfade_time = 0.1 switch_mode = 2 [sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_okkwj"] xfade_time = 0.05 switch_mode = 1 [sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_p86hl"] xfade_time = 0.1 switch_mode = 2 [sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_71sfj"] xfade_time = 0.15 switch_mode = 1 [sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_o0173"] xfade_time = 0.15 switch_mode = 1 [sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_ux0ro"] xfade_time = 0.15 switch_mode = 1 [sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_vhx6d"] xfade_time = 0.15 switch_mode = 1 [sub_resource type="AnimationNodeStateMachine" id="AnimationNodeStateMachine_g2qfr"] states/End/position = Vector2(836.5, -7) states/Start/position = Vector2(494, 78) states/skidturn_left_to_right/node = SubResource("AnimationNodeAnimation_jb4us") states/skidturn_left_to_right/position = Vector2(494, 152) states/skidturn_right_to_left/node = SubResource("AnimationNodeAnimation_ux0ro") states/skidturn_right_to_left/position = Vector2(489, -7) states/sprint_left/node = SubResource("AnimationNodeAnimation_vhx6d") states/sprint_left/position = Vector2(345, 78) states/sprint_right/node = SubResource("AnimationNodeAnimation_2smwq") states/sprint_right/position = Vector2(653, 78) transitions = ["sprint_right", "skidturn_right_to_left", SubResource("AnimationNodeStateMachineTransition_x06ku"), "skidturn_right_to_left", "sprint_left", SubResource("AnimationNodeStateMachineTransition_pygui"), "sprint_left", "skidturn_left_to_right", SubResource("AnimationNodeStateMachineTransition_okkwj"), "skidturn_left_to_right", "sprint_right", SubResource("AnimationNodeStateMachineTransition_p86hl"), "Start", "sprint_left", SubResource("AnimationNodeStateMachineTransition_71sfj"), "Start", "sprint_right", SubResource("AnimationNodeStateMachineTransition_o0173"), "skidturn_left_to_right", "skidturn_right_to_left", SubResource("AnimationNodeStateMachineTransition_ux0ro"), "skidturn_right_to_left", "skidturn_left_to_right", SubResource("AnimationNodeStateMachineTransition_vhx6d")] graph_offset = Vector2(147.187, -50.844) [sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_xub24"] animation = &"walk_left" [sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_iinkm"] animation = &"walk_right" [sub_resource type="AnimationNodeBlendSpace1D" id="AnimationNodeBlendSpace1D_vreni"] blend_point_0/node = SubResource("AnimationNodeAnimation_xub24") blend_point_0/pos = -1.0 blend_point_1/node = SubResource("AnimationNodeAnimation_iinkm") blend_point_1/pos = 1.0 sync = true [sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_7r6u0"] xfade_time = 0.05 switch_mode = 1 advance_mode = 2 [sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_wmtbp"] xfade_time = 0.1 switch_mode = 1 [sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_5y66v"] xfade_time = 0.1 switch_mode = 1 [sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_uicah"] xfade_time = 0.1 switch_mode = 1 [sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_g2qfr"] xfade_time = 0.1 switch_mode = 1 [sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_xub24"] xfade_time = 0.2 switch_mode = 1 [sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_iinkm"] xfade_time = 0.2 switch_mode = 1 [sub_resource type="AnimationNodeStateMachine" id="AnimationNodeStateMachine_e5n5u"] states/Idle/node = SubResource("AnimationNodeBlendSpace1D_uicah") states/Idle/position = Vector2(474, 141) states/Sprint/node = SubResource("AnimationNodeStateMachine_g2qfr") states/Sprint/position = Vector2(645, 100) states/Start/position = Vector2(275, 100) states/Walk/node = SubResource("AnimationNodeBlendSpace1D_vreni") states/Walk/position = Vector2(474, 39) transitions = ["Start", "Idle", SubResource("AnimationNodeStateMachineTransition_7r6u0"), "Walk", "Idle", SubResource("AnimationNodeStateMachineTransition_wmtbp"), "Idle", "Walk", SubResource("AnimationNodeStateMachineTransition_5y66v"), "Idle", "Sprint", SubResource("AnimationNodeStateMachineTransition_uicah"), "Sprint", "Idle", SubResource("AnimationNodeStateMachineTransition_g2qfr"), "Walk", "Sprint", SubResource("AnimationNodeStateMachineTransition_xub24"), "Sprint", "Walk", SubResource("AnimationNodeStateMachineTransition_iinkm")] graph_offset = Vector2(-79, -34) [sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_erpy8"] switch_mode = 1 advance_mode = 2 [sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_k0yad"] xfade_time = 0.1 switch_mode = 1 [sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_jb4us"] xfade_time = 0.1 switch_mode = 1 [sub_resource type="AnimationNodeStateMachine" id="AnimationNodeStateMachine_jb4us"] states/Airborne/node = SubResource("AnimationNodeStateMachine_erpy8") states/Airborne/position = Vector2(375, 33) states/Grounded/node = SubResource("AnimationNodeStateMachine_e5n5u") states/Grounded/position = Vector2(375, 128) states/Start/position = Vector2(210, 128) transitions = ["Start", "Grounded", SubResource("AnimationNodeStateMachineTransition_erpy8"), "Grounded", "Airborne", SubResource("AnimationNodeStateMachineTransition_k0yad"), "Airborne", "Grounded", SubResource("AnimationNodeStateMachineTransition_jb4us")] graph_offset = Vector2(-133, -13.4125) [sub_resource type="CapsuleShape2D" id="CapsuleShape2D_0vjlc"] radius = 2.0 height = 7.0 [node name="Player" type="CharacterBody2D"] collision_mask = 2 script = ExtResource("2_wmtbp") [node name="StateLabel" type="Label" parent="."] offset_left = -3.0 offset_top = 2.0 offset_right = 57.0 offset_bottom = 36.0 scale = Vector2(0.1, 0.1) text = "State" label_settings = SubResource("LabelSettings_wmtbp") [node name="AnimationTree" type="AnimationTree" parent="."] root_node = NodePath("../ModelContainer/SubViewportContainer/SubViewport/blockbench_export") tree_root = SubResource("AnimationNodeStateMachine_jb4us") anim_player = NodePath("../ModelContainer/SubViewportContainer/SubViewport/blockbench_export/AnimationPlayer") parameters/Airborne/Parachute/blend_position = 1.0 parameters/Airborne/Parachute/0/blend_position = 0 parameters/Airborne/Parachute/1/blend_position = 0 parameters/Airborne/Standard/blend_position = -0.0893281 parameters/Airborne/Standard/0/blend_position = 0.0 parameters/Airborne/Standard/1/blend_position = 0.0 parameters/Grounded/Idle/blend_position = 1.0 parameters/Grounded/Walk/blend_position = 1.0 [node name="StateMachine" type="Node" parent="." node_paths=PackedStringArray("InitialState")] script = ExtResource("2_5y66v") InitialState = NodePath("PlayerGrounded") [node name="PlayerGrounded" type="Node" parent="StateMachine"] script = ExtResource("3_wmtbp") [node name="PlayerAirborne" type="Node" parent="StateMachine"] script = ExtResource("4_5y66v") [node name="PlayerWallGrab" type="Node" parent="StateMachine"] script = ExtResource("5_uicah") [node name="WallCastTop" type="RayCast2D" parent="."] position = Vector2(0, -7) target_position = Vector2(3.8, 0) collision_mask = 2 hit_from_inside = true [node name="WallCastMid" type="RayCast2D" parent="."] position = Vector2(0, -4) target_position = Vector2(3.6, 0) collision_mask = 2 hit_from_inside = true [node name="WallCastLow" type="RayCast2D" parent="."] position = Vector2(0, -1) target_position = Vector2(3.6, 0) collision_mask = 2 hit_from_inside = true [node name="WallCastDelay" type="Timer" parent="."] wait_time = 0.1 one_shot = true [node name="CameraOffsetCast" type="RayCast2D" parent="."] visible = false position = Vector2(0, -8.1) target_position = Vector2(0, -28) collision_mask = 2 [node name="CameraDownCast" type="RayCast2D" parent="CameraOffsetCast"] top_level = true target_position = Vector2(0, 56) collision_mask = 2 [node name="CollisionShape2D" type="CollisionShape2D" parent="."] position = Vector2(0, -3.5) shape = SubResource("CapsuleShape2D_0vjlc") [node name="Sprite2D" type="Sprite2D" parent="."] visible = false position = Vector2(0, -4) texture = ExtResource("2_0vjlc") [node name="ModelContainer" type="Node2D" parent="."] position = Vector2(0, -0.39) scale = Vector2(2, 2) [node name="SubViewportContainer" type="SubViewportContainer" parent="ModelContainer"] offset_left = -4.0 offset_top = -8.0 offset_right = 1020.0 offset_bottom = 1016.0 scale = Vector2(0.008, 0.008) [node name="SubViewport" type="SubViewport" parent="ModelContainer/SubViewportContainer"] transparent_bg = true handle_input_locally = false size = Vector2i(1024, 1024) render_target_update_mode = 4 [node name="blockbench_export" parent="ModelContainer/SubViewportContainer/SubViewport" instance=ExtResource("3_0vjlc")] [node name="Skeleton3D" parent="ModelContainer/SubViewportContainer/SubViewport/blockbench_export/root" index="0"] bones/2/scale = Vector3(0, 0, 0) bones/6/position = Vector3(-0.03125, 0.0288724, 0) bones/6/rotation = Quaternion(0, 0, 0.00318058, 0.999995) bones/9/rotation = Quaternion(0, 0.92388, 0, 0.382683) bones/10/position = Vector3(0.09375, 0.125, 0.0625) bones/10/rotation = Quaternion(0, 0, -0.000881489, 1) bones/11/position = Vector3(-0.03125, 0.078125, -0.03125) bones/13/rotation = Quaternion(0, 0.92388, 0, 0.382683) bones/14/position = Vector3(-0.03125, 0.0625, -0.015625) [node name="Camera3D" type="Camera3D" parent="ModelContainer/SubViewportContainer/SubViewport"] transform = Transform3D(-1, 0, 1.50996e-07, 0, 1, 0, -1.50996e-07, 0, -1, 0, 0.5, -1) projection = 1 [node name="BlinkTimer" type="Timer" parent="."] [node name="CoyoteTimer" type="Timer" parent="."] wait_time = 0.12 one_shot = true [connection signal="timeout" from="WallCastDelay" to="." method="_on_wall_cast_delay_timeout"] [connection signal="timeout" from="BlinkTimer" to="." method="_on_blink_timer_timeout"] [connection signal="timeout" from="CoyoteTimer" to="." method="_on_coyote_timer_timeout"] [editable path="ModelContainer/SubViewportContainer/SubViewport/blockbench_export"]