Win, lose screen. Game version info. Matador a lot more aggressive/wins easier (tweaks needed). No more score/combo/waves

This commit is contained in:
2026-07-30 12:39:51 +03:00
parent ebb6ec6335
commit bf7a454ad0
28 changed files with 1229 additions and 451 deletions
+9 -43
View File
@@ -1,50 +1,24 @@
extends Node3D
signal matador_killed
signal wave_changed(wave: int)
signal all_defeated
const MATADOR := preload("res://Matador.tscn")
const RESPAWN_COOLDOWN := 8.0
var _respawn_cooldown: float = 0.0
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 _spawn_count: int = 1
var _alive: int = 0
var _resolved: bool = false
func _ready() -> void:
add_to_group(&"matador_spawn")
_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:
_respawn_cooldown = maxf(0.0, _respawn_cooldown - delta)
func _unhandled_input(event: InputEvent) -> void:
if event is InputEventKey and event.pressed and not event.echo:
if event.physical_keycode == KEY_R and _respawn_cooldown <= 0.0:
_respawn_cooldown = RESPAWN_COOLDOWN
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)
# Deferred so it's safe from _ready and matches the previous spawn timing.
_spawn.call_deferred()
func _spawn() -> void:
var positions := _spread_positions(_spawn_count)
for pos: Vector3 in positions:
for pos: Vector3 in _spread_positions(_spawn_count):
_spawn_at(pos)
@@ -68,18 +42,10 @@ func _spawn_at(pos: Vector3) -> void:
_alive += 1
# Every matador down = the bull wins. No waves, no respawns — one clean arena.
func _on_matador_killed() -> void:
matador_killed.emit()
_alive -= 1
if _alive <= 0:
_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
_spawn_count = maxi(1, int(DP.f("mat_spawn_count")))
_alive = 0
_start_wave(1)
if _alive <= 0 and not _resolved:
_resolved = true
all_defeated.emit()