prototype vibe
This commit is contained in:
47
systems/wave_system.gd
Normal file
47
systems/wave_system.gd
Normal file
@@ -0,0 +1,47 @@
|
||||
extends Node
|
||||
|
||||
const WAVE_DURATION := 60.0
|
||||
|
||||
var tick_accumulator := 0.0
|
||||
|
||||
func _ready() -> void:
|
||||
EventBus.portal_defeated.connect(_on_portal_defeated)
|
||||
EventBus.invasion_ended.connect(_on_invasion_ended)
|
||||
call_deferred("_start_run")
|
||||
|
||||
func _start_run() -> void:
|
||||
if not GameState.run_initialized:
|
||||
GameState.current_wave = 1
|
||||
GameState.wave_timer_remaining = WAVE_DURATION
|
||||
GameState.run_initialized = true
|
||||
EventBus.run_started.emit(GameState.current_wave)
|
||||
EventBus.wave_started.emit(GameState.current_wave)
|
||||
|
||||
func _process(delta: float) -> void:
|
||||
if GameState.wave_timer_remaining <= 0:
|
||||
return
|
||||
GameState.wave_timer_remaining -= delta
|
||||
tick_accumulator += delta
|
||||
if tick_accumulator >= 1.0:
|
||||
tick_accumulator -= 1.0
|
||||
EventBus.wave_timer_tick.emit(max(0.0, GameState.wave_timer_remaining))
|
||||
if GameState.wave_timer_remaining <= 0:
|
||||
GameState.wave_timer_remaining = 0.0
|
||||
EventBus.wave_timer_tick.emit(0.0)
|
||||
|
||||
func _on_portal_defeated(portal: Node) -> void:
|
||||
if not portal.is_in_group("red_portal"):
|
||||
return
|
||||
_advance_wave()
|
||||
|
||||
func _on_invasion_ended(success: bool) -> void:
|
||||
if not success:
|
||||
return
|
||||
_advance_wave()
|
||||
|
||||
func _advance_wave() -> void:
|
||||
EventBus.wave_ended.emit(GameState.current_wave, true)
|
||||
GameState.current_wave += 1
|
||||
GameState.wave_timer_remaining = WAVE_DURATION
|
||||
tick_accumulator = 0.0
|
||||
EventBus.wave_started.emit(GameState.current_wave)
|
||||
Reference in New Issue
Block a user