diff --git a/assets/graphics/environment/terrain/terrain_32x32.png b/assets/graphics/environment/terrain/terrain_32x32.png new file mode 100644 index 0000000..ddf1eaf Binary files /dev/null and b/assets/graphics/environment/terrain/terrain_32x32.png differ diff --git a/assets/graphics/environment/terrain/terrain_32x32.png.import b/assets/graphics/environment/terrain/terrain_32x32.png.import new file mode 100644 index 0000000..e18d508 --- /dev/null +++ b/assets/graphics/environment/terrain/terrain_32x32.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bior2r1hv1q0s" +path="res://.godot/imported/terrain_32x32.png-fe460cab7dde4bb016d8f6a0ab818dc6.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/graphics/environment/terrain/terrain_32x32.png" +dest_files=["res://.godot/imported/terrain_32x32.png-fe460cab7dde4bb016d8f6a0ab818dc6.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/graphics/player/damage/damage_48x48.png b/assets/graphics/player/damage/damage_48x48.png new file mode 100644 index 0000000..57d8783 Binary files /dev/null and b/assets/graphics/player/damage/damage_48x48.png differ diff --git a/assets/graphics/player/damage/damage_48x48.png.import b/assets/graphics/player/damage/damage_48x48.png.import new file mode 100644 index 0000000..5fa6b03 --- /dev/null +++ b/assets/graphics/player/damage/damage_48x48.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bd4aa0eer35ui" +path="res://.godot/imported/damage_48x48.png-63fa35022b577dc98c6569c653ec52c9.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/graphics/player/damage/damage_48x48.png" +dest_files=["res://.godot/imported/damage_48x48.png-63fa35022b577dc98c6569c653ec52c9.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/graphics/player/idle/idle_48x48.png b/assets/graphics/player/idle/idle_48x48.png new file mode 100644 index 0000000..b618511 Binary files /dev/null and b/assets/graphics/player/idle/idle_48x48.png differ diff --git a/assets/graphics/player/idle/idle_48x48.png.import b/assets/graphics/player/idle/idle_48x48.png.import new file mode 100644 index 0000000..5457432 --- /dev/null +++ b/assets/graphics/player/idle/idle_48x48.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://c6srnfwqlu423" +path="res://.godot/imported/idle_48x48.png-386294ed1465b9d3e1cd36d696e82885.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/graphics/player/idle/idle_48x48.png" +dest_files=["res://.godot/imported/idle_48x48.png-386294ed1465b9d3e1cd36d696e82885.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/graphics/player/jump/jump_48x48.png b/assets/graphics/player/jump/jump_48x48.png new file mode 100644 index 0000000..dff105c Binary files /dev/null and b/assets/graphics/player/jump/jump_48x48.png differ diff --git a/assets/graphics/player/jump/jump_48x48.png.import b/assets/graphics/player/jump/jump_48x48.png.import new file mode 100644 index 0000000..e60c552 --- /dev/null +++ b/assets/graphics/player/jump/jump_48x48.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://ccjcmrx3honb6" +path="res://.godot/imported/jump_48x48.png-bf0142e41fd0e954ed29f7ed281b5f22.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/graphics/player/jump/jump_48x48.png" +dest_files=["res://.godot/imported/jump_48x48.png-bf0142e41fd0e954ed29f7ed281b5f22.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/graphics/player/run/run_48x48.png b/assets/graphics/player/run/run_48x48.png new file mode 100644 index 0000000..aca5b55 Binary files /dev/null and b/assets/graphics/player/run/run_48x48.png differ diff --git a/assets/graphics/player/run/run_48x48.png.import b/assets/graphics/player/run/run_48x48.png.import new file mode 100644 index 0000000..4f90d29 --- /dev/null +++ b/assets/graphics/player/run/run_48x48.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://lckj1itg3hkb" +path="res://.godot/imported/run_48x48.png-6f60298bcd5635d2d4c5d9312780f675.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/graphics/player/run/run_48x48.png" +dest_files=["res://.godot/imported/run_48x48.png-6f60298bcd5635d2d4c5d9312780f675.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/scenes/game.tscn b/scenes/game.tscn index 3f7c0b6..eab87fe 100644 --- a/scenes/game.tscn +++ b/scenes/game.tscn @@ -1,10 +1,66 @@ -[gd_scene load_steps=8 format=3 uid="uid://dk3bbsqf7yi08"] +[gd_scene load_steps=11 format=3 uid="uid://dk3bbsqf7yi08"] [ext_resource type="Script" uid="uid://c3o8iur48idhr" path="res://scripts/gamecontroller.gd" id="1_lnu2h"] [ext_resource type="Script" uid="uid://vi7u52xttkpb" path="res://scripts/scene_manager.gd" id="2_iywne"] [ext_resource type="PackedScene" uid="uid://by6fag0gnv0r4" path="res://scenes/crate.tscn" id="2_lbhrr"] [ext_resource type="PackedScene" uid="uid://d4db6ttyltd56" path="res://scenes/player.tscn" id="2_lnu2h"] [ext_resource type="PackedScene" uid="uid://e5y4obsl2kcv" path="res://scenes/trigger.tscn" id="2_yqjtg"] +[ext_resource type="Texture2D" uid="uid://bior2r1hv1q0s" path="res://assets/graphics/environment/terrain/terrain_32x32.png" id="3_p57ef"] + +[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_u5sy4"] +texture = ExtResource("3_p57ef") +texture_region_size = Vector2i(32, 32) +0:0/0 = 0 +1:0/0 = 0 +2:0/0 = 0 +4:0/0 = 0 +6:0/0 = 0 +7:0/0 = 0 +9:0/0 = 0 +10:0/0 = 0 +12:0/0 = 0 +13:0/0 = 0 +15:0/0 = 0 +0:1/0 = 0 +1:1/0 = 0 +2:1/0 = 0 +4:1/0 = 0 +6:1/0 = 0 +7:1/0 = 0 +9:1/0 = 0 +10:1/0 = 0 +12:1/0 = 0 +13:1/0 = 0 +15:1/0 = 0 +16:1/0 = 0 +0:2/0 = 0 +1:2/0 = 0 +2:2/0 = 0 +4:2/0 = 0 +6:3/0 = 0 +7:3/0 = 0 +9:3/0 = 0 +10:3/0 = 0 +12:3/0 = 0 +13:3/0 = 0 +15:3/0 = 0 +16:3/0 = 0 +0:4/0 = 0 +1:4/0 = 0 +2:4/0 = 0 +4:4/0 = 0 +6:4/0 = 0 +7:4/0 = 0 +9:4/0 = 0 +10:4/0 = 0 +12:4/0 = 0 +13:4/0 = 0 +15:4/0 = 0 +16:4/0 = 0 + +[sub_resource type="TileSet" id="TileSet_gee14"] +tile_size = Vector2i(32, 32) +sources/0 = SubResource("TileSetAtlasSource_u5sy4") [sub_resource type="RectangleShape2D" id="RectangleShape2D_8cj0n"] size = Vector2(144, 20) @@ -18,8 +74,15 @@ script = ExtResource("1_lnu2h") unique_name_in_owner = true script = ExtResource("2_iywne") +[node name="TileMapLayer" type="TileMapLayer" parent="."] +texture_filter = 1 +position = Vector2(0, 8) +tile_map_data = PackedByteArray(0, 0, 13, 0, 10, 0, 0, 0, 4, 0, 4, 0, 0, 0, 14, 0, 10, 0, 0, 0, 4, 0, 4, 0, 0, 0, 15, 0, 10, 0, 0, 0, 4, 0, 4, 0, 0, 0, 16, 0, 10, 0, 0, 0, 4, 0, 4, 0, 0, 0, 17, 0, 10, 0, 0, 0, 4, 0, 4, 0, 0, 0) +tile_set = SubResource("TileSet_gee14") + [node name="StaticBody2D" type="StaticBody2D" parent="."] -position = Vector2(498, 356) +position = Vector2(496, 345) +scale = Vector2(1.07507, 1.58955) metadata/_edit_group_ = true [node name="CollisionShape2D" type="CollisionShape2D" parent="StaticBody2D"] @@ -39,9 +102,12 @@ metadata/_edit_group_ = true shape = SubResource("WorldBoundaryShape2D_8cj0n") [node name="player" parent="." instance=ExtResource("2_lnu2h")] -position = Vector2(472, 333) +position = Vector2(478, 301) -[node name="Area2D" parent="." instance=ExtResource("2_yqjtg")] -position = Vector2(494, 403) +[node name="triggers" type="Node2D" parent="."] -[connection signal="areaTriggerSignal" from="Area2D" to="." method="_on_trigger"] +[node name="playerHurt" parent="triggers" instance=ExtResource("2_yqjtg")] +position = Vector2(493, 422) +effect = "player_hurt" + +[connection signal="areaTriggerSignal" from="triggers/playerHurt" to="." method="_on_trigger"] diff --git a/scenes/player.tscn b/scenes/player.tscn index 095c563..6c7bc6b 100644 --- a/scenes/player.tscn +++ b/scenes/player.tscn @@ -1,9 +1,216 @@ -[gd_scene load_steps=3 format=3 uid="uid://d4db6ttyltd56"] +[gd_scene load_steps=33 format=3 uid="uid://d4db6ttyltd56"] [ext_resource type="Script" uid="uid://bg8hstdeqf43x" path="res://scripts/player.gd" id="1_3vyb7"] +[ext_resource type="Texture2D" uid="uid://ccjcmrx3honb6" path="res://assets/graphics/player/jump/jump_48x48.png" id="2_dqkch"] +[ext_resource type="Texture2D" uid="uid://c6srnfwqlu423" path="res://assets/graphics/player/idle/idle_48x48.png" id="2_g2els"] +[ext_resource type="Texture2D" uid="uid://bd4aa0eer35ui" path="res://assets/graphics/player/damage/damage_48x48.png" id="2_qlg0r"] +[ext_resource type="Texture2D" uid="uid://lckj1itg3hkb" path="res://assets/graphics/player/run/run_48x48.png" id="3_qhqgy"] [sub_resource type="CircleShape2D" id="CircleShape2D_8cj0n"] +[sub_resource type="AtlasTexture" id="AtlasTexture_l71n6"] +atlas = ExtResource("2_qlg0r") +region = Rect2(0, 0, 48, 48) + +[sub_resource type="AtlasTexture" id="AtlasTexture_ke2ow"] +atlas = ExtResource("2_qlg0r") +region = Rect2(48, 0, 48, 48) + +[sub_resource type="AtlasTexture" id="AtlasTexture_ujl30"] +atlas = ExtResource("2_qlg0r") +region = Rect2(96, 0, 48, 48) + +[sub_resource type="AtlasTexture" id="AtlasTexture_31cv2"] +atlas = ExtResource("2_qlg0r") +region = Rect2(144, 0, 48, 48) + +[sub_resource type="AtlasTexture" id="AtlasTexture_i4ail"] +atlas = ExtResource("2_dqkch") +region = Rect2(96, 0, 48, 48) + +[sub_resource type="AtlasTexture" id="AtlasTexture_qhqgy"] +atlas = ExtResource("2_g2els") +region = Rect2(0, 0, 48, 48) + +[sub_resource type="AtlasTexture" id="AtlasTexture_dqkch"] +atlas = ExtResource("2_g2els") +region = Rect2(48, 0, 48, 48) + +[sub_resource type="AtlasTexture" id="AtlasTexture_qlg0r"] +atlas = ExtResource("2_g2els") +region = Rect2(96, 0, 48, 48) + +[sub_resource type="AtlasTexture" id="AtlasTexture_tuyoq"] +atlas = ExtResource("2_g2els") +region = Rect2(144, 0, 48, 48) + +[sub_resource type="AtlasTexture" id="AtlasTexture_fjrip"] +atlas = ExtResource("2_g2els") +region = Rect2(192, 0, 48, 48) + +[sub_resource type="AtlasTexture" id="AtlasTexture_smehm"] +atlas = ExtResource("2_g2els") +region = Rect2(240, 0, 48, 48) + +[sub_resource type="AtlasTexture" id="AtlasTexture_ur7pv"] +atlas = ExtResource("2_g2els") +region = Rect2(288, 0, 48, 48) + +[sub_resource type="AtlasTexture" id="AtlasTexture_y4r1p"] +atlas = ExtResource("2_g2els") +region = Rect2(336, 0, 48, 48) + +[sub_resource type="AtlasTexture" id="AtlasTexture_d2wvv"] +atlas = ExtResource("2_g2els") +region = Rect2(384, 0, 48, 48) + +[sub_resource type="AtlasTexture" id="AtlasTexture_3v2ag"] +atlas = ExtResource("2_g2els") +region = Rect2(432, 0, 48, 48) + +[sub_resource type="AtlasTexture" id="AtlasTexture_a38lo"] +atlas = ExtResource("2_dqkch") +region = Rect2(0, 0, 48, 48) + +[sub_resource type="AtlasTexture" id="AtlasTexture_4ni07"] +atlas = ExtResource("2_dqkch") +region = Rect2(48, 0, 48, 48) + +[sub_resource type="AtlasTexture" id="AtlasTexture_jej6c"] +atlas = ExtResource("3_qhqgy") +region = Rect2(0, 0, 48, 48) + +[sub_resource type="AtlasTexture" id="AtlasTexture_f1ej7"] +atlas = ExtResource("3_qhqgy") +region = Rect2(48, 0, 48, 48) + +[sub_resource type="AtlasTexture" id="AtlasTexture_oprun"] +atlas = ExtResource("3_qhqgy") +region = Rect2(96, 0, 48, 48) + +[sub_resource type="AtlasTexture" id="AtlasTexture_a8ls1"] +atlas = ExtResource("3_qhqgy") +region = Rect2(144, 0, 48, 48) + +[sub_resource type="AtlasTexture" id="AtlasTexture_qfm1y"] +atlas = ExtResource("3_qhqgy") +region = Rect2(192, 0, 48, 48) + +[sub_resource type="AtlasTexture" id="AtlasTexture_fulsm"] +atlas = ExtResource("3_qhqgy") +region = Rect2(240, 0, 48, 48) + +[sub_resource type="AtlasTexture" id="AtlasTexture_4r5pv"] +atlas = ExtResource("3_qhqgy") +region = Rect2(288, 0, 48, 48) + +[sub_resource type="AtlasTexture" id="AtlasTexture_60mlk"] +atlas = ExtResource("3_qhqgy") +region = Rect2(336, 0, 48, 48) + +[sub_resource type="SpriteFrames" id="SpriteFrames_jej6c"] +animations = [{ +"frames": [{ +"duration": 1.0, +"texture": SubResource("AtlasTexture_l71n6") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_ke2ow") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_ujl30") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_31cv2") +}], +"loop": false, +"name": &"damage", +"speed": 12.0 +}, { +"frames": [{ +"duration": 1.0, +"texture": SubResource("AtlasTexture_i4ail") +}], +"loop": false, +"name": &"fall", +"speed": 5.0 +}, { +"frames": [{ +"duration": 1.0, +"texture": SubResource("AtlasTexture_qhqgy") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_dqkch") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_qlg0r") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_tuyoq") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_fjrip") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_smehm") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_ur7pv") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_y4r1p") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_d2wvv") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_3v2ag") +}], +"loop": true, +"name": &"idle", +"speed": 12.0 +}, { +"frames": [{ +"duration": 1.0, +"texture": SubResource("AtlasTexture_a38lo") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_4ni07") +}], +"loop": false, +"name": &"jump", +"speed": 12.0 +}, { +"frames": [{ +"duration": 1.0, +"texture": SubResource("AtlasTexture_jej6c") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_f1ej7") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_oprun") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_a8ls1") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_qfm1y") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_fulsm") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_4r5pv") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_60mlk") +}], +"loop": true, +"name": &"run", +"speed": 12.0 +}] + [node name="player" type="CharacterBody2D"] script = ExtResource("1_3vyb7") metadata/_edit_group_ = true @@ -23,3 +230,16 @@ position = Vector2(16, -3) [node name="LeftSpawn" type="Node2D" parent="."] position = Vector2(-20, -3) + +[node name="JumpBuffer" type="Timer" parent="."] +one_shot = true + +[node name="PlayerGraphic" type="AnimatedSprite2D" parent="."] +texture_filter = 1 +position = Vector2(1, -4) +scale = Vector2(0.870304, 0.847034) +sprite_frames = SubResource("SpriteFrames_jej6c") +animation = &"damage" +autoplay = "idle" + +[connection signal="animation_finished" from="PlayerGraphic" to="." method="_on_animation_finished"] diff --git a/scripts/gamecontroller.gd b/scripts/gamecontroller.gd index 8ae5f95..e7c7477 100644 --- a/scripts/gamecontroller.gd +++ b/scripts/gamecontroller.gd @@ -1,5 +1,9 @@ extends Node2D +@onready var player: Player = $player + +signal playerDamage + # Called when the node enters the scene tree for the first time. func _ready() -> void: pass # Replace with function body. @@ -12,8 +16,10 @@ func _process(delta: float) -> void: func _on_trigger(effect: Variant, body: Variant) -> void: print("game controller sees trigger "+effect+" "+body.name) - if not body is Player: + if effect == "destroy" && not body is Player: body.queue_free() + elif effect == "player_hurt": + playerDamage.emit() func onBulletHitSignal(body: Node, bullet: Bullet): body.queue_free() diff --git a/scripts/player.gd b/scripts/player.gd index 6c4d6b2..835bbe9 100644 --- a/scripts/player.gd +++ b/scripts/player.gd @@ -5,40 +5,97 @@ class_name Player extends CharacterBody2D @onready var left_cast: RayCast2D = $LeftCast @onready var right_spawn: Node2D = $RightSpawn @onready var left_spawn: Node2D = $LeftSpawn +@onready var jump_buffer: Timer = $JumpBuffer +@onready var player_graphic: AnimatedSprite2D = $PlayerGraphic const SHOVE_STRENGTH = 700 const SPEED = 300.0 -const JUMP_VELOCITY = -400.0 +const JUMP_VELOCITY = -450.0 +var acceleration: int = 50 var direction: float enum FaceDirection{LEFT, RIGHT} var facing: FaceDirection = FaceDirection.RIGHT +enum PossibleStates{IDLE, RUN, JUMP, FALL, DAMAGE} +var current_state: PossibleStates = PossibleStates.IDLE +var prev_state: PossibleStates = PossibleStates.IDLE + +var upJump: bool = false + var pushTarget +var life: int = 100 + func _physics_process(delta: float) -> void: handle_input() handle_movement(delta) + handle_states() + handle_animation() move_and_slide() handle_collisions() +func handle_states(): + match current_state: + PossibleStates.IDLE: + if velocity.x != 0 and is_on_floor(): + current_state = PossibleStates.RUN + if not is_on_floor() && velocity.y < 0: + current_state = PossibleStates.JUMP + PossibleStates.RUN: + if velocity.x == 0 and is_on_floor(): + current_state = PossibleStates.IDLE + # player steps on ledge + if not is_on_floor() && velocity.y > 0: + current_state = PossibleStates.FALL + if not is_on_floor() && velocity.y < 0: + current_state = PossibleStates.JUMP + PossibleStates.FALL when is_on_floor(): + if velocity.x == 0: + current_state = PossibleStates.IDLE + else: + current_state = PossibleStates.RUN + PossibleStates.JUMP: + if velocity.y > 0: + current_state = PossibleStates.FALL + + +func handle_animation(): + match current_state: + PossibleStates.IDLE: + player_graphic.play("idle") + PossibleStates.RUN: + player_graphic.play("run") + PossibleStates.JUMP: + if upJump: + player_graphic.play("jump") + PossibleStates.FALL: + player_graphic.play("fall") + PossibleStates.DAMAGE: + player_graphic.play("damage") + func handle_movement(delta: float): - if direction: - velocity.x = direction * SPEED + if direction == 0: + velocity.x = move_toward(velocity.x, 0, acceleration) else: - velocity.x = move_toward(velocity.x, 0, SPEED) + velocity.x = move_toward(velocity.x, direction*SPEED, acceleration) # Add the gravity. if not is_on_floor(): velocity += get_gravity() * delta + if is_on_floor() && jump_buffer.time_left > 0: + velocity.y = JUMP_VELOCITY + upJump = true + jump_buffer.stop() + func handle_input(): # Handle jump. if Input.is_action_just_pressed("ui_accept") and is_on_floor(): - velocity.y = JUMP_VELOCITY + jump_buffer.start() # Get the input direction and handle the movement/deceleration. # As good practice, you should replace UI actions with custom gameplay actions. @@ -46,8 +103,10 @@ func handle_input(): if direction > 0: facing = FaceDirection.RIGHT + player_graphic.flip_h = false elif direction < 0: facing = FaceDirection.LEFT + player_graphic.flip_h = true var is_shoving = Input.is_action_just_pressed("shove") if is_shoving and pushTarget is RigidBody2D: @@ -87,3 +146,15 @@ func handle_collisions(): pushTarget = null +func _on_animation_finished() -> void: + if current_state == PossibleStates.JUMP: + upJump = false + if current_state == PossibleStates.DAMAGE: + current_state = prev_state + +func hurt_player(): + print("in player hurt") + life -= 5 + prev_state = current_state + current_state = PossibleStates.DAMAGE + diff --git a/scripts/scene_manager.gd b/scripts/scene_manager.gd index 65c1a02..eb681c6 100644 --- a/scripts/scene_manager.gd +++ b/scripts/scene_manager.gd @@ -3,6 +3,7 @@ class_name SceneManager extends Node2D const bullet_scene = preload("res://scenes/bullet.tscn") @onready var game: Node2D = $".." +@onready var triggers: Node2D = $"../triggers" var MAX_BULLET := 50 var available_bullets = [] @@ -12,6 +13,12 @@ func _ready() -> void: var new_bullet = bullet_scene.instantiate() new_bullet.bulletHitSignal.connect(game.onBulletHitSignal) available_bullets.push_front(new_bullet) + + if triggers: + for trig in triggers.get_children(): + if trig is Trigger: + trig.areaTriggerSignal.connect(game._on_trigger) + func make_bullet(start_position: Transform2D, speed: int): var new_bullet = bullet_factory(start_position, speed) diff --git a/scripts/trigger.gd b/scripts/trigger.gd index a822232..e494f49 100644 --- a/scripts/trigger.gd +++ b/scripts/trigger.gd @@ -1,4 +1,4 @@ -extends Area2D +class_name Trigger extends Area2D @export var effect:String