Compare commits
3 commits
021bf19153
...
20f35ab240
Author | SHA1 | Date | |
---|---|---|---|
20f35ab240 | |||
d77ed8a49f | |||
60a6df808e |
16 changed files with 335 additions and 573 deletions
|
@ -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"]
|
||||
|
@ -85,4 +85,4 @@ scale = Vector2(1.09184, 27.4543)
|
|||
position = Vector2(96, 176)
|
||||
|
||||
[node name="Spring2" parent="." instance=ExtResource("9_dtd3x")]
|
||||
position = Vector2(80, 88)
|
||||
position = Vector2(96, 88)
|
||||
|
|
|
@ -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"]
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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"]
|
||||
|
|
|
@ -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"]
|
||||
|
|
|
@ -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"]
|
||||
|
|
|
@ -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
|
|
@ -1 +0,0 @@
|
|||
uid://dhyi4yn0xleoy
|
|
@ -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"]
|
|
@ -2,70 +2,102 @@ 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:
|
||||
@onready var start_position: Vector2 = global_position
|
||||
|
||||
|
||||
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")
|
||||
|
||||
|
||||
func kill() -> void:
|
||||
state_chart.send_event(&"killed")
|
||||
|
||||
|
||||
func launch(impulse: Vector2) -> void:
|
||||
velocity = impulse
|
||||
state_chart.send_event(&"launched")
|
||||
|
||||
|
||||
#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
|
||||
#region Jumping
|
||||
func _start_jump() -> void:
|
||||
velocity.y = -jump_power
|
||||
#endregion
|
||||
|
||||
func _stop_moving() -> void:
|
||||
|
||||
#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
|
||||
|
||||
|
||||
#region Death
|
||||
func _reset_position() -> void:
|
||||
global_position = start_position
|
||||
velocity = Vector2.ZERO
|
||||
#endregion
|
||||
|
|
|
@ -1 +1 @@
|
|||
uid://b5qkdufeuihlh
|
||||
uid://dhyi4yn0xleoy
|
||||
|
|
|
@ -1,207 +1,306 @@
|
|||
[gd_scene load_steps=19 format=3 uid="uid://mh2gfm7iqqsm"]
|
||||
[gd_scene load_steps=21 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="AudioStream" uid="uid://dfa1ev73rsc7g" path="res://assets/audio/vox/capri_die.ogg" id="5_bi5m7"]
|
||||
[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 = 200.0
|
||||
max_run_speed = 100.0
|
||||
turn_acceleration = 300.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="Death" type="AudioStreamPlayer" parent="Sounds"]
|
||||
stream = ExtResource("5_bi5m7")
|
||||
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="on Killed" type="Node" parent="StateChart/Root"]
|
||||
script = ExtResource("7_rgjdc")
|
||||
to = NodePath("../Grounded")
|
||||
event = &"killed"
|
||||
delay_in_seconds = "0.0"
|
||||
|
||||
[node name="on Launched" type="Node" parent="StateChart/Root"]
|
||||
script = ExtResource("7_rgjdc")
|
||||
to = NodePath("../Airborne/Missile")
|
||||
event = &"launched"
|
||||
delay_in_seconds = "0.0"
|
||||
|
||||
[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="taken" from="StateChart/Root/on Killed" to="." method="_reset_position"]
|
||||
[connection signal="taken" from="StateChart/Root/on Killed" to="Sounds/Death" 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"]
|
||||
|
|
|
@ -13,6 +13,4 @@ func _process(delta: float) -> void:
|
|||
|
||||
func _on_area_2d_body_shape_entered(body_rid: RID, body: Node2D, body_shape_index: int, local_shape_index: int) -> void:
|
||||
if body is Player:
|
||||
body.position = body.start_position
|
||||
body.voice.stream = load("res://assets/audio/vox/capri_die.ogg")
|
||||
body.voice.play()
|
||||
body.kill()
|
||||
|
|
|
@ -1,23 +1,26 @@
|
|||
extends Node2D
|
||||
|
||||
@export var bounce_power = 240.0
|
||||
|
||||
# Called when the node enters the scene tree for the first time.
|
||||
func _ready() -> void:
|
||||
pass # Replace with function body.
|
||||
|
||||
|
||||
# Called every frame. 'delta' is the elapsed time since the previous frame.
|
||||
func _process(delta: float) -> void:
|
||||
pass
|
||||
|
||||
@export var horizontal_boost = 20.0
|
||||
|
||||
func _on_area_2d_body_entered(body: Node2D) -> void:
|
||||
if body is Player:
|
||||
if body.velocity.y == 0:
|
||||
body.velocity.x = (body.jump_force * 1.5) * sign(-body.velocity.x)
|
||||
else:
|
||||
body.velocity.y = (body.jump_force * 1.5) * sign(-body.velocity.y)
|
||||
body.velocity.x += body.graphics.scale.x * 20.0
|
||||
var dir = Vector2(
|
||||
1.0 if body.velocity.x >= 0.0 else -1.0,
|
||||
-1.0 if body.velocity.y >= 0.0 else 1.0,
|
||||
)
|
||||
|
||||
body.launch(Vector2(
|
||||
body.velocity.x + (dir.x * horizontal_boost),
|
||||
dir.y * bounce_power
|
||||
))
|
||||
|
||||
#body.velocity.y = bounce_power * signf(-body.velocity.y)
|
||||
#body.velocity.x += signf(body.velocity.x) * 20.0
|
||||
##if body.velocity.y == 0:
|
||||
##body.velocity.x = (body.jump_force * 1.5) * sign(-body.velocity.x)
|
||||
##else:
|
||||
##body.velocity.y = (body.jump_force * 1.5) * sign(-body.velocity.y)
|
||||
##body.velocity.x += body.graphics.scale.x * 20.0
|
||||
%AudioStreamPlayer.play()
|
||||
%AnimationPlayer.play("bounce")
|
||||
|
|
|
@ -55,7 +55,7 @@ hframes = 4
|
|||
[node name="AnimationPlayer" type="AnimationPlayer" parent="."]
|
||||
unique_name_in_owner = true
|
||||
libraries = {
|
||||
"": SubResource("AnimationLibrary_2p5yk")
|
||||
&"": SubResource("AnimationLibrary_2p5yk")
|
||||
}
|
||||
|
||||
[node name="Area2D" type="Area2D" parent="."]
|
||||
|
|
|
@ -11,7 +11,7 @@ config_version=5
|
|||
[application]
|
||||
|
||||
config/name="Capri"
|
||||
run/main_scene="uid://cccb8wltupasj"
|
||||
run/main_scene="uid://byx8blpt2i8hx"
|
||||
config/features=PackedStringArray("4.4", "GL Compatibility")
|
||||
config/icon="res://icon.svg"
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue