diff --git a/Levels/Scripts/WorldManager.gd b/Levels/Scripts/WorldManager.gd index cd9626c..8a40ae7 100644 --- a/Levels/Scripts/WorldManager.gd +++ b/Levels/Scripts/WorldManager.gd @@ -39,7 +39,8 @@ func _process(_delta: float) -> void: STATE.SPAWNING when troopTimer.is_stopped(): state = STATE.FIGHT STATE.FIGHT when enemiesAlive == 0: - $SFX/SFXWinner.play() + if wave != level.waves.size(): + $SFX/SFXWinner.play() EventBus.wave_finished.emit() state = STATE.WAVE_END STATE.WAVE_END when wave == level.waves.size(): @@ -92,16 +93,9 @@ func spawnEnemy(enemyScene: PackedScene, laneToSpawn: int, delay: float) -> void var enemy : PathFollow3D = createEnemy(enemyScene) if delay > 0: - var enemyTimer : Timer = createTimer(delay) - enemyTimer.timeout.connect( - func(): - paths[laneToSpawn].add_child(enemy) - enemyTimer.queue_free() - ) - add_child(enemyTimer) - else: - paths[laneToSpawn].add_child(enemy) + await get_tree().create_timer(delay).timeout + paths[laneToSpawn].add_child(enemy) enemiesAlive += 1 @@ -113,15 +107,6 @@ func createEnemy(enemyScene: PackedScene) -> PathFollow3D : return PF3D -func createTimer(delay: float) -> Timer : - var timer : Timer = Timer.new() - timer.wait_time = delay - timer.one_shot = true - timer.autostart = true - - return timer - - func addMap(mapScene : PackedScene) -> void: var map : Map = mapScene.instantiate() add_child(map) diff --git a/Towers/Tower.gd b/Towers/Tower.gd index 36f135a..5c5d7f2 100644 --- a/Towers/Tower.gd +++ b/Towers/Tower.gd @@ -55,7 +55,6 @@ var energy : float : energy_changed.emit() var availableTargets : Array[Enemy] -var target : Enemy var is_exhausted : bool = false var is_rest : bool : get(): return not energyRecoveryCooldown.is_stopped() @@ -80,15 +79,15 @@ func _ready() -> void: func _process(_delta: float) -> void: - if visible && $AttackCooldown.is_stopped() && builded && is_instance_valid(target): + if visible && $AttackCooldown.is_stopped() && builded: shoot() -func get_available_upgrades() -> Array[TowerUpgrade]: - return upgrades.filter(func(u: TowerUpgrade): u.isLevelMax) - - func shoot() -> void: + var target : Enemy = choose_target() + if not target: + return + energy -= energy_cost var projectile : Projectile = projectileScene.instantiate() projectile.loadProjectile(projectileRessource, target) @@ -116,12 +115,14 @@ func in_action() -> void: energyRecoveryCooldown.stop() -func choose_target() -> void: - target = null +func choose_target() -> Enemy: + var target : Enemy = null for enemy in availableTargets: if not target || enemy.path.progress > target.path.progress: target = enemy + return target + func build() -> bool: if builded || not Game.spendMoney(price): @@ -138,13 +139,11 @@ func build() -> bool: func onBodyEntered(body: Node3D) -> void: if body is Enemy: availableTargets.append(body) - choose_target() func onBodyExited(body: Node3D) -> void: if body is Enemy: availableTargets.erase(body) - choose_target() func toggleConnection(activate : bool) -> void: @@ -156,4 +155,3 @@ func toggleConnection(activate : bool) -> void: $Range.body_entered.disconnect(onBodyEntered) $Range.body_exited.disconnect(onBodyExited) availableTargets.clear() - target = null