refactor: better timer for spawn enemy

This commit is contained in:
Varylios 2025-09-07 23:45:43 +02:00
parent 3452c943a5
commit c2eccc97fc
2 changed files with 13 additions and 30 deletions

View file

@ -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)

View file

@ -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