damage, dying, custom resources, simple UI
This commit is contained in:
1 parent
fd6ad5e001
commit
1a4f030097
16 files changed
+336
-13
No files matched your search
@@ -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
@@ -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
|
||||
@@ -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
|
||||
@@ -0,0 +1 @@
|
||||
uid://deef1fi6sargw
|
||||
@@ -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"
|
||||
@@ -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"
|
||||
@@ -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:
|
||||
|
||||
@@ -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)
|
||||
@@ -0,0 +1 @@
|
||||
uid://c6hdmgpywednh
|
||||
Reference in new issue
Block a user