damage, dying, custom resources, simple UI

This commit is contained in:
OddlyTimbot committed 2026-06-01 21:06:00 -04:00
1 parent fd6ad5e001
commit 1a4f030097
16 files changed
+336 -13

No files matched your search

+18 -9
View File
@@ -2,6 +2,9 @@ extends Node2D
signal destroySignal(body)
signal levelChangeSignal(level)
signal damagePlayerSignal(damageTotal,playerHealthTotal)
signal killPlayerSignal
signal timeChangeSignal(currentTimeAvailable)
var levels=["res://Scenes/game.tscn","res://Scenes/level2.tscn","res://Scenes/level3.tscn"]
var currentLevel = 0
@@ -15,9 +18,15 @@ var playerCurrentHealth:int = 100
#enemies
var enemiesDict = {}
var enemy:CharacterStats
var player:CharacterStats
# Called when the node enters the scene tree for the first time.
func _ready() -> void:
get_window().grab_focus()
enemy = load("res://Scripts/rscs/slime_stats.tres")
player = load("res://Scripts/rscs/player_stats.tres")
reset()
add_child(timer)
timer.wait_time = 1
@@ -26,15 +35,15 @@ func _ready() -> void:
timer.start()
func secondCounter()->void:
print("tick")
timeAvailable -=1
timeChangeSignal.emit(timeAvailable)
if timeAvailable <=0:
print("You lose baby!")
levelChangeSignal.emit(levels[currentLevel])
func reset()->void:
timeAvailable = timers[currentLevel]
playerCurrentHealth = 100
playerCurrentHealth = player.starting_health
# Called every frame. 'delta' is the elapsed time since the previous frame.
func _process(delta: float) -> void:
@@ -42,12 +51,10 @@ func _process(delta: float) -> void:
func _on_triggerSignal(body: Variant, intentMessage: Variant) -> void:
print("GC knows about a trigger!")
if body.is_in_group("destructible") and intentMessage == "destroy":
destroySignal.emit(body)
func totalCrates(numberOfCrates:int)->void:
print("GC knows total crates: "+str(numberOfCrates))
if numberOfCrates <=0:
print("You WON!!!!")
currentLevel +=1
@@ -56,18 +63,20 @@ func totalCrates(numberOfCrates:int)->void:
levelChangeSignal.emit(levels[currentLevel])
func _on_slime_damage(_body,slime)->void:
print("GC knows slime doing damage")
print("Doing damage: "+str(enemiesDict[slime]["damage"]))
playerCurrentHealth -= enemiesDict[slime]["damage"]
#send a custom signal about damage
damagePlayerSignal.emit(enemiesDict[slime]["damage"],playerCurrentHealth)
if playerCurrentHealth <=0:
print("U ded")
levelChangeSignal.emit(levels[currentLevel])
killPlayerSignal.emit()
func addEnemyToLevel(slime)->void:
#give each enemy some health and damage
var randamage = randi_range(1,20)
var enemyStat = {
"health": 50,
"damage": 30+randamage
"health": enemy.starting_health,
"damage": enemy.meleeDamage+randamage
}
enemiesDict[slime]=enemyStat
func respawn()->void:
levelChangeSignal.emit(levels[currentLevel])
+20 -3
View File
@@ -5,13 +5,14 @@ class_name Player extends CharacterBody2D
@onready var left_spawn: Marker2D = $LeftSpawn
@onready var player_graphic: AnimatedSprite2D = $PlayerGraphic
signal deathAnimationComplete
const SPEED = 300.0
const JUMP_VELOCITY = -400.0
var direction
enum FaceDirection{LEFT,RIGHT}
var facing:FaceDirection = FaceDirection.RIGHT
enum PlayerState{IDLE,RUNNING,JUMPING,FALLING}
enum PlayerState{IDLE,RUNNING,JUMPING,FALLING,HURT, DEAD}
var current_player_state:PlayerState = PlayerState.IDLE
var pushTarget:RigidBody2D
@@ -20,8 +21,9 @@ var pushEnabled:bool = false
var upJump:bool = false
func _physics_process(delta: float) -> void:
handle_input()
handle_movement(delta)
if not current_player_state == PlayerState.HURT:
handle_input()
handle_movement(delta)
handle_state()
handle_animation()
move_and_slide()
@@ -118,6 +120,10 @@ func handle_animation()->void:
player_graphic.play("jump")
PlayerState.FALLING:
player_graphic.play("fall")
PlayerState.HURT:
player_graphic.play("hurt")
PlayerState.DEAD:
player_graphic.play("dead")
@@ -125,3 +131,14 @@ func _on_animation_finished() -> void:
match current_player_state:
PlayerState.JUMPING:
upJump = false
PlayerState.HURT:
current_player_state = PlayerState.IDLE
PlayerState.DEAD:
deathAnimationComplete.emit()
func takeDamage(_damage,_remainingHealth)->void:
print("Player knows damage "+str(_damage))
current_player_state = PlayerState.HURT
func die()->void:
current_player_state = PlayerState.DEAD
+8
View File
@@ -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 meleeDamage:int = 10
@export var rangeDamage:int =5
+1
View File
@@ -0,0 +1 @@
uid://deef1fi6sargw
+8
View File
@@ -0,0 +1,8 @@
[gd_resource type="Resource" script_class="CharacterStats" format=3 uid="uid://cqbm43tl86gmq"]
[ext_resource type="Script" uid="uid://deef1fi6sargw" path="res://Scripts/rscs/character_statst.gd" id="1_2wf5j"]
[resource]
script = ExtResource("1_2wf5j")
health = 110
metadata/_custom_type_script = "uid://deef1fi6sargw"
+11
View File
@@ -0,0 +1,11 @@
[gd_resource type="Resource" script_class="CharacterStats" format=3 uid="uid://dbhv3hltbjxk2"]
[ext_resource type="Script" uid="uid://deef1fi6sargw" path="res://Scripts/rscs/character_statst.gd" id="1_38j4j"]
[resource]
script = ExtResource("1_38j4j")
health = 40
max_health = 45
starting_health = 40
rangeDamage = 0
metadata/_custom_type_script = "uid://deef1fi6sargw"
+8
View File
@@ -2,12 +2,20 @@ class_name SceneManager extends Node2D
@onready var crates: Node2D = $"../Crates"
var grenade = preload("res://Scenes/grenade.tscn")
@onready var enemies: Node2D = $"../Enemies"
@onready var player: Player = $"../Player"
@onready var control: Control = $"../UI/Control"
func _ready() -> void:
GameController.reset()
print("Scene manager is ready!")
GameController.destroySignal.connect(destroy)
GameController.levelChangeSignal.connect(changeScene)
GameController.damagePlayerSignal.connect(player.takeDamage)
GameController.damagePlayerSignal.connect(control.upDateHealth)
GameController.timeChangeSignal.connect(control.updateTime)
GameController.killPlayerSignal.connect(player.die)
player.deathAnimationComplete.connect(GameController.respawn)
buildLevel()
func destroy(body)->void:
+18
View File
@@ -0,0 +1,18 @@
extends Control
@onready var health: Label = $VBoxContainer/HBoxContainer/MarginContainer/health
@onready var time: Label = $VBoxContainer/HBoxContainer/MarginContainer2/time
# Called when the node enters the scene tree for the first time.
func _ready() -> void:
pass
# Called every frame. 'delta' is the elapsed time since the previous frame.
func _process(delta: float) -> void:
pass
func upDateHealth(_damage,_health)->void:
health.text = "HEALTH: "+str(_health)
func updateTime(timeAvailable)->void:
time.text = str(timeAvailable)
+1
View File
@@ -0,0 +1 @@
uid://c6hdmgpywednh