@tool extends Node ## Game signal cube_integrity_changed signal money_changed signal loose signal allowed_tower_has_change var towerPackedScenes : Dictionary var enmies : Dictionary var towers : Dictionary var allowedTowers : Array[Tower.TYPE] : set(value): allowedTowers = value allowed_tower_has_change.emit() 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 var money : int = 0: set(value): money = value money_changed.emit() func _ready() -> void: EventBus.player_has_won.connect(win) Helper.preloadSceneInGlobal(towerPackedScenes, Helper.RESOURCE_TYPE.TOWER) #Helper.preloadSceneInGlobal(towerPackedScenes, Helper.RESOURCE_TYPE.ENEMY) func initTower(towerType: Tower.TYPE) -> Tower: var tower : Tower = towerPackedScenes.get(towerType).instantiate() towers.set(towerType, tower) return tower 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 func win(): Transition.goto("res://UI/win_screen.tscn") resetGame() func spendMoney(amount : int) -> bool: if money > amount: money -= amount return true return false func death(): loose.emit() Transition.goto("res://UI/defeat_screen.tscn") resetGame()