From 5050fa8cd8248baf78d14e2b70bc5cd101854814 Mon Sep 17 00:00:00 2001 From: edgul Date: Mon, 1 Jun 2026 20:13:28 -0400 Subject: [PATCH] added player death and custom resources --- .../player/dead/Player Death 64x64.png | Bin 0 -> 1584 bytes .../player/dead/Player Death 64x64.png.import | 40 +++++++ .../player/hurt/Player Hurt 48x48.png | Bin 0 -> 1448 bytes .../player/hurt/Player Hurt 48x48.png.import | 40 +++++++ project.godot | 6 - scenes/player.tscn | 112 +++++++++++++++++- scripts/game_controller.gd | 25 ++-- scripts/player.gd | 34 +++++- scripts/resources/character_stats.gd | 8 ++ scripts/resources/character_stats.gd.uid | 1 + scripts/resources/player_stats.tres | 10 ++ scripts/resources/slime_stats.tres | 11 ++ scripts/scene_manager.gd | 11 ++ 13 files changed, 277 insertions(+), 21 deletions(-) create mode 100644 assets/graphics/player/dead/Player Death 64x64.png create mode 100644 assets/graphics/player/dead/Player Death 64x64.png.import create mode 100644 assets/graphics/player/hurt/Player Hurt 48x48.png create mode 100644 assets/graphics/player/hurt/Player Hurt 48x48.png.import create mode 100644 scripts/resources/character_stats.gd create mode 100644 scripts/resources/character_stats.gd.uid create mode 100644 scripts/resources/player_stats.tres create mode 100644 scripts/resources/slime_stats.tres diff --git a/assets/graphics/player/dead/Player Death 64x64.png b/assets/graphics/player/dead/Player Death 64x64.png new file mode 100644 index 0000000000000000000000000000000000000000..2e6a1ae0514b237d754893f563c87ba5f95dc109 GIT binary patch literal 1584 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 void: - # switch state from apex to fall match state: - State.APEX: + State.APEX: # switch state from apex to fall state = State.FALL + State.HURT: # switch state from hurt to idle + state = State.IDLE + State.DYING: + print("firing dead signal") + state = State.DEAD + player_dead.emit(self) + State.DEAD: + pass + +func damage_player(damage: int): + if self.state != State.DYING and self.state != State.DEAD: + self.health -= damage + if self.health <= 0: + print("DEAD") + self.state = State.DYING + else: + print("player hurt") + self.state = State.HURT diff --git a/scripts/resources/character_stats.gd b/scripts/resources/character_stats.gd new file mode 100644 index 0000000..ef89702 --- /dev/null +++ b/scripts/resources/character_stats.gd @@ -0,0 +1,8 @@ +class_name CharacterStats extends Resource + +@export var health:int = 100; +@export var max_health:int = 120; +@export var starting_health:int = 100; + +@export var melee_damage:int = 10; +@export var range_damage:int = 5; diff --git a/scripts/resources/character_stats.gd.uid b/scripts/resources/character_stats.gd.uid new file mode 100644 index 0000000..0ebee1d --- /dev/null +++ b/scripts/resources/character_stats.gd.uid @@ -0,0 +1 @@ +uid://v5se2t1jjaat diff --git a/scripts/resources/player_stats.tres b/scripts/resources/player_stats.tres new file mode 100644 index 0000000..a54b57f --- /dev/null +++ b/scripts/resources/player_stats.tres @@ -0,0 +1,10 @@ +[gd_resource type="Resource" script_class="CharacterStats" format=3 uid="uid://ffycoj1dt84h"] + +[ext_resource type="Script" uid="uid://v5se2t1jjaat" path="res://scripts/resources/character_stats.gd" id="1_r32g3"] + +[resource] +script = ExtResource("1_r32g3") +health = 30 +max_health = 50 +starting_health = 30 +metadata/_custom_type_script = "uid://v5se2t1jjaat" diff --git a/scripts/resources/slime_stats.tres b/scripts/resources/slime_stats.tres new file mode 100644 index 0000000..c6ae7d8 --- /dev/null +++ b/scripts/resources/slime_stats.tres @@ -0,0 +1,11 @@ +[gd_resource type="Resource" script_class="CharacterStats" format=3 uid="uid://cxkrcxxmgtyyr"] + +[ext_resource type="Script" uid="uid://v5se2t1jjaat" path="res://scripts/resources/character_stats.gd" id="1_l0etv"] + +[resource] +script = ExtResource("1_l0etv") +health = 10 +max_health = 15 +starting_health = 10 +range_damage = 0 +metadata/_custom_type_script = "uid://v5se2t1jjaat" diff --git a/scripts/scene_manager.gd b/scripts/scene_manager.gd index 47d070b..e3d2f0f 100644 --- a/scripts/scene_manager.gd +++ b/scripts/scene_manager.gd @@ -9,6 +9,8 @@ func _ready() -> void: print("scene manager is ready") GameController.destroy.connect(destroy) GameController.level_change_signal.connect(change_scene) + GameController.damage_player_signal.connect(damage_player) + # player.player_dead.connect(GameController._on_player_dead) build_level() func _process(delta: float) -> void: @@ -20,6 +22,9 @@ func build_level() -> void: update_enemies() if player: GameController.player = player + if not player.player_dead.is_connected(GameController._on_player_dead): + print("hooking up player dead signal") + player.player_dead.connect(GameController._on_player_dead) func update_enemies(): for enemy in enemies.get_children(): @@ -52,3 +57,9 @@ func update_crates() -> void: func destroy(body): if body is BrownBox: body.queue_free() + +func damage_player(damage: int): + player.damage_player(damage) + +#func player_dead_animation_finished(): + #change_scene()