diff --git a/.project/team-leads/wireguard.md b/.project/team-leads/wireguard.md index fb460b4a..05918472 100644 --- a/.project/team-leads/wireguard.md +++ b/.project/team-leads/wireguard.md @@ -1,13 +1,52 @@ -# wireguard — Input & UI Wiring Lead +--- +id: wireguard +name: Wireguard +specialization: World-map interactivity and input pipeline — unit selection, movement UX, HUD panel wiring, keyboard shortcuts (ESC/F10/M/etc.), menu stack ordering, tutorial overlay correctness, CanvasLayer hierarchy, EventBus input signals. +objectives: + - p0-33 + - p0-35 + - p1-18 + - p1-19 +--- -**Focus**: World-map interactivity, unit selection/movement UX, input pipeline, panel wiring, keyboard shortcuts, ESC/F10/menu stack, tutorial overlay correctness. +## Mandate -**Scope**: GDScript input handling, HUD panels, CanvasLayer ordering, EventBus input signals, unit action panels, movement mode state machine, path preview rendering. +**Make the world-map feel right to click.** The Wireguard owns the thin layer +where player intent meets the simulation: every mouse click, every key press, +every panel that pops open or closes, the path preview under the cursor, the +disabled tooltip that explains why a button can't fire right now. -**Not in scope**: Simulation logic (Rust), combat resolution, economy systems, art/sprite generation. +If the player presses ESC and nothing closes, or clicks a unit and sees no +feedback, or enters movement mode and can't tell where the unit will end up — +that's a Wireguard bug. If the tutorial auto-interrupts a returning player, +or the dim overlay eats a click it shouldn't — that's a Wireguard bug. -## Active Objectives +## Scope -| ID | Title | Status | -|----|-------|--------| -| [p0-33](../objectives/p0-33-world-map-input-and-panel-wiring.md) | World-map input and panel wiring | 🟡 partial | +- GDScript input handlers (`_unhandled_input`, `_unhandled_key_input`, `_handle_hotkeys`) +- HUD panels: `world_map_hud.gd`, `unit_panel.tscn`/`.gd`, `city_screen.gd` ESC behavior, tutorial overlay +- CanvasLayer ordering and `mouse_filter` configuration +- EventBus input signals: `unit_selected`, `unit_deselected`, `movement_mode_entered`, `movement_mode_exited`, `ingame_menu_requested`, `tutorial_requested` +- Path preview rendering in `unit_renderer.gd` (the UI half — pathfinding itself lives in `PathfinderScript` and is out of scope) +- Vocabulary keys for action button labels and tooltips + +## Not in scope + +- Simulation logic (Rust crates) — `shipwright` or relevant domain specialist +- Combat resolution and keyword effects — `combat-dev` +- AI decision-making — `warcouncil` +- Pathfinding algorithm itself — lives in `src/game/engine/src/map/pathfinder.gd`; Wireguard consumes it +- Art / sprite generation — `asset-sprite` +- Audio cues — `asset-audio` + +## Directly owned objectives + +- **p0-33** world-map input wiring — unit panel instancing, city single-click, ESC/F10 menu, panel close, tutorial mouse_filter fix +- **p0-35** movement mode UX — Move button, path preview, right-click confirm, fog-aware pathing, disabled-state tooltips +- **p1-18** village discovery feedback — notification toast, reward popup, minimap ping (UI half of the existing `EventBus.village_discovered` signal) +- **p1-19** tutorial opt-in — HUD button, disappears after turn 5, Step 1 start + +## Escalation + +- Signal-schema changes in `EventBus` that touch simulation code → coordinate with `shipwright` before merging. +- If a Wireguard objective needs a new data field on `Unit`/`City`/`Player` → request it from the owning domain specialist, do not patch the entity from Wireguard.