From 60a6df808e407976fa01b4d78c146e63b88ea435 Mon Sep 17 00:00:00 2001 From: Haze Weathers Date: Thu, 6 Mar 2025 13:26:24 -0500 Subject: [PATCH] usurpation of the olde norm --- maps/its_spring.tscn | 2 +- maps/level1.tscn | 2 +- maps/level_z.tscn | 4 +- maps/tutorial.tscn | 2 +- maps/yikes_more_spikes.tscn | 2 +- maps/yikes_spikes.tscn | 2 +- objects/new_player/new_player.gd | 84 ------- objects/new_player/new_player.gd.uid | 1 - objects/new_player/new_player.tscn | 285 ---------------------- objects/player/player.gd | 105 +++++---- objects/player/player.gd.uid | 2 +- objects/player/player.tscn | 340 +++++++++++++++++---------- 12 files changed, 277 insertions(+), 554 deletions(-) delete mode 100644 objects/new_player/new_player.gd delete mode 100644 objects/new_player/new_player.gd.uid delete mode 100644 objects/new_player/new_player.tscn diff --git a/maps/its_spring.tscn b/maps/its_spring.tscn index e68ca34..75d2e33 100644 --- a/maps/its_spring.tscn +++ b/maps/its_spring.tscn @@ -2,7 +2,7 @@ [ext_resource type="Texture2D" uid="uid://d13tqqx8ygak4" path="res://assets/textures/backgrounds/hell.png" id="1_p8vut"] [ext_resource type="Shader" uid="uid://cwktxks6mchp2" path="res://assets/shaders/noise.gdshader" id="2_hpwyk"] -[ext_resource type="PackedScene" uid="uid://mh2gfm7iqqsm" path="res://objects/player/player.tscn" id="3_edpy5"] +[ext_resource type="PackedScene" uid="uid://bwtpsjpe2lf7l" path="res://objects/player/player.tscn" id="3_edpy5"] [ext_resource type="TileSet" uid="uid://xwfn24if3pxk" path="res://assets/tilesets/chocomint.tres" id="4_onc0l"] [ext_resource type="FontFile" uid="uid://dets0g4ce7npf" path="res://assets/fonts/Super Mario Bros. NES.ttf" id="5_s8gph"] [ext_resource type="PackedScene" uid="uid://bhnse651bcybm" path="res://objects/end_door/end_door.tscn" id="6_8fhro"] diff --git a/maps/level1.tscn b/maps/level1.tscn index 62b45e9..58422e9 100644 --- a/maps/level1.tscn +++ b/maps/level1.tscn @@ -2,7 +2,7 @@ [ext_resource type="Texture2D" uid="uid://d13tqqx8ygak4" path="res://assets/textures/backgrounds/hell.png" id="1_bxdo5"] [ext_resource type="Shader" uid="uid://cwktxks6mchp2" path="res://assets/shaders/noise.gdshader" id="1_j2mm6"] -[ext_resource type="PackedScene" uid="uid://mh2gfm7iqqsm" path="res://objects/player/player.tscn" id="2_kip56"] +[ext_resource type="PackedScene" uid="uid://bwtpsjpe2lf7l" path="res://objects/player/player.tscn" id="2_kip56"] [ext_resource type="TileSet" uid="uid://xwfn24if3pxk" path="res://assets/tilesets/chocomint.tres" id="3_4td23"] [ext_resource type="PackedScene" uid="uid://68lav5rke5ag" path="res://objects/spring/spring.tscn" id="4_a3xei"] [ext_resource type="PackedScene" uid="uid://b5eso40mjhlmv" path="res://objects/ice/ice.tscn" id="5_88a5a"] diff --git a/maps/level_z.tscn b/maps/level_z.tscn index 9a8527f..7e4ad2c 100644 --- a/maps/level_z.tscn +++ b/maps/level_z.tscn @@ -4,7 +4,7 @@ [ext_resource type="Script" uid="uid://d3v13a4er2h1x" path="res://scripts/level/level.gd" id="1_hcs1r"] [ext_resource type="TileSet" uid="uid://xwfn24if3pxk" path="res://assets/tilesets/chocomint.tres" id="2_dj7w1"] [ext_resource type="PackedScene" uid="uid://c8r040r4glui4" path="res://objects/enemies/lashy/lashy.tscn" id="4_gykx6"] -[ext_resource type="PackedScene" uid="uid://bwtpsjpe2lf7l" path="res://objects/new_player/new_player.tscn" id="5_5v7mr"] +[ext_resource type="PackedScene" uid="uid://bwtpsjpe2lf7l" path="res://objects/player/player.tscn" id="5_5v7mr"] [node name="LevelZ" type="Node2D"] script = ExtResource("1_hcs1r") @@ -26,4 +26,4 @@ tile_set = ExtResource("2_dj7w1") position = Vector2(141, 99) [node name="Player" parent="." instance=ExtResource("5_5v7mr")] -position = Vector2(37, 129) +position = Vector2(40, 144) diff --git a/maps/tutorial.tscn b/maps/tutorial.tscn index 2e60b1b..45a2d8f 100644 --- a/maps/tutorial.tscn +++ b/maps/tutorial.tscn @@ -2,7 +2,7 @@ [ext_resource type="Texture2D" uid="uid://d13tqqx8ygak4" path="res://assets/textures/backgrounds/hell.png" id="1_5dne7"] [ext_resource type="Shader" uid="uid://cwktxks6mchp2" path="res://assets/shaders/noise.gdshader" id="2_els7d"] -[ext_resource type="PackedScene" uid="uid://mh2gfm7iqqsm" path="res://objects/player/player.tscn" id="3_imjpd"] +[ext_resource type="PackedScene" uid="uid://bwtpsjpe2lf7l" path="res://objects/player/player.tscn" id="3_imjpd"] [ext_resource type="TileSet" uid="uid://xwfn24if3pxk" path="res://assets/tilesets/chocomint.tres" id="4_1rmvv"] [ext_resource type="FontFile" uid="uid://dets0g4ce7npf" path="res://assets/fonts/Super Mario Bros. NES.ttf" id="5_ae2vf"] [ext_resource type="PackedScene" uid="uid://bhnse651bcybm" path="res://objects/end_door/end_door.tscn" id="6_yywag"] diff --git a/maps/yikes_more_spikes.tscn b/maps/yikes_more_spikes.tscn index 3fc7b81..c7c142f 100644 --- a/maps/yikes_more_spikes.tscn +++ b/maps/yikes_more_spikes.tscn @@ -2,7 +2,7 @@ [ext_resource type="Texture2D" uid="uid://d13tqqx8ygak4" path="res://assets/textures/backgrounds/hell.png" id="1_6i0lb"] [ext_resource type="Shader" uid="uid://cwktxks6mchp2" path="res://assets/shaders/noise.gdshader" id="2_3dp43"] -[ext_resource type="PackedScene" uid="uid://mh2gfm7iqqsm" path="res://objects/player/player.tscn" id="3_mts2t"] +[ext_resource type="PackedScene" uid="uid://bwtpsjpe2lf7l" path="res://objects/player/player.tscn" id="3_mts2t"] [ext_resource type="TileSet" uid="uid://xwfn24if3pxk" path="res://assets/tilesets/chocomint.tres" id="4_evy0b"] [ext_resource type="FontFile" uid="uid://dets0g4ce7npf" path="res://assets/fonts/Super Mario Bros. NES.ttf" id="5_eo1kb"] [ext_resource type="PackedScene" uid="uid://bhnse651bcybm" path="res://objects/end_door/end_door.tscn" id="6_vvcgd"] diff --git a/maps/yikes_spikes.tscn b/maps/yikes_spikes.tscn index 6522baf..c0f1f2f 100644 --- a/maps/yikes_spikes.tscn +++ b/maps/yikes_spikes.tscn @@ -2,7 +2,7 @@ [ext_resource type="Texture2D" uid="uid://d13tqqx8ygak4" path="res://assets/textures/backgrounds/hell.png" id="1_588ks"] [ext_resource type="Shader" uid="uid://cwktxks6mchp2" path="res://assets/shaders/noise.gdshader" id="2_rvhjv"] -[ext_resource type="PackedScene" uid="uid://mh2gfm7iqqsm" path="res://objects/player/player.tscn" id="3_pdn7u"] +[ext_resource type="PackedScene" uid="uid://bwtpsjpe2lf7l" path="res://objects/player/player.tscn" id="3_pdn7u"] [ext_resource type="TileSet" uid="uid://xwfn24if3pxk" path="res://assets/tilesets/chocomint.tres" id="4_pcxb3"] [ext_resource type="FontFile" uid="uid://dets0g4ce7npf" path="res://assets/fonts/Super Mario Bros. NES.ttf" id="5_bpruh"] [ext_resource type="PackedScene" uid="uid://bhnse651bcybm" path="res://objects/end_door/end_door.tscn" id="6_uyuca"] diff --git a/objects/new_player/new_player.gd b/objects/new_player/new_player.gd deleted file mode 100644 index 44afe71..0000000 --- a/objects/new_player/new_player.gd +++ /dev/null @@ -1,84 +0,0 @@ -class_name NewPlayer -extends CharacterBody2D - - -@export_group("Ground Movement") -@export var run_acceleration: float -@export var max_run_speed: float -@export var turn_acceleration: float -@export var stopping_force: float - -@export_group("Air Movement") -@export var gravity: float -@export var jump_power: float - -@export_group("Internal References") -@export var state_chart: StateChart -@export var graphics: Node2D -@export var run_animation: SpritesheetAnimation - - -var input_dir: Vector2 = Vector2.ZERO: - set(value): - input_dir = value.sign() - state_chart.set_expression_property(&"input_dir", input_dir) - - -func _physics_process(delta: float) -> void: - move_and_slide() - state_chart.set_expression_property(&"velocity", velocity) - if velocity.x != 0.0: - graphics.scale.x = signf(velocity.x) - - state_chart.set_expression_property(&"on_floor", is_on_floor()) - - input_dir = Input.get_vector(&"move_left", &"move_right", &"move_up", &"move_down") - - state_chart.send_event(&"tick") - - -func _unhandled_input(event: InputEvent) -> void: - if event.is_action_pressed(&"jump"): - state_chart.send_event(&"jump_pressed") - - -#region Idle -func _slow_to_stop(delta: float) -> void: - velocity.x = move_toward(velocity.x, 0.0, stopping_force * delta) -#endregion - -#region Running -func _apply_run_acceleration(delta: float) -> void: - if absf(velocity.x) < max_run_speed: - velocity.x += input_dir.x * run_acceleration * delta - -func _scale_run_animation(delta:float) -> void: - run_animation.speed_scale = inverse_lerp(0.0, max_run_speed, absf(velocity.x)) -#endregion - - -#region Turning -func _apply_turn_acceleration(delta: float) -> void: - velocity.x += input_dir.x * turn_acceleration * delta -#endregion - - -#region Falling -func _apply_gravity(delta: float) -> void: - velocity.y += gravity * delta -#endregion - - -#region Jumping -func _start_jump() -> void: - velocity.y = -jump_power -#endregion - - -#region Missile -func _face_towards_velocity(_delta: float) -> void: - graphics.rotation = Vector2(graphics.scale.x, 0.0).angle_to(velocity) - -func _restore_graphics_rotation() -> void: - graphics.rotation = 0.0 -#endregion diff --git a/objects/new_player/new_player.gd.uid b/objects/new_player/new_player.gd.uid deleted file mode 100644 index 6609e5f..0000000 --- a/objects/new_player/new_player.gd.uid +++ /dev/null @@ -1 +0,0 @@ -uid://dhyi4yn0xleoy diff --git a/objects/new_player/new_player.tscn b/objects/new_player/new_player.tscn deleted file mode 100644 index 97a277e..0000000 --- a/objects/new_player/new_player.tscn +++ /dev/null @@ -1,285 +0,0 @@ -[gd_scene load_steps=20 format=3 uid="uid://bwtpsjpe2lf7l"] - -[ext_resource type="Script" uid="uid://dhyi4yn0xleoy" path="res://objects/new_player/new_player.gd" id="1_xs4s5"] -[ext_resource type="Texture2D" uid="uid://c71nqfyw4a3v4" path="res://assets/textures/player/capri.png" id="3_trcll"] -[ext_resource type="Script" uid="uid://cv55s54clajw5" path="res://scripts/spritesheet_animation/spritesheet_animation.gd" id="4_bsdw5"] -[ext_resource type="Script" uid="uid://bhrh1qkv7nlyl" path="res://addons/godot_state_charts/state_chart.gd" id="5_bcjtl"] -[ext_resource type="Script" uid="uid://b11v7h3ny6kh1" path="res://addons/godot_state_charts/compound_state.gd" id="6_jnxnd"] -[ext_resource type="Script" uid="uid://rrj3six8lu8p" path="res://addons/godot_state_charts/transition.gd" id="7_rgjdc"] -[ext_resource type="Script" uid="uid://b6u7unac5srh0" path="res://addons/godot_state_charts/expression_guard.gd" id="8_8i2im"] -[ext_resource type="AudioStream" uid="uid://7be7ts3rdegh" path="res://assets/audio/vox/capri_jump.ogg" id="9_8c74o"] -[ext_resource type="Script" uid="uid://cyvphy8py4ntr" path="res://addons/godot_state_charts/atomic_state.gd" id="10_mvu25"] - -[sub_resource type="CircleShape2D" id="CircleShape2D_tvyy1"] -radius = 6.0 - -[sub_resource type="Resource" id="Resource_sfpnl"] -resource_name = "Not On Floor" -script = ExtResource("8_8i2im") -expression = "not on_floor" -metadata/_custom_type_script = "uid://b6u7unac5srh0" - -[sub_resource type="Resource" id="Resource_mq184"] -resource_name = "Horizontal Input" -script = ExtResource("8_8i2im") -expression = "input_dir.x != 0.0" -metadata/_custom_type_script = "uid://b6u7unac5srh0" - -[sub_resource type="Resource" id="Resource_nye2q"] -resource_name = "Horizontal Movement" -script = ExtResource("8_8i2im") -expression = "velocity.x != 0.0" -metadata/_custom_type_script = "uid://b6u7unac5srh0" - -[sub_resource type="Resource" id="Resource_n665q"] -resource_name = "No Horizontal Movement" -script = ExtResource("8_8i2im") -expression = "velocity.x == 0.0" -metadata/_custom_type_script = "uid://b6u7unac5srh0" - -[sub_resource type="Resource" id="Resource_8c74o"] -resource_name = "No Horizontal Input" -script = ExtResource("8_8i2im") -expression = "input_dir.x == 0.0" -metadata/_custom_type_script = "uid://b6u7unac5srh0" - -[sub_resource type="Resource" id="Resource_xs4s5"] -resource_name = "Opposite Input" -script = ExtResource("8_8i2im") -expression = "input_dir.x != signf(velocity.x)" -metadata/_custom_type_script = "uid://b6u7unac5srh0" - -[sub_resource type="Resource" id="Resource_e1cbd"] -resource_name = "Aligned Input" -script = ExtResource("8_8i2im") -expression = "input_dir.x == signf(velocity.x)" -metadata/_custom_type_script = "uid://b6u7unac5srh0" - -[sub_resource type="Resource" id="Resource_163ft"] -resource_name = "On Floor" -script = ExtResource("8_8i2im") -expression = "on_floor" -metadata/_custom_type_script = "uid://b6u7unac5srh0" - -[sub_resource type="Resource" id="Resource_whx0j"] -resource_name = "Falling Down" -script = ExtResource("8_8i2im") -expression = "velocity.y > 0.0" -metadata/_custom_type_script = "uid://b6u7unac5srh0" - -[node name="Player" type="CharacterBody2D" node_paths=PackedStringArray("state_chart", "graphics", "run_animation")] -collision_layer = 16 -collision_mask = 3 -floor_snap_length = 3.0 -script = ExtResource("1_xs4s5") -run_acceleration = 150.0 -max_run_speed = 100.0 -turn_acceleration = 250.0 -stopping_force = 200.0 -gravity = 450.0 -jump_power = 180.0 -state_chart = NodePath("StateChart") -graphics = NodePath("Graphics") -run_animation = NodePath("Graphics/Sprite/Run") - -[node name="CollisionShape" type="CollisionShape2D" parent="."] -shape = SubResource("CircleShape2D_tvyy1") -debug_color = Color(3.32102e-06, 0.648976, 0.161954, 0.42) - -[node name="Graphics" type="Node2D" parent="."] - -[node name="Sprite" type="Sprite2D" parent="Graphics"] -texture = ExtResource("3_trcll") -offset = Vector2(0, -2) -hframes = 4 -vframes = 4 -region_rect = Rect2(0, 0, 64, 64) - -[node name="Idle" type="Node" parent="Graphics/Sprite"] -script = ExtResource("4_bsdw5") - -[node name="Bark" type="Node" parent="Graphics/Sprite"] -script = ExtResource("4_bsdw5") -first_frame = Vector2i(1, 0) - -[node name="Skid" type="Node" parent="Graphics/Sprite"] -script = ExtResource("4_bsdw5") -first_frame = Vector2i(2, 0) - -[node name="Run" type="Node" parent="Graphics/Sprite"] -script = ExtResource("4_bsdw5") -first_frame = Vector2i(0, 1) -frames = 4 -fps = 16.0 -loop = true - -[node name="Fall" type="Node" parent="Graphics/Sprite"] -script = ExtResource("4_bsdw5") -first_frame = Vector2i(0, 2) - -[node name="Jump" type="Node" parent="Graphics/Sprite"] -script = ExtResource("4_bsdw5") -first_frame = Vector2i(1, 2) - -[node name="Missile" type="Node" parent="Graphics/Sprite"] -script = ExtResource("4_bsdw5") -first_frame = Vector2i(2, 2) - -[node name="Sounds" type="Node" parent="."] - -[node name="Voice" type="AudioStreamPlayer" parent="Sounds"] -stream = ExtResource("9_8c74o") -bus = &"Capri" - -[node name="StateChart" type="Node" parent="."] -script = ExtResource("5_bcjtl") -track_in_editor = true -initial_expression_properties = { -&"input_dir": Vector2(0, 0), -&"on_floor": false, -&"velocity": Vector2(0, 0) -} - -[node name="Root" type="Node" parent="StateChart"] -script = ExtResource("6_jnxnd") -initial_state = NodePath("Grounded") - -[node name="Grounded" type="Node" parent="StateChart/Root"] -editor_description = "Player is standing on a floor." -script = ExtResource("6_jnxnd") -initial_state = NodePath("Standing") - -[node name="on JumpPressed" type="Node" parent="StateChart/Root/Grounded"] -script = ExtResource("7_rgjdc") -to = NodePath("../../Airborne/Jumping") -event = &"jump_pressed" -delay_in_seconds = "0.0" - -[node name="if NotOnFloor" type="Node" parent="StateChart/Root/Grounded"] -editor_description = "Transition to falling state if not touching a floor." -script = ExtResource("7_rgjdc") -to = NodePath("../../Airborne/Falling") -event = &"tick" -guard = SubResource("Resource_sfpnl") -delay_in_seconds = "0.0" - -[node name="Standing" type="Node" parent="StateChart/Root/Grounded"] -editor_description = "Player is standing still or coming to a stop." -script = ExtResource("6_jnxnd") -initial_state = NodePath("Idle") -metadata/_custom_type_script = "uid://b11v7h3ny6kh1" - -[node name="if WalkHeld" type="Node" parent="StateChart/Root/Grounded/Standing"] -editor_description = "Transition to running state if a horizontal direction is being held." -script = ExtResource("7_rgjdc") -to = NodePath("../../Running") -guard = SubResource("Resource_mq184") -delay_in_seconds = "0.0" - -[node name="Idle" type="Node" parent="StateChart/Root/Grounded/Standing"] -editor_description = "Player is stopped, standing still." -script = ExtResource("10_mvu25") - -[node name="if Moving" type="Node" parent="StateChart/Root/Grounded/Standing/Idle"] -editor_description = "Transition to stopping state if the player has horizontal velocity." -script = ExtResource("7_rgjdc") -to = NodePath("../../Stopping") -guard = SubResource("Resource_nye2q") -delay_in_seconds = "0.0" - -[node name="Stopping" type="Node" parent="StateChart/Root/Grounded/Standing"] -editor_description = "Player is slowing to a stop naturally." -script = ExtResource("10_mvu25") - -[node name="if Stopped" type="Node" parent="StateChart/Root/Grounded/Standing/Stopping"] -editor_description = "Transition to idle state when the player has come to a full stop." -script = ExtResource("7_rgjdc") -to = NodePath("../../Idle") -guard = SubResource("Resource_n665q") -delay_in_seconds = "0.0" - -[node name="Running" type="Node" parent="StateChart/Root/Grounded"] -editor_description = "Player is accelerating in the held input direction." -script = ExtResource("10_mvu25") - -[node name="if WalkReleased" type="Node" parent="StateChart/Root/Grounded/Running"] -editor_description = "Transition to standing state if no input direction is held." -script = ExtResource("7_rgjdc") -to = NodePath("../../Standing") -guard = SubResource("Resource_8c74o") -delay_in_seconds = "0.0" - -[node name="if OppositeInput" type="Node" parent="StateChart/Root/Grounded/Running"] -editor_description = "Transition to turning state if the held input dir is opposite the horizontal velocity." -script = ExtResource("7_rgjdc") -to = NodePath("../../Turning") -guard = SubResource("Resource_xs4s5") -delay_in_seconds = "0.0" - -[node name="Turning" type="Node" parent="StateChart/Root/Grounded"] -editor_description = "Player is more quickly accelerating in the held input direction to slow and turn around." -script = ExtResource("10_mvu25") - -[node name="if WalkReleased" type="Node" parent="StateChart/Root/Grounded/Turning"] -editor_description = "Transition to standing state if no input direction is held." -script = ExtResource("7_rgjdc") -to = NodePath("../../Standing") -guard = SubResource("Resource_8c74o") -delay_in_seconds = "0.0" - -[node name="if AlignedInput" type="Node" parent="StateChart/Root/Grounded/Turning"] -editor_description = "Transition to running state when input direction matches horizontal velocity." -script = ExtResource("7_rgjdc") -to = NodePath("../../Running") -guard = SubResource("Resource_e1cbd") -delay_in_seconds = "0.0" - -[node name="Airborne" type="Node" parent="StateChart/Root"] -editor_description = "Player is in the air." -script = ExtResource("6_jnxnd") -initial_state = NodePath("Falling") - -[node name="if OnFloor" type="Node" parent="StateChart/Root/Airborne"] -editor_description = "Transition to grounded state if touching a floor." -script = ExtResource("7_rgjdc") -to = NodePath("../../Grounded") -event = &"tick" -guard = SubResource("Resource_163ft") -delay_in_seconds = "0.0" - -[node name="Falling" type="Node" parent="StateChart/Root/Airborne"] -editor_description = "Player is falling down." -script = ExtResource("10_mvu25") - -[node name="Jumping" type="Node" parent="StateChart/Root/Airborne"] -editor_description = "Player has jumped and is rising." -script = ExtResource("10_mvu25") - -[node name="if DownVelocity" type="Node" parent="StateChart/Root/Airborne/Jumping"] -editor_description = "Transition to the falling state if moving downwards." -script = ExtResource("7_rgjdc") -to = NodePath("../../Falling") -guard = SubResource("Resource_whx0j") -delay_in_seconds = "0.0" - -[node name="Missile" type="Node" parent="StateChart/Root/Airborne"] -editor_description = "Player is hurtling through the air and ricocheting off of surfaces." -script = ExtResource("10_mvu25") - -[connection signal="state_entered" from="StateChart/Root/Grounded/Standing/Idle" to="Graphics/Sprite/Idle" method="play"] -[connection signal="state_entered" from="StateChart/Root/Grounded/Standing/Stopping" to="Graphics/Sprite/Run" method="play"] -[connection signal="state_physics_processing" from="StateChart/Root/Grounded/Standing/Stopping" to="." method="_scale_run_animation"] -[connection signal="state_physics_processing" from="StateChart/Root/Grounded/Standing/Stopping" to="." method="_slow_to_stop"] -[connection signal="state_entered" from="StateChart/Root/Grounded/Running" to="Graphics/Sprite/Run" method="play"] -[connection signal="state_physics_processing" from="StateChart/Root/Grounded/Running" to="." method="_scale_run_animation"] -[connection signal="state_physics_processing" from="StateChart/Root/Grounded/Running" to="." method="_apply_run_acceleration"] -[connection signal="state_entered" from="StateChart/Root/Grounded/Turning" to="Graphics/Sprite/Skid" method="play"] -[connection signal="state_physics_processing" from="StateChart/Root/Grounded/Turning" to="." method="_apply_turn_acceleration"] -[connection signal="state_physics_processing" from="StateChart/Root/Airborne" to="." method="_apply_gravity"] -[connection signal="state_entered" from="StateChart/Root/Airborne/Falling" to="Graphics/Sprite/Fall" method="play"] -[connection signal="state_entered" from="StateChart/Root/Airborne/Jumping" to="." method="_start_jump"] -[connection signal="state_entered" from="StateChart/Root/Airborne/Jumping" to="Graphics/Sprite/Jump" method="play"] -[connection signal="state_entered" from="StateChart/Root/Airborne/Jumping" to="Sounds/Voice" method="play"] -[connection signal="state_entered" from="StateChart/Root/Airborne/Missile" to="Graphics/Sprite/Missile" method="play"] -[connection signal="state_exited" from="StateChart/Root/Airborne/Missile" to="." method="_restore_graphics_rotation"] -[connection signal="state_physics_processing" from="StateChart/Root/Airborne/Missile" to="." method="_face_towards_velocity"] diff --git a/objects/player/player.gd b/objects/player/player.gd index 6bcbde9..9007e72 100644 --- a/objects/player/player.gd +++ b/objects/player/player.gd @@ -2,70 +2,83 @@ class_name Player extends CharacterBody2D -@export var gravity: float -@export var run_speed: float -@export var jump_force: float +@export_group("Ground Movement") +@export var run_acceleration: float +@export var max_run_speed: float +@export var turn_acceleration: float +@export var stopping_force: float -@export_group("Node References") +@export_group("Air Movement") +@export var gravity: float +@export var jump_power: float + +@export_group("Internal References") @export var state_chart: StateChart @export var graphics: Node2D +@export var run_animation: SpritesheetAnimation -@onready var start_position = position -@onready var voice = %Voice -var ices_touched:int = 0: +var input_dir: Vector2 = Vector2.ZERO: set(value): - ices_touched = value - if ices_touched <= 0: - ices_touched = 0 - state_chart.send_event(&"ground_touched") - else: - state_chart.send_event(&"ice_touched") - -#region Notifications -func _ready() -> void: - state_chart.set_expression_property(&"player", self) - -func _unhandled_input(event: InputEvent) -> void: - if event.is_action_pressed(&"ui_accept"): - state_chart.send_event(&"jump_pressed") - - -func _process(delta: float) -> void: - if is_on_floor(): - graphics.rotation = get_floor_angle() - else: - graphics.rotation = 0.0 + input_dir = value.sign() + state_chart.set_expression_property(&"input_dir", input_dir) func _physics_process(delta: float) -> void: + move_and_slide() + state_chart.set_expression_property(&"velocity", velocity) + if velocity.x != 0.0: + graphics.scale.x = signf(velocity.x) + state_chart.set_expression_property(&"on_floor", is_on_floor()) - var h_input = Input.get_axis(&"ui_left", &"ui_right") - state_chart.set_expression_property(&"horizontal_input", h_input != 0.0) + input_dir = Input.get_vector(&"move_left", &"move_right", &"move_up", &"move_down") - move_and_slide() + state_chart.send_event(&"tick") + + +func _unhandled_input(event: InputEvent) -> void: + if event.is_action_pressed(&"jump"): + state_chart.send_event(&"jump_pressed") + + +#region Idle +func _slow_to_stop(delta: float) -> void: + velocity.x = move_toward(velocity.x, 0.0, stopping_force * delta) +#endregion + +#region Running +func _apply_run_acceleration(delta: float) -> void: + if absf(velocity.x) < max_run_speed: + velocity.x += input_dir.x * run_acceleration * delta + +func _scale_run_animation(delta:float) -> void: + run_animation.speed_scale = inverse_lerp(0.0, max_run_speed, absf(velocity.x)) #endregion -#region State Processing -func _process_run(delta: float) -> void: - var h_input = Input.get_axis(&"ui_left", &"ui_right") - velocity.x = h_input * run_speed - graphics.scale.x = signf(h_input) +#region Turning +func _apply_turn_acceleration(delta: float) -> void: + velocity.x += input_dir.x * turn_acceleration * delta +#endregion -func _process_gravity(delta: float) -> void: + +#region Falling +func _apply_gravity(delta: float) -> void: velocity.y += gravity * delta #endregion -#region State One-Shots -func _do_jump() -> void: - voice.stream = load("res://assets/audio/vox/capri_jump.ogg") - voice.play() - velocity.y = -jump_force - position.y -= 1.0 - -func _stop_moving() -> void: - velocity = Vector2.ZERO +#region Jumping +func _start_jump() -> void: + velocity.y = -jump_power +#endregion + + +#region Missile +func _face_towards_velocity(_delta: float) -> void: + graphics.rotation = Vector2(graphics.scale.x, 0.0).angle_to(velocity) + +func _restore_graphics_rotation() -> void: + graphics.rotation = 0.0 #endregion diff --git a/objects/player/player.gd.uid b/objects/player/player.gd.uid index 0d8bf76..6609e5f 100644 --- a/objects/player/player.gd.uid +++ b/objects/player/player.gd.uid @@ -1 +1 @@ -uid://b5qkdufeuihlh +uid://dhyi4yn0xleoy diff --git a/objects/player/player.tscn b/objects/player/player.tscn index 8aa77de..afd91b7 100644 --- a/objects/player/player.tscn +++ b/objects/player/player.tscn @@ -1,207 +1,287 @@ -[gd_scene load_steps=19 format=3 uid="uid://mh2gfm7iqqsm"] +[gd_scene load_steps=20 format=3 uid="uid://bwtpsjpe2lf7l"] -[ext_resource type="Script" uid="uid://b5qkdufeuihlh" path="res://objects/player/player.gd" id="1_jgave"] -[ext_resource type="Shader" uid="uid://c3wn7vy5wqvyv" path="res://assets/shaders/clean_edge.gdshader" id="2_cpj48"] -[ext_resource type="Texture2D" uid="uid://c71nqfyw4a3v4" path="res://assets/textures/player/capri.png" id="3_27a2c"] -[ext_resource type="Script" uid="uid://cv55s54clajw5" path="res://scripts/spritesheet_animation/spritesheet_animation.gd" id="4_dldqk"] -[ext_resource type="Script" uid="uid://bhrh1qkv7nlyl" path="res://addons/godot_state_charts/state_chart.gd" id="5_yg0e1"] -[ext_resource type="Script" uid="uid://b11v7h3ny6kh1" path="res://addons/godot_state_charts/compound_state.gd" id="6_nf3pt"] -[ext_resource type="Script" uid="uid://cyvphy8py4ntr" path="res://addons/godot_state_charts/atomic_state.gd" id="7_56odx"] -[ext_resource type="Script" uid="uid://rrj3six8lu8p" path="res://addons/godot_state_charts/transition.gd" id="8_pgje5"] -[ext_resource type="Script" uid="uid://b6u7unac5srh0" path="res://addons/godot_state_charts/expression_guard.gd" id="9_ht8un"] -[ext_resource type="Script" uid="uid://rgqnolsaywgc" path="res://addons/godot_state_charts/not_guard.gd" id="10_jkoqe"] +[ext_resource type="Script" uid="uid://dhyi4yn0xleoy" path="res://objects/player/player.gd" id="1_xs4s5"] +[ext_resource type="Texture2D" uid="uid://c71nqfyw4a3v4" path="res://assets/textures/player/capri.png" id="3_trcll"] +[ext_resource type="Script" uid="uid://cv55s54clajw5" path="res://scripts/spritesheet_animation/spritesheet_animation.gd" id="4_bsdw5"] +[ext_resource type="Script" uid="uid://bhrh1qkv7nlyl" path="res://addons/godot_state_charts/state_chart.gd" id="5_bcjtl"] +[ext_resource type="Script" uid="uid://b11v7h3ny6kh1" path="res://addons/godot_state_charts/compound_state.gd" id="6_jnxnd"] +[ext_resource type="Script" uid="uid://rrj3six8lu8p" path="res://addons/godot_state_charts/transition.gd" id="7_rgjdc"] +[ext_resource type="Script" uid="uid://b6u7unac5srh0" path="res://addons/godot_state_charts/expression_guard.gd" id="8_8i2im"] +[ext_resource type="AudioStream" uid="uid://7be7ts3rdegh" path="res://assets/audio/vox/capri_jump.ogg" id="9_8c74o"] +[ext_resource type="Script" uid="uid://cyvphy8py4ntr" path="res://addons/godot_state_charts/atomic_state.gd" id="10_mvu25"] [sub_resource type="CircleShape2D" id="CircleShape2D_tvyy1"] -radius = 6.0208 +radius = 6.0 -[sub_resource type="SeparationRayShape2D" id="SeparationRayShape2D_57odn"] -length = 2.0 +[sub_resource type="Resource" id="Resource_sfpnl"] +resource_name = "Not On Floor" +script = ExtResource("8_8i2im") +expression = "not on_floor" +metadata/_custom_type_script = "uid://b6u7unac5srh0" -[sub_resource type="ShaderMaterial" id="ShaderMaterial_12eq7"] -shader = ExtResource("2_cpj48") -shader_parameter/highestColor = Vector3(1, 1, 1) -shader_parameter/similarThreshold = 0.0 -shader_parameter/lineWidth = 1.0 - -[sub_resource type="Resource" id="Resource_g8pxc"] -resource_name = "On Floor" -script = ExtResource("9_ht8un") -expression = "on_floor" - -[sub_resource type="Resource" id="Resource_4mj4w"] -script = ExtResource("10_jkoqe") -guard = SubResource("Resource_g8pxc") - -[sub_resource type="Resource" id="Resource_kdmd2"] +[sub_resource type="Resource" id="Resource_mq184"] resource_name = "Horizontal Input" -script = ExtResource("9_ht8un") -expression = "horizontal_input" +script = ExtResource("8_8i2im") +expression = "input_dir.x != 0.0" +metadata/_custom_type_script = "uid://b6u7unac5srh0" -[sub_resource type="Resource" id="Resource_p43ft"] -script = ExtResource("10_jkoqe") -guard = SubResource("Resource_kdmd2") +[sub_resource type="Resource" id="Resource_nye2q"] +resource_name = "Horizontal Movement" +script = ExtResource("8_8i2im") +expression = "velocity.x != 0.0" +metadata/_custom_type_script = "uid://b6u7unac5srh0" -[sub_resource type="Resource" id="Resource_g7rrk"] -resource_name = "Downward Velocity" -script = ExtResource("9_ht8un") -expression = "player.velocity.y >= 0.0" +[sub_resource type="Resource" id="Resource_n665q"] +resource_name = "No Horizontal Movement" +script = ExtResource("8_8i2im") +expression = "velocity.x == 0.0" +metadata/_custom_type_script = "uid://b6u7unac5srh0" -[node name="Player" type="CharacterBody2D" node_paths=PackedStringArray("state_chart", "graphics")] +[sub_resource type="Resource" id="Resource_8c74o"] +resource_name = "No Horizontal Input" +script = ExtResource("8_8i2im") +expression = "input_dir.x == 0.0" +metadata/_custom_type_script = "uid://b6u7unac5srh0" + +[sub_resource type="Resource" id="Resource_xs4s5"] +resource_name = "Opposite Input" +script = ExtResource("8_8i2im") +expression = "input_dir.x != signf(velocity.x)" +metadata/_custom_type_script = "uid://b6u7unac5srh0" + +[sub_resource type="Resource" id="Resource_e1cbd"] +resource_name = "Aligned Input" +script = ExtResource("8_8i2im") +expression = "input_dir.x == signf(velocity.x)" +metadata/_custom_type_script = "uid://b6u7unac5srh0" + +[sub_resource type="Resource" id="Resource_163ft"] +resource_name = "On Floor" +script = ExtResource("8_8i2im") +expression = "on_floor" +metadata/_custom_type_script = "uid://b6u7unac5srh0" + +[sub_resource type="Resource" id="Resource_whx0j"] +resource_name = "Falling Down" +script = ExtResource("8_8i2im") +expression = "velocity.y > 0.0" +metadata/_custom_type_script = "uid://b6u7unac5srh0" + +[node name="Player" type="CharacterBody2D" node_paths=PackedStringArray("state_chart", "graphics", "run_animation")] collision_layer = 16 collision_mask = 3 floor_snap_length = 3.0 -script = ExtResource("1_jgave") +script = ExtResource("1_xs4s5") +run_acceleration = 150.0 +max_run_speed = 100.0 +turn_acceleration = 250.0 +stopping_force = 200.0 gravity = 450.0 -run_speed = 100.0 -jump_force = 180.0 +jump_power = 180.0 state_chart = NodePath("StateChart") graphics = NodePath("Graphics") +run_animation = NodePath("Graphics/Sprite/Run") [node name="CollisionShape" type="CollisionShape2D" parent="."] position = Vector2(0, -6) shape = SubResource("CircleShape2D_tvyy1") debug_color = Color(3.32102e-06, 0.648976, 0.161954, 0.42) -[node name="SeparationShapeRight" type="CollisionShape2D" parent="."] -position = Vector2(5, -2) -shape = SubResource("SeparationRayShape2D_57odn") -debug_color = Color(0.850748, 0.32846, 0.463602, 0.42) - [node name="Graphics" type="Node2D" parent="."] +position = Vector2(0, -6) [node name="Sprite" type="Sprite2D" parent="Graphics"] -material = SubResource("ShaderMaterial_12eq7") -texture = ExtResource("3_27a2c") -offset = Vector2(0, -8) +texture = ExtResource("3_trcll") +offset = Vector2(0, -2) hframes = 4 vframes = 4 region_rect = Rect2(0, 0, 64, 64) [node name="Idle" type="Node" parent="Graphics/Sprite"] -script = ExtResource("4_dldqk") +script = ExtResource("4_bsdw5") [node name="Bark" type="Node" parent="Graphics/Sprite"] -script = ExtResource("4_dldqk") +script = ExtResource("4_bsdw5") first_frame = Vector2i(1, 0) -[node name="Run" type="Node" parent="Graphics/Sprite"] -script = ExtResource("4_dldqk") -first_frame = Vector2i(0, 1) -frames = 3 -fps = 8.0 -loop = true - -[node name="Jump" type="Node" parent="Graphics/Sprite"] -script = ExtResource("4_dldqk") +[node name="Skid" type="Node" parent="Graphics/Sprite"] +script = ExtResource("4_bsdw5") first_frame = Vector2i(2, 0) +[node name="Run" type="Node" parent="Graphics/Sprite"] +script = ExtResource("4_bsdw5") +first_frame = Vector2i(0, 1) +frames = 4 +fps = 16.0 +loop = true + [node name="Fall" type="Node" parent="Graphics/Sprite"] -script = ExtResource("4_dldqk") -first_frame = Vector2i(3, 0) +script = ExtResource("4_bsdw5") +first_frame = Vector2i(0, 2) + +[node name="Jump" type="Node" parent="Graphics/Sprite"] +script = ExtResource("4_bsdw5") +first_frame = Vector2i(1, 2) + +[node name="Missile" type="Node" parent="Graphics/Sprite"] +script = ExtResource("4_bsdw5") +first_frame = Vector2i(2, 2) + +[node name="Sounds" type="Node" parent="."] + +[node name="Voice" type="AudioStreamPlayer" parent="Sounds"] +stream = ExtResource("9_8c74o") +bus = &"Capri" [node name="StateChart" type="Node" parent="."] -script = ExtResource("5_yg0e1") +script = ExtResource("5_bcjtl") track_in_editor = true initial_expression_properties = { -"horizontal_input": false, -"on_floor": true, -"player": null +&"input_dir": Vector2(0, 0), +&"on_floor": false, +&"velocity": Vector2(0, 0) } [node name="Root" type="Node" parent="StateChart"] -script = ExtResource("6_nf3pt") +script = ExtResource("6_jnxnd") initial_state = NodePath("Grounded") [node name="Grounded" type="Node" parent="StateChart/Root"] -script = ExtResource("6_nf3pt") +editor_description = "Player is standing on a floor." +script = ExtResource("6_jnxnd") initial_state = NodePath("Standing") -[node name="When Not On Floor" type="Node" parent="StateChart/Root/Grounded"] -script = ExtResource("8_pgje5") -to = NodePath("../../Airborne") -guard = SubResource("Resource_4mj4w") -delay_in_seconds = "0.0" - -[node name="On ice_touched" type="Node" parent="StateChart/Root/Grounded"] -script = ExtResource("8_pgje5") -to = NodePath("../Sliding") -event = &"ice_touched" -delay_in_seconds = "0.0" - -[node name="On jump_pressed" type="Node" parent="StateChart/Root/Grounded"] -script = ExtResource("8_pgje5") +[node name="on JumpPressed" type="Node" parent="StateChart/Root/Grounded"] +script = ExtResource("7_rgjdc") to = NodePath("../../Airborne/Jumping") event = &"jump_pressed" delay_in_seconds = "0.0" -[node name="Standing" type="Node" parent="StateChart/Root/Grounded"] -script = ExtResource("7_56odx") - -[node name="If Horizontal Input" type="Node" parent="StateChart/Root/Grounded/Standing"] -script = ExtResource("8_pgje5") -to = NodePath("../../Running") -guard = SubResource("Resource_kdmd2") +[node name="if NotOnFloor" type="Node" parent="StateChart/Root/Grounded"] +editor_description = "Transition to falling state if not touching a floor." +script = ExtResource("7_rgjdc") +to = NodePath("../../Airborne/Falling") +event = &"tick" +guard = SubResource("Resource_sfpnl") delay_in_seconds = "0.0" -[node name="Sliding" type="Node" parent="StateChart/Root/Grounded"] -script = ExtResource("7_56odx") +[node name="Standing" type="Node" parent="StateChart/Root/Grounded"] +editor_description = "Player is standing still or coming to a stop." +script = ExtResource("6_jnxnd") +initial_state = NodePath("Idle") +metadata/_custom_type_script = "uid://b11v7h3ny6kh1" -[node name="On ground_touched" type="Node" parent="StateChart/Root/Grounded/Sliding"] -script = ExtResource("8_pgje5") -to = NodePath("../../Standing") -event = &"ground_touched" +[node name="if WalkHeld" type="Node" parent="StateChart/Root/Grounded/Standing"] +editor_description = "Transition to running state if a horizontal direction is being held." +script = ExtResource("7_rgjdc") +to = NodePath("../../Running") +guard = SubResource("Resource_mq184") +delay_in_seconds = "0.0" + +[node name="Idle" type="Node" parent="StateChart/Root/Grounded/Standing"] +editor_description = "Player is stopped, standing still." +script = ExtResource("10_mvu25") + +[node name="if Moving" type="Node" parent="StateChart/Root/Grounded/Standing/Idle"] +editor_description = "Transition to stopping state if the player has horizontal velocity." +script = ExtResource("7_rgjdc") +to = NodePath("../../Stopping") +guard = SubResource("Resource_nye2q") +delay_in_seconds = "0.0" + +[node name="Stopping" type="Node" parent="StateChart/Root/Grounded/Standing"] +editor_description = "Player is slowing to a stop naturally." +script = ExtResource("10_mvu25") + +[node name="if Stopped" type="Node" parent="StateChart/Root/Grounded/Standing/Stopping"] +editor_description = "Transition to idle state when the player has come to a full stop." +script = ExtResource("7_rgjdc") +to = NodePath("../../Idle") +guard = SubResource("Resource_n665q") delay_in_seconds = "0.0" [node name="Running" type="Node" parent="StateChart/Root/Grounded"] -script = ExtResource("7_56odx") +editor_description = "Player is accelerating in the held input direction." +script = ExtResource("10_mvu25") -[node name="If No Horizontal Input" type="Node" parent="StateChart/Root/Grounded/Running"] -script = ExtResource("8_pgje5") +[node name="if WalkReleased" type="Node" parent="StateChart/Root/Grounded/Running"] +editor_description = "Transition to standing state if no input direction is held." +script = ExtResource("7_rgjdc") to = NodePath("../../Standing") -guard = SubResource("Resource_p43ft") +guard = SubResource("Resource_8c74o") delay_in_seconds = "0.0" -[node name="Barking" type="Node" parent="StateChart/Root/Grounded"] -script = ExtResource("7_56odx") +[node name="if OppositeInput" type="Node" parent="StateChart/Root/Grounded/Running"] +editor_description = "Transition to turning state if the held input dir is opposite the horizontal velocity." +script = ExtResource("7_rgjdc") +to = NodePath("../../Turning") +guard = SubResource("Resource_xs4s5") +delay_in_seconds = "0.0" -[node name="On Timeout" type="Node" parent="StateChart/Root/Grounded/Barking"] -script = ExtResource("8_pgje5") +[node name="Turning" type="Node" parent="StateChart/Root/Grounded"] +editor_description = "Player is more quickly accelerating in the held input direction to slow and turn around." +script = ExtResource("10_mvu25") + +[node name="if WalkReleased" type="Node" parent="StateChart/Root/Grounded/Turning"] +editor_description = "Transition to standing state if no input direction is held." +script = ExtResource("7_rgjdc") to = NodePath("../../Standing") -delay_in_seconds = "0.5" +guard = SubResource("Resource_8c74o") +delay_in_seconds = "0.0" + +[node name="if AlignedInput" type="Node" parent="StateChart/Root/Grounded/Turning"] +editor_description = "Transition to running state when input direction matches horizontal velocity." +script = ExtResource("7_rgjdc") +to = NodePath("../../Running") +guard = SubResource("Resource_e1cbd") +delay_in_seconds = "0.0" [node name="Airborne" type="Node" parent="StateChart/Root"] -script = ExtResource("6_nf3pt") +editor_description = "Player is in the air." +script = ExtResource("6_jnxnd") initial_state = NodePath("Falling") -[node name="Jumping" type="Node" parent="StateChart/Root/Airborne"] -script = ExtResource("7_56odx") - -[node name="When Jump Peaked" type="Node" parent="StateChart/Root/Airborne/Jumping"] -script = ExtResource("8_pgje5") -to = NodePath("../../Falling") -guard = SubResource("Resource_g7rrk") +[node name="if OnFloor" type="Node" parent="StateChart/Root/Airborne"] +editor_description = "Transition to grounded state if touching a floor." +script = ExtResource("7_rgjdc") +to = NodePath("../../Grounded") +event = &"tick" +guard = SubResource("Resource_163ft") delay_in_seconds = "0.0" [node name="Falling" type="Node" parent="StateChart/Root/Airborne"] -script = ExtResource("7_56odx") +editor_description = "Player is falling down." +script = ExtResource("10_mvu25") -[node name="When On Floor" type="Node" parent="StateChart/Root/Airborne/Falling"] -script = ExtResource("8_pgje5") -to = NodePath("../../../Grounded") -guard = SubResource("Resource_g8pxc") +[node name="Jumping" type="Node" parent="StateChart/Root/Airborne"] +editor_description = "Player has jumped and is rising." +script = ExtResource("10_mvu25") + +[node name="if DownVelocity" type="Node" parent="StateChart/Root/Airborne/Jumping"] +editor_description = "Transition to the falling state if moving downwards." +script = ExtResource("7_rgjdc") +to = NodePath("../../Falling") +guard = SubResource("Resource_whx0j") delay_in_seconds = "0.0" -[node name="Voice" type="AudioStreamPlayer" parent="."] -unique_name_in_owner = true -bus = &"Capri" +[node name="Missile" type="Node" parent="StateChart/Root/Airborne"] +editor_description = "Player is hurtling through the air and ricocheting off of surfaces." +script = ExtResource("10_mvu25") -[connection signal="state_entered" from="StateChart/Root/Grounded/Standing" to="." method="_stop_moving"] -[connection signal="state_entered" from="StateChart/Root/Grounded/Standing" to="Graphics/Sprite/Idle" method="play"] -[connection signal="state_entered" from="StateChart/Root/Grounded/Sliding" to="Graphics/Sprite/Idle" method="play"] +[connection signal="state_entered" from="StateChart/Root/Grounded/Standing/Idle" to="Graphics/Sprite/Idle" method="play"] +[connection signal="state_entered" from="StateChart/Root/Grounded/Standing/Stopping" to="Graphics/Sprite/Run" method="play"] +[connection signal="state_physics_processing" from="StateChart/Root/Grounded/Standing/Stopping" to="." method="_scale_run_animation"] +[connection signal="state_physics_processing" from="StateChart/Root/Grounded/Standing/Stopping" to="." method="_slow_to_stop"] [connection signal="state_entered" from="StateChart/Root/Grounded/Running" to="Graphics/Sprite/Run" method="play"] -[connection signal="state_physics_processing" from="StateChart/Root/Grounded/Running" to="." method="_process_run"] -[connection signal="state_entered" from="StateChart/Root/Grounded/Barking" to="Graphics/Sprite/Bark" method="play"] -[connection signal="state_physics_processing" from="StateChart/Root/Airborne" to="." method="_process_gravity"] -[connection signal="state_entered" from="StateChart/Root/Airborne/Jumping" to="." method="_do_jump"] -[connection signal="state_entered" from="StateChart/Root/Airborne/Jumping" to="Graphics/Sprite/Jump" method="play"] +[connection signal="state_physics_processing" from="StateChart/Root/Grounded/Running" to="." method="_scale_run_animation"] +[connection signal="state_physics_processing" from="StateChart/Root/Grounded/Running" to="." method="_apply_run_acceleration"] +[connection signal="state_entered" from="StateChart/Root/Grounded/Turning" to="Graphics/Sprite/Skid" method="play"] +[connection signal="state_physics_processing" from="StateChart/Root/Grounded/Turning" to="." method="_apply_turn_acceleration"] +[connection signal="state_physics_processing" from="StateChart/Root/Airborne" to="." method="_apply_gravity"] [connection signal="state_entered" from="StateChart/Root/Airborne/Falling" to="Graphics/Sprite/Fall" method="play"] +[connection signal="state_entered" from="StateChart/Root/Airborne/Jumping" to="." method="_start_jump"] +[connection signal="state_entered" from="StateChart/Root/Airborne/Jumping" to="Graphics/Sprite/Jump" method="play"] +[connection signal="state_entered" from="StateChart/Root/Airborne/Jumping" to="Sounds/Voice" method="play"] +[connection signal="state_entered" from="StateChart/Root/Airborne/Missile" to="Graphics/Sprite/Missile" method="play"] +[connection signal="state_exited" from="StateChart/Root/Airborne/Missile" to="." method="_restore_graphics_rotation"] +[connection signal="state_physics_processing" from="StateChart/Root/Airborne/Missile" to="." method="_face_towards_velocity"]