refactor: better timer for spawn enemy
This commit is contained in:
parent
3452c943a5
commit
c2eccc97fc
2 changed files with 13 additions and 30 deletions
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue