TowerDefense/Globals/Game.gd

106 lines
2 KiB
GDScript3
Raw Normal View History

2025-09-03 18:39:58 +02:00
@tool
extends Node
## Game
signal cube_integrity_changed
signal money_changed
signal lose
signal allowed_tower_has_change
2025-09-07 19:48:58 +02:00
var upgrades : Array[CubeUpgrade] = load("res://Upgrades/cube_upgrades.tres").upgrades
var towerPackedScenes : Dictionary
var enmies : Dictionary
var towers : Dictionary
2025-09-07 19:48:58 +02:00
var max_health : int = 50 :
set(value):
var diff : int = value - max_health
max_health = value
health += diff
var health : int = max_health :
set(value):
2025-09-07 19:48:58 +02:00
health = clampi(value, 0, max_health)
cube_integrity_changed.emit()
if health <= 0:
death()
var money : int = 0:
set(value):
money = value
money_changed.emit()
2025-09-07 19:48:58 +02:00
var tier : int = 0
var maxTier : int = 3
var wave_health_regen : int = 0
var wave_money : int = 0
var energy_boost : int = 0
func _ready() -> void:
2025-09-06 22:08:29 +02:00
process_mode = Node.PROCESS_MODE_ALWAYS
EventBus.player_has_won.connect(win)
2025-09-07 19:48:58 +02:00
EventBus.wave_finished.connect(getWaveEndIncom)
Helper.preloadSceneInGlobal(towerPackedScenes, Helper.RESOURCE_TYPE.TOWER)
#Helper.preloadSceneInGlobal(towerPackedScenes, Helper.RESOURCE_TYPE.ENEMY)
2025-09-06 22:08:29 +02:00
func _input(event: InputEvent) -> void:
2025-09-06 23:26:37 +02:00
if Engine.is_editor_hint():
return
2025-09-06 22:08:29 +02:00
if event.is_action_pressed("pause_game"):
get_tree().paused = not get_tree().paused
2025-09-07 19:48:58 +02:00
func getWaveEndIncom() -> void:
health += wave_health_regen
money += wave_money
2025-09-06 22:08:29 +02:00
func initTowers(allowedTowers : Array[Tower.TYPE]) -> void:
towers.clear()
2025-09-06 22:08:29 +02:00
for towerType in allowedTowers:
var tower : Tower = towerPackedScenes.get(towerType).instantiate()
towers.set(towerType, tower)
allowed_tower_has_change.emit()
func resetGame() -> void:
initTowers([])
money = 0
health = max_health
func win():
Transition.goto("res://UI/win_screen.tscn")
resetGame()
2025-09-03 18:39:58 +02:00
2025-09-06 22:08:29 +02:00
func quitLevel() -> void:
Transition.goto("res://UI/start_menu.tscn")
resetGame()
func quitGame() -> void:
get_tree().quit()
func spendMoney(amount : int) -> bool:
2025-09-06 17:32:46 +02:00
if money >= amount:
money -= amount
return true
return false
func death():
lose.emit()
Transition.goto("res://UI/defeat_screen.tscn")
resetGame()