2025-09-03 18:39:58 +02:00
|
|
|
@tool
|
2025-09-04 17:59:23 +02:00
|
|
|
extends Node
|
|
|
|
|
## Game
|
2025-09-02 19:49:40 +02:00
|
|
|
|
|
|
|
|
|
2025-09-04 17:59:23 +02:00
|
|
|
signal cube_integrity_changed
|
|
|
|
|
signal money_changed
|
|
|
|
|
signal loose
|
|
|
|
|
signal allowed_tower_has_change
|
2025-09-02 19:49:40 +02:00
|
|
|
|
|
|
|
|
|
2025-09-04 17:59:23 +02:00
|
|
|
var towerPackedScenes : Dictionary
|
|
|
|
|
var enmies : Dictionary
|
|
|
|
|
var towers : Dictionary
|
|
|
|
|
var allowedTowers : Array[Tower.TYPE] :
|
|
|
|
|
set(value):
|
|
|
|
|
allowedTowers = value
|
|
|
|
|
allowed_tower_has_change.emit()
|
2025-09-02 19:49:40 +02:00
|
|
|
|
|
|
|
|
|
2025-09-04 17:59:23 +02:00
|
|
|
var max_health : int = 50
|
|
|
|
|
var health : int = max_health :
|
|
|
|
|
set(value):
|
|
|
|
|
health = value
|
|
|
|
|
cube_integrity_changed.emit()
|
|
|
|
|
if health <= 0:
|
|
|
|
|
death()
|
|
|
|
|
var healthPercentage : int :
|
|
|
|
|
get():
|
|
|
|
|
return float(health) / float(max_health) * 100.0
|
2025-09-02 19:49:40 +02:00
|
|
|
|
|
|
|
|
|
2025-09-04 17:59:23 +02:00
|
|
|
var money : int = 0:
|
|
|
|
|
set(value):
|
|
|
|
|
money = value
|
|
|
|
|
money_changed.emit()
|
2025-09-02 19:49:40 +02:00
|
|
|
|
|
|
|
|
|
2025-09-04 17:59:23 +02:00
|
|
|
func _ready() -> void:
|
|
|
|
|
EventBus.player_has_won.connect(win)
|
|
|
|
|
Helper.preloadSceneInGlobal(towerPackedScenes, Helper.RESOURCE_TYPE.TOWER)
|
|
|
|
|
#Helper.preloadSceneInGlobal(towerPackedScenes, Helper.RESOURCE_TYPE.ENEMY)
|
2025-09-02 19:49:40 +02:00
|
|
|
|
|
|
|
|
|
2025-09-04 17:59:23 +02:00
|
|
|
func initTower(towerType: Tower.TYPE) -> Tower:
|
|
|
|
|
var tower : Tower = towerPackedScenes.get(towerType).instantiate()
|
|
|
|
|
towers.set(towerType, tower)
|
|
|
|
|
return tower
|
2025-09-02 19:49:40 +02:00
|
|
|
|
|
|
|
|
|
2025-09-04 17:59:23 +02:00
|
|
|
func resetGame() -> void:
|
|
|
|
|
towers.values().map(queue_free)
|
|
|
|
|
towers.clear()
|
|
|
|
|
# DANGER Don't use [method clear] or you will clear the level datas
|
|
|
|
|
allowedTowers = []
|
|
|
|
|
money = 0
|
|
|
|
|
health = max_health
|
2025-09-03 03:44:44 +02:00
|
|
|
|
2025-09-02 19:49:40 +02:00
|
|
|
|
2025-09-04 17:59:23 +02:00
|
|
|
func win():
|
|
|
|
|
Transition.goto("res://UI/win_screen.tscn")
|
|
|
|
|
resetGame()
|
2025-09-02 19:49:40 +02:00
|
|
|
|
2025-09-03 18:39:58 +02:00
|
|
|
|
2025-09-04 17:59:23 +02:00
|
|
|
func spendMoney(amount : int) -> bool:
|
|
|
|
|
if money > amount:
|
|
|
|
|
money -= amount
|
|
|
|
|
return true
|
|
|
|
|
return false
|
2025-09-02 19:49:40 +02:00
|
|
|
|
|
|
|
|
|
2025-09-04 17:59:23 +02:00
|
|
|
func death():
|
|
|
|
|
loose.emit()
|
|
|
|
|
Transition.goto("res://UI/defeat_screen.tscn")
|
|
|
|
|
resetGame()
|