custom resources, player damage, bad guy damage, animations, ui

This commit is contained in:
OddlyTimbot committed 2025-05-26 20:57:03 -04:00
1 parent 7f787903b7
commit a93515f621
20 files changed
+418 -36

No files matched your search

+6 -1
View File
@@ -17,5 +17,10 @@ func _physics_process(delta: float) -> void:
func _on_body_entered(body: Node2D) -> void:
if not body is Player:
print("Bullet hit")
bulletHit.emit(body, self)
func _on_area_entered(area: Area2D) -> void:
if area is Slime:
print("bullet hitting enemy")
bulletHit.emit(area, self)
+51 -17
View File
@@ -6,18 +6,29 @@ var timer = Timer.new()
var coinsCollectedTotal := 0
var levels = ["res://scenes/game.tscn","res://scenes/level2.tscn","res://scenes/level3.tscn"]
var timers = [10, 15, 25]
var timers = [50, 15, 25]
var currentLevel = 0
var playerHealth = 100
var player:CharacterStats
var slime:CharacterStats
var enemiesDict = {}
signal levelCompleteSignal(level)
signal destroySignal(body)
signal playerDamage
signal playerDamage(health, maxhealth)
signal playerDeath
signal countDown(timeRemaining)
signal coinUpdate(totalCoins)
signal enemyHurt(enemy)
# Called when the node enters the scene tree for the first time.
func _ready() -> void:
#load custom resource for player and slime
player = load("res://scripts/res/playerstats.tres")
slime = load("res://scripts/res/slimestats.tres")
add_child(timer)
timer.wait_time = 1
timer.one_shot = false
@@ -26,6 +37,8 @@ func _ready() -> void:
func secondCounter():
timeLimit -=1
countDown.emit(timeLimit)
if timeLimit <= 0:
#loser!!!!
levelCompleteSignal.emit(levels[currentLevel])
@@ -41,39 +54,60 @@ func _process(delta: float) -> void:
func _on_trigger_fired(effect: Variant, body: Variant) -> void:
print("Game controller knows :: "+effect)
if effect=="destroy":
if body is Crate:
print("Crates Remaining " + str(totalCrates) )
destroySignal.emit(body)
func _on_coin_collected(body, coin):
coinsCollectedTotal += 1
coinUpdate.emit(coinsCollectedTotal)
destroySignal.emit(coin)
print("GC knows coin collected")
func _on_player_damage(body, enemy):
if enemy is Slime:
print("slime attack!!!")
playerHealth -= 10
playerHealth -= enemiesDict[enemy]["damage"]
if playerHealth >0:
print("Player damaged")
playerDamage.emit()
else:
print("Player dead")
playerDeath.emit()
if playerHealth >0:
playerDamage.emit(playerHealth, player.max_health)
else:
playerDeath.emit()
func addEnemyToLevel(enemy):
var randHealth:int = randi() % 20
var randDamage:int = randi() % 10
print("randoms "+str(randHealth)+" "+str(randDamage))
var enemyStat = {
"health": slime.health + randHealth,
"damage": slime.meleeDamage + randDamage
}
enemiesDict[enemy] = enemyStat
func numberOfCrates(value):
totalCrates = value
print("Total crates at GC: "+str(totalCrates) )
func bulletDamage(body, bullet):
print("Game controller knows about bullet hit")
if body is Slime:
enemiesDict[body]["health"] -= player.rangeDamage
#send custom signal
enemyHurt.emit(body)
if enemiesDict[body]["health"] <= 0:
destroySignal.emit(body)
enemiesDict.erase(body)
func reset():
timeLimit = timers[currentLevel]
playerHealth = 100
playerHealth = player.starting_health
func death():
print("player death animation complete")
levelCompleteSignal.emit(levels[currentLevel])
+15 -4
View File
@@ -18,7 +18,7 @@ const JUMP_VELOCITY = -400.0
@export var acceleration = 15
@export var hard_gravity = 5
enum State{IDLE, RUN, JUMP, FALLING, MELEE}
enum State{IDLE, RUN, JUMP, FALLING, MELEE, HURT, DEATH}
var current_state = State.IDLE
enum FaceDirection{LEFT, RIGHT}
@@ -31,15 +31,18 @@ var upJump:bool = false
signal deathComplete
func _player_damage():
func _player_damage(_currentHealth, _maxHealth):
print("Player taking damage!")
current_state = State.HURT
func _player_death():
print("Player dead!!")
current_state = State.DEATH
func _physics_process(delta: float) -> void:
handle_input()
if current_state != State.HURT and current_state != State.DEATH:
handle_input()
update_movement(delta)
update_states()
update_animation()
@@ -136,6 +139,10 @@ func update_animation()->void:
player_graphic.play("fall")
State.MELEE:
player_graphic.play("melee")
State.HURT:
player_graphic.play("hurt")
State.DEATH:
player_graphic.play("death")
func handle_collisions()->void:
for i in get_slide_collision_count():
@@ -166,3 +173,7 @@ func _on_animation_finished() -> void:
upJump = false
State.MELEE:
current_state = State.IDLE
State.HURT:
current_state = State.IDLE
State.DEATH:
deathComplete.emit()
+8
View File
@@ -0,0 +1,8 @@
class_name CharacterStats extends Resource
@export var max_health:int = 100
@export var starting_health:int = 100
@export var health:int = 100
@export var meleeDamage:int = 10
@export var rangeDamage:int = 0
+1
View File
@@ -0,0 +1 @@
uid://da5ofgqbqvfv4
+12
View File
@@ -0,0 +1,12 @@
[gd_resource type="Resource" script_class="CharacterStats" load_steps=2 format=3 uid="uid://d0evd4qs7p8vx"]
[ext_resource type="Script" uid="uid://da5ofgqbqvfv4" path="res://scripts/res/characterstats.gd" id="1_4nldt"]
[resource]
script = ExtResource("1_4nldt")
max_health = 100
starting_health = 100
health = 100
meleeDamage = 10
rangeDamage = 20
metadata/_custom_type_script = "uid://da5ofgqbqvfv4"
+12
View File
@@ -0,0 +1,12 @@
[gd_resource type="Resource" script_class="CharacterStats" load_steps=2 format=3 uid="uid://cofkrecvkxrlq"]
[ext_resource type="Script" uid="uid://da5ofgqbqvfv4" path="res://scripts/res/characterstats.gd" id="1_fftob"]
[resource]
script = ExtResource("1_fftob")
max_health = 50
starting_health = 50
health = 50
meleeDamage = 30
rangeDamage = 0
metadata/_custom_type_script = "uid://da5ofgqbqvfv4"
+7 -1
View File
@@ -6,6 +6,7 @@ extends Node
@onready var coins: Node2D = $"../coins"
@onready var enemies: Node2D = $"../enemies"
@onready var player: Player = $"../CharacterBody2D"
@onready var ui: Control = $"../CanvasLayer/ui"
var bullet = preload("res://scenes/bullet.tscn")
var bulletArray=[]
@@ -32,12 +33,17 @@ func buildLevel()->void:
for obj in enemies.get_children():
if obj is Slime:
obj.playerDamageSignal.connect(Gamecontroller._on_player_damage)
Gamecontroller.enemyHurt.connect(obj.damage)
Gamecontroller.addEnemyToLevel(obj)
#Wire up signals
Gamecontroller.levelCompleteSignal.connect(loadLevel)
Gamecontroller.destroySignal.connect(destroy)
Gamecontroller.playerDamage.connect(player._player_damage)
Gamecontroller.playerDamage.connect(ui.healthUpdate)
Gamecontroller.coinUpdate.connect(ui.coinsUpdate)
Gamecontroller.playerDeath.connect(player._player_death)
Gamecontroller.countDown.connect(ui.timerUpdate)
#player connection
player.deathComplete.connect(Gamecontroller.death)
@@ -66,7 +72,7 @@ func bulletFactory():
return mybullet
func makeBullet(position, speed):
print("Scene manager makes a bullet")
var mybullet = bulletFactory()
mybullet.setSpeed(speed)
mybullet.transform = position
+18 -5
View File
@@ -10,15 +10,28 @@ var speed = 100
var direction = 1
func _process(delta: float) -> void:
if not right_down_cast.is_colliding() or right_side_cast.is_colliding():
if not right_down_cast.is_colliding():
direction = -1
sprite.flip_h = true
if not left_down_cast.is_colliding() or left_side_cast.is_colliding():
if right_side_cast.is_colliding():
if not right_side_cast.get_collider() is Player:
direction = -1
sprite.flip_h = true
if not left_down_cast.is_colliding():
direction = 1
sprite.flip_h = false
if left_side_cast.is_colliding():
if not left_side_cast.get_collider() is Player:
direction = 1
sprite.flip_h = false
position.x += direction * speed * delta
func _on_body_entered(body: Node2D) -> void:
print("Slime Contact")
playerDamageSignal.emit(body, self)
if body is Player:
playerDamageSignal.emit(body, self)
func damage(body)->void:
if body == self:
sprite.play("hurt")
+17
View File
@@ -0,0 +1,17 @@
extends Control
@onready var health: Label = $VBoxContainer/HBoxContainer/MarginContainer/health
@onready var timer: Label = $VBoxContainer/HBoxContainer/MarginContainer2/timer
@onready var coins: Label = $VBoxContainer/HBoxContainer/MarginContainer3/coins
func _ready() -> void:
health.text = "Health 100"
func healthUpdate(currentHealth, maxHealth):
health.text = "Health"+str(currentHealth)
func coinsUpdate(amt) -> void:
coins.text = "Coins "+str(amt)
func timerUpdate(timeRemaining)-> void:
timer.text = str(timeRemaining)
+1
View File
@@ -0,0 +1 @@
uid://daslx4en4rji1