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.SPAWNING when troopTimer.is_stopped():
|
||||||
state = STATE.FIGHT
|
state = STATE.FIGHT
|
||||||
STATE.FIGHT when enemiesAlive == 0:
|
STATE.FIGHT when enemiesAlive == 0:
|
||||||
$SFX/SFXWinner.play()
|
if wave != level.waves.size():
|
||||||
|
$SFX/SFXWinner.play()
|
||||||
EventBus.wave_finished.emit()
|
EventBus.wave_finished.emit()
|
||||||
state = STATE.WAVE_END
|
state = STATE.WAVE_END
|
||||||
STATE.WAVE_END when wave == level.waves.size():
|
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)
|
var enemy : PathFollow3D = createEnemy(enemyScene)
|
||||||
|
|
||||||
if delay > 0:
|
if delay > 0:
|
||||||
var enemyTimer : Timer = createTimer(delay)
|
await get_tree().create_timer(delay).timeout
|
||||||
enemyTimer.timeout.connect(
|
|
||||||
func():
|
|
||||||
paths[laneToSpawn].add_child(enemy)
|
|
||||||
enemyTimer.queue_free()
|
|
||||||
)
|
|
||||||
add_child(enemyTimer)
|
|
||||||
else:
|
|
||||||
paths[laneToSpawn].add_child(enemy)
|
|
||||||
|
|
||||||
|
paths[laneToSpawn].add_child(enemy)
|
||||||
enemiesAlive += 1
|
enemiesAlive += 1
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -113,15 +107,6 @@ func createEnemy(enemyScene: PackedScene) -> PathFollow3D :
|
||||||
return PF3D
|
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:
|
func addMap(mapScene : PackedScene) -> void:
|
||||||
var map : Map = mapScene.instantiate()
|
var map : Map = mapScene.instantiate()
|
||||||
add_child(map)
|
add_child(map)
|
||||||
|
|
|
||||||
|
|
@ -55,7 +55,6 @@ var energy : float :
|
||||||
energy_changed.emit()
|
energy_changed.emit()
|
||||||
|
|
||||||
var availableTargets : Array[Enemy]
|
var availableTargets : Array[Enemy]
|
||||||
var target : Enemy
|
|
||||||
var is_exhausted : bool = false
|
var is_exhausted : bool = false
|
||||||
var is_rest : bool :
|
var is_rest : bool :
|
||||||
get(): return not energyRecoveryCooldown.is_stopped()
|
get(): return not energyRecoveryCooldown.is_stopped()
|
||||||
|
|
@ -80,15 +79,15 @@ func _ready() -> void:
|
||||||
|
|
||||||
|
|
||||||
func _process(_delta: float) -> void:
|
func _process(_delta: float) -> void:
|
||||||
if visible && $AttackCooldown.is_stopped() && builded && is_instance_valid(target):
|
if visible && $AttackCooldown.is_stopped() && builded:
|
||||||
shoot()
|
shoot()
|
||||||
|
|
||||||
|
|
||||||
func get_available_upgrades() -> Array[TowerUpgrade]:
|
|
||||||
return upgrades.filter(func(u: TowerUpgrade): u.isLevelMax)
|
|
||||||
|
|
||||||
|
|
||||||
func shoot() -> void:
|
func shoot() -> void:
|
||||||
|
var target : Enemy = choose_target()
|
||||||
|
if not target:
|
||||||
|
return
|
||||||
|
|
||||||
energy -= energy_cost
|
energy -= energy_cost
|
||||||
var projectile : Projectile = projectileScene.instantiate()
|
var projectile : Projectile = projectileScene.instantiate()
|
||||||
projectile.loadProjectile(projectileRessource, target)
|
projectile.loadProjectile(projectileRessource, target)
|
||||||
|
|
@ -116,12 +115,14 @@ func in_action() -> void:
|
||||||
energyRecoveryCooldown.stop()
|
energyRecoveryCooldown.stop()
|
||||||
|
|
||||||
|
|
||||||
func choose_target() -> void:
|
func choose_target() -> Enemy:
|
||||||
target = null
|
var target : Enemy = null
|
||||||
for enemy in availableTargets:
|
for enemy in availableTargets:
|
||||||
if not target || enemy.path.progress > target.path.progress:
|
if not target || enemy.path.progress > target.path.progress:
|
||||||
target = enemy
|
target = enemy
|
||||||
|
|
||||||
|
return target
|
||||||
|
|
||||||
|
|
||||||
func build() -> bool:
|
func build() -> bool:
|
||||||
if builded || not Game.spendMoney(price):
|
if builded || not Game.spendMoney(price):
|
||||||
|
|
@ -138,13 +139,11 @@ func build() -> bool:
|
||||||
func onBodyEntered(body: Node3D) -> void:
|
func onBodyEntered(body: Node3D) -> void:
|
||||||
if body is Enemy:
|
if body is Enemy:
|
||||||
availableTargets.append(body)
|
availableTargets.append(body)
|
||||||
choose_target()
|
|
||||||
|
|
||||||
|
|
||||||
func onBodyExited(body: Node3D) -> void:
|
func onBodyExited(body: Node3D) -> void:
|
||||||
if body is Enemy:
|
if body is Enemy:
|
||||||
availableTargets.erase(body)
|
availableTargets.erase(body)
|
||||||
choose_target()
|
|
||||||
|
|
||||||
|
|
||||||
func toggleConnection(activate : bool) -> void:
|
func toggleConnection(activate : bool) -> void:
|
||||||
|
|
@ -156,4 +155,3 @@ func toggleConnection(activate : bool) -> void:
|
||||||
$Range.body_entered.disconnect(onBodyEntered)
|
$Range.body_entered.disconnect(onBodyEntered)
|
||||||
$Range.body_exited.disconnect(onBodyExited)
|
$Range.body_exited.disconnect(onBodyExited)
|
||||||
availableTargets.clear()
|
availableTargets.clear()
|
||||||
target = null
|
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue