Bull roll ability, console screen, tests
This commit is contained in:
+23
-8
@@ -1,19 +1,26 @@
|
||||
extends Node3D
|
||||
|
||||
signal matador_killed
|
||||
signal wave_changed(wave: int)
|
||||
|
||||
const MATADOR := preload("res://Matador.tscn")
|
||||
const RESPAWN_COOLDOWN := 8.0
|
||||
|
||||
var _respawn_cooldown: float = 0.0
|
||||
var _wave_count: int = 1
|
||||
var _spawn_count: int = 1 # matadors in the current wave — doubles on each clear
|
||||
var _wave: int = 1 # wave number, surfaced on the HUD
|
||||
var _alive: int = 0
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
add_to_group(&"matador_spawn")
|
||||
_wave_count = maxi(1, int(DP.f("mat_spawn_count")))
|
||||
_spawn.call_deferred()
|
||||
_spawn_count = maxi(1, int(DP.f("mat_spawn_count")))
|
||||
_start_wave(1)
|
||||
|
||||
|
||||
# Latest wave number, for a HUD that connects after the first wave has begun.
|
||||
func current_wave() -> int:
|
||||
return _wave
|
||||
|
||||
|
||||
func _process(delta: float) -> void:
|
||||
@@ -27,8 +34,16 @@ func _unhandled_input(event: InputEvent) -> void:
|
||||
reset_spawn()
|
||||
|
||||
|
||||
# Announce a wave and spawn its matadors. Deferred spawn keeps it safe to call
|
||||
# from _ready and from inside a kill handler mid-signal.
|
||||
func _start_wave(number: int) -> void:
|
||||
_wave = number
|
||||
wave_changed.emit(_wave)
|
||||
_spawn.call_deferred()
|
||||
|
||||
|
||||
func _spawn() -> void:
|
||||
var positions := _spread_positions(_wave_count)
|
||||
var positions := _spread_positions(_spawn_count)
|
||||
for pos: Vector3 in positions:
|
||||
_spawn_at(pos)
|
||||
|
||||
@@ -57,14 +72,14 @@ func _on_matador_killed() -> void:
|
||||
matador_killed.emit()
|
||||
_alive -= 1
|
||||
if _alive <= 0:
|
||||
_wave_count *= 2
|
||||
_spawn.call_deferred()
|
||||
_spawn_count *= 2
|
||||
_start_wave(_wave + 1)
|
||||
|
||||
|
||||
func reset_spawn() -> void:
|
||||
for m: Node in get_tree().get_nodes_in_group(&"matador"):
|
||||
m.queue_free()
|
||||
await get_tree().process_frame
|
||||
_wave_count = maxi(1, int(DP.f("mat_spawn_count")))
|
||||
_spawn_count = maxi(1, int(DP.f("mat_spawn_count")))
|
||||
_alive = 0
|
||||
_spawn()
|
||||
_start_wave(1)
|
||||
|
||||
Reference in New Issue
Block a user