Files
settled-reach/docs/sprints/sprint-2/server.md
T
jpmschweitzerandClaude Opus 4.6 7f97cb7ce3 docs(sprints): add Sprint 2 "See" briefings for server, client, joint
Sprint 2 goal: fog of perception working through the bridge. Server
computes LOS visibility, client renders fog. Carries over #236 and #81
from Sprint 1.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-11 21:45:38 +01:00

58 lines
3.4 KiB
Markdown

# Sprint 2: See — Server Tasks
**Goal:** Fog of perception working through the bridge — server computes LOS visibility, client renders fog.
**Branch:** `server`
**Agents:** Dudley (simulation), Oscar (networking)
## Carry-over from Sprint 1
| # | Title | Status | Notes |
|---|-------|--------|-------|
| #236 | Tile collision system | ready | WalkabilityMap exists, needs wall data for LOS |
## New Tickets
| # | Title | Blocked by |
|---|-------|------------|
| #110 | Shadowcasting algorithm - server | #236 (walls needed for LOS) |
| #111 | Vision cone implementation | #110 |
| #112 | Observer visibility query | #111 |
| #25 | Game clock and day-phase system | — (SimulationTime exists, needs day-phase integration into snapshot) |
Use `db/connectors/ticket show <id>` for full details.
## Key Decisions
- `decisions/perception.md` — D-011 (fog non-negotiable), D-015 (locked camera + vision cone), D-018 (three-range sound model)
- `decisions/architecture.md` — D-010 (information boundaries), D-020 (ObserverSnapshot), D-031 (time system)
## Open Questions to Resolve Early
- **Q-018: Shadowcasting algorithm selection** — symmetric (Albert Ford) vs recursive. Needs benchmarking at 150x150 scale. Resolve before #110 starts.
- **Q-019: Entity ID stability** — how `entity_id: u64` maps to bevy `Entity`. Affects client entity lifecycle.
- **Q-021: Tick budget overflow policy** — what happens when a tick exceeds 100ms.
## Notes
- **#236 (carry-over):** `WalkabilityMap` and `validate_movement` are already implemented (`server/src/simulation/movement.rs`). The remaining work is integrating wall/blocked tile data that the shadowcasting algorithm needs. Walls must be both collision barriers AND LOS occluders.
- **#110:** Core of the sprint. Implement LOS calculation per z-level. The `WalkabilityMap` stores tile walkability in chunks — the shadowcasting system reads this (or a parallel opacity map) to determine what blocks vision. Output: set of visible tiles for a given observer position.
- **#111:** Vision cone sectors (forward/peripheral/behind per D-015). Facing direction component needed. Forward = full LOS range, peripheral = reduced range + dimmer, behind = blind. The cone modulates the shadowcast output.
- **#112:** Given an observer entity, return visible entities and tiles. This is the system that populates `ObserverSnapshot.entities` with only what the observer can see. Currently the snapshot includes ALL entities (no filtering). This ticket adds the filter.
- **#25:** `SimulationTime` already exists (`server/src/simulation/time.rs`) with tick/pause/day-phase. Remaining: include time data in `ObserverSnapshot` so the client can display it. May also need `FacingDirection` component for vision cone.
- **ObserverSnapshot expansion:** The `ObserverSnapshot` struct (`server/src/bridge/types.rs`) needs new fields: `visible_tiles: Vec<VisibleTile>` (or bitmap), `player_facing: Direction`, `game_time: TimeData`. Design this before implementation starts.
## Dependency Chain
```
#236 (walls) → #110 (shadowcast) → #111 (vision cone) → #112 (observer query)
#25 (time) → standalone, parallel track
```
## PR Workflow
When ready to submit, create a PR with `tea` CLI. **All flags are required** to avoid TTY prompts (see CLAUDE.md "Gitea access" section):
```bash
tea pr create --repo jpmschweitzer/settled-reach --login schweitz --title "feat(simulation): description" --description "body" --base main --head server
```