Signal Bus Reference
Complete reference of all Events signals: who emits them, who listens, and what parameters they carry.
How to Use
# Emit from anywhere
Events.player_damaged.emit(10, "enemy.swarmer")
# Listen from anywhere
func _ready() -> void:
Events.player_damaged.connect(_on_player_damaged)
func _on_player_damaged(amount: float, source_id: String) -> void:
pass
Signal List
Phase 1 — Foundation
| Signal | Params | Emitted By | Listened By |
| content_loaded | () | ContentRegistry | Any system waiting for data |
| mod_loaded | (mod_path: String) | ContentRegistry | Debug/logging |
| player_spawned | (player: Node2D) | Level | Camera, UI |
| player_moved | (position: Vector2) | Player | Camera, debug |
| player_dashed | (direction: Vector2) | Player | Audio, particles |
Phase 2 — Combat & Enemies
| Signal | Params | Emitted By | Listened By |
| wave_started | (wave_index: int, total_enemies: int) | WaveDirector, Spawner | UI, Level, Player |
| wave_ended | (wave_index: int) | WaveDirector, Spawner | UI, Level |
| enemy_spawned | (enemy_id: String, position: Vector2) | Enemy._ready() | ScoreTracker, BeatClock |
| enemy_died | (enemy_id: String, position: Vector2) | Enemy._die() | ScoreTracker, Spawner, FortressController |
| enemy_hit | (enemy_node: Node, amount: float, source_id: String) | Weapon | ScoreTracker |
| projectile_fired | (projectile_id: String, position: Vector2, direction: Vector2) | Weapon | Audio, debug |
| player_damaged | (amount: float, source_id: String) | Enemy, hazard | Player, UI, DebugOverlay |
| player_died | (position: Vector2) | Player | Level, GameOverOverlay, Camera |
| player_respawned | (position: Vector2) | Respawn system | UI, Camera |
Phase 3 — Fortress & Building
| Signal | Params | Emitted By | Listened By |
| fortress_damaged | (amount: float, source_id: String) | Enemy, projectile | FortressController |
| fortress_integrity_changed | (new_integrity: float, max_integrity: float) | FortressController | UI, BeatClock |
| module_placed | (module_id: String, attachment_point_id: String) | ModuleController | UI, audio |
| module_destroyed | (module_id: String, attachment_point_id: String) | Module | UI, FortressController |
| module_sold | (module_id: String, attachment_point_id: String, refund_amount: int) | BuildModeUI | UI, FortressController |
| module_damaged | (target_node: Node, amount: float, source_id: String) | Enemy, projectile | UI, FortressController |
| scrap_changed | (new_total: int) | FortressController | UI |
| scrap_pickup_spawned | (amount: int, position: Vector2) | Enemy._die() | — |
| scrap_pickup_collected | (amount: int) | ScrapPickup | FortressController, UI |
| stop_budget_changed | (current: float, max: float) | FortressController | UI |
| fortress_halted | () | FortressController | Audio, TimeController |
| fortress_resumed | () | FortressController | Audio, TimeController |
| slow_walker_appeared | () | SlowWalkerDirector | Audio, UI |
| slow_walker_reached | () | SlowWalkerDirector | Game over |
| wave_loop_advanced | (loop_index: int, multiplier: float) | WaveDirector | FortressController, UI |
| game_over | (reason: String, stats: Dictionary) | FortressController | GameOverOverlay, SaveSystem |
| game_restarted | () | SceneManager | All systems reset |
Phase 4+ — Modes, Scanning, Club, Persistence
| Signal | Params | Emitted By | Listened By |
| mode_changed | (from_mode: String, to_mode: String) | ModeController | CameraController, Player, UI |
| camera_zoom_changed | (new_zoom: float) | CameraController | — |
| time_scale_changed | (new_scale: float) | TimeController | — |
| player_docked | (tower_position: Vector2) | ModeController | CameraController |
| player_undocked | () | ModeController | CameraController |
| scan_started | (scannable_id: String) | ScannerController | UI |
| scan_progress | (scannable_id: String, percent: float) | ScannerController | UI |
| scan_completed | (scannable_id: String, fragment_id: String, unlocked_blueprint_id: String) | ScannerController | UI, JournalPanel |
| scan_cancelled | (scannable_id: String) | ScannerController | UI |
| fragment_revealed | (fragment_id: String) | ScannerController | JournalPanel |
| blueprint_unlocked | (building_id: String) | ScannerController, SaveSystem | BuildModeUI, UI |
| heartbeat_bpm_changed | (new_bpm: float) | BeatClock | AudioController |
| critical_state_entered | (reason: String) | BeatClock | CriticalVignette, UI |
| critical_state_exited | () | BeatClock | CriticalVignette, UI |
| club_entered | () | ClubDoor | Audio, TimeController |
| club_exited | () | ExitDoor | Audio, TimeController |
| dialogue_started | (npc_id: String, dialogue_id: String) | NPC | DialoguePanel |
| dialogue_ended | (npc_id: String) | NPC | DialoguePanel |
| trade_completed | (npc_id: String, items_spent: int, blueprint_unlocked_id: String) | NPC | UI, FortressController |
| save_started | (reason: String) | SaveSystem | UI |
| save_completed | (filepath: String) | SaveSystem | UI |
| save_failed | (error: String) | SaveSystem | UI |
| world_loaded | () | SaveSystem | All systems |
| quit_requested | () | PauseMenu | SaveSystem |