diff --git a/objects/player/player.gd b/objects/player/player.gd index 27937d5..4047cf1 100644 --- a/objects/player/player.gd +++ b/objects/player/player.gd @@ -53,6 +53,7 @@ onready var death_splatter_position: Position2D = $"%DeathSplatterPosition" onready var pushable_detector: RayCast2D = $"%PushableDetector" onready var oxygen_timer = $OxygenTimer onready var low_oxygen_label = $LowOxygenLabel +onready var edge_detector = $Graphics/EdgeDetector # OVERRIDES # func _ready() -> void: @@ -257,12 +258,17 @@ func _on_Respawn_state_entered() -> void: graphics.visible = true state_chart.call_deferred("send_event", "get_real") +func _on_Edge_state_entered(): + animation_player.play("edge") # STATE PROCESSING # ## when on ground func _process_grounded(delta: float) -> void: # make sure is_on_floor detected still velocity.y = 1.0 + #play edge sprite if hanging of edge + if !edge_detector.is_colliding(): + state_chart.send_event("edge") ## called when player can move left and rightpass # Repass # Rpass # Replace with function body.eplace with function body.place with function body. func _process_horizontal_movement(delta: float) -> void: @@ -395,3 +401,5 @@ func _on_Ducking_event_received(event): func _on_OxygenTimer_timeout(): if underwater: die() + + diff --git a/objects/player/player.tscn b/objects/player/player.tscn index 3dedb22..1835d2a 100644 --- a/objects/player/player.tscn +++ b/objects/player/player.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=48 format=2] +[gd_scene load_steps=50 format=2] [ext_resource path="res://objects/player/player.gd" type="Script" id=1] [ext_resource path="res://graphics/player/palettes/default.png" type="Texture" id=2] @@ -26,6 +26,7 @@ [ext_resource path="res://graphics/player/sg_duck.png" type="Texture" id=24] [ext_resource path="res://ui/2ndpuberty_outline.tres" type="Material" id=25] [ext_resource path="res://graphics/player/sg_jump_ladder.png" type="Texture" id=26] +[ext_resource path="res://graphics/player/sg_edge.png" type="Texture" id=27] [sub_resource type="ShaderMaterial" id=1] shader = ExtResource( 3 ) @@ -308,6 +309,59 @@ tracks/3/keys = { "values": [ 0.0 ] } +[sub_resource type="Animation" id=22] +resource_name = "edge" +length = 0.4 +loop = true +tracks/0/type = "value" +tracks/0/path = NodePath("Graphics/Sprite:texture") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/keys = { +"times": PoolRealArray( 0 ), +"transitions": PoolRealArray( 1 ), +"update": 1, +"values": [ ExtResource( 27 ) ] +} +tracks/1/type = "value" +tracks/1/path = NodePath("Graphics/Sprite:hframes") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/keys = { +"times": PoolRealArray( 0 ), +"transitions": PoolRealArray( 1 ), +"update": 1, +"values": [ 4 ] +} +tracks/2/type = "value" +tracks/2/path = NodePath("Graphics/Sprite:frame") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/keys = { +"times": PoolRealArray( 0, 0.1, 0.2, 0.3 ), +"transitions": PoolRealArray( 1, 1, 1, 1 ), +"update": 1, +"values": [ 0, 1, 2, 3 ] +} +tracks/3/type = "value" +tracks/3/path = NodePath("Graphics/Sprite:rotation_degrees") +tracks/3/interp = 1 +tracks/3/loop_wrap = true +tracks/3/imported = false +tracks/3/enabled = true +tracks/3/keys = { +"times": PoolRealArray( 0 ), +"transitions": PoolRealArray( 1 ), +"update": 0, +"values": [ 0.0 ] +} + [sub_resource type="Animation" id=15] resource_name = "fall" length = 0.001 @@ -927,6 +981,11 @@ position = Vector2( 3, -4 ) cast_to = Vector2( 1, 0 ) collision_mask = 4 +[node name="EdgeDetector" type="RayCast2D" parent="Graphics"] +position = Vector2( 1, 0 ) +enabled = true +cast_to = Vector2( 0, 4 ) + [node name="BodyShape" type="CollisionShape2D" parent="."] position = Vector2( 0.5, -5 ) shape = SubResource( 2 ) @@ -960,6 +1019,7 @@ anims/blink = SubResource( 18 ) anims/climb = SubResource( 9 ) anims/double_jump = SubResource( 12 ) anims/duck = SubResource( 20 ) +anims/edge = SubResource( 22 ) anims/fall = SubResource( 15 ) anims/fall_scared = SubResource( 14 ) anims/idle = SubResource( 6 ) @@ -1050,6 +1110,11 @@ script = ExtResource( 10 ) to = NodePath("../../Walking") event = "walk_start" +[node name="On Edge" type="Node" parent="StateChart/Root/Movement/Grounded/CanWalk/Still"] +script = ExtResource( 10 ) +to = NodePath("../../Edge") +event = "edge" + [node name="On Timeout" type="Node" parent="StateChart/Root/Movement/Grounded/CanWalk/Still"] script = ExtResource( 10 ) to = NodePath("../../Blinking") @@ -1085,6 +1150,14 @@ script = ExtResource( 10 ) to = NodePath("../../Walking") event = "walk_start" +[node name="Edge" type="Node" parent="StateChart/Root/Movement/Grounded/CanWalk"] +script = ExtResource( 11 ) + +[node name="On WalkStart" type="Node" parent="StateChart/Root/Movement/Grounded/CanWalk/Edge"] +script = ExtResource( 10 ) +to = NodePath("../../Walking") +event = "walk_start" + [node name="Ducking" type="Node" parent="StateChart/Root/Movement/Grounded"] script = ExtResource( 11 ) @@ -1337,6 +1410,7 @@ align = 1 [connection signal="state_entered" from="StateChart/Root/Movement/Grounded/CanWalk/Walking" to="." method="_on_Walking_state_entered"] [connection signal="state_entered" from="StateChart/Root/Movement/Grounded/CanWalk/Blinking" to="." method="_on_Blinking_state_entered"] [connection signal="state_entered" from="StateChart/Root/Movement/Grounded/CanWalk/Stimming" to="." method="_on_Stimming_state_entered"] +[connection signal="state_entered" from="StateChart/Root/Movement/Grounded/CanWalk/Edge" to="." method="_on_Edge_state_entered"] [connection signal="event_received" from="StateChart/Root/Movement/Grounded/Ducking" to="." method="_on_Ducking_event_received"] [connection signal="state_entered" from="StateChart/Root/Movement/Grounded/Ducking" to="." method="_on_Ducking_state_entered"] [connection signal="state_entered" from="StateChart/Root/Movement/Grounded/Shooting" to="." method="_on_Shooting_state_entered"]