custom resources, player damage, bad guy damage, animations, ui
This commit is contained in:
1 parent
7f787903b7
commit
a93515f621
20 files changed
+418
-36
No files matched your search
+6
-1
@@ -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
@@ -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
@@ -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()
|
||||
@@ -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
|
||||
@@ -0,0 +1 @@
|
||||
uid://da5ofgqbqvfv4
|
||||
@@ -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"
|
||||
@@ -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"
|
||||
@@ -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
@@ -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")
|
||||
@@ -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)
|
||||
@@ -0,0 +1 @@
|
||||
uid://daslx4en4rji1
|
||||
Reference in new issue
Block a user