T5: Add radar harness + wrap radar_lock #183

Open
opened 2026-09-19 14:49:08 +02:00 by SirStone · 1 comment
Owner

Parent

#165 (ModularBot wayfinder map)

What to build

Radar trait and harness, plus adapter for existing radar_lock:

  • Radar trait (common_libs/radar_harness/): RadarModule concept with computeScan(state) → float (radar turn rate). Harness calls every tick, applies turn.
  • radar_lock adapter (common_libs/radars/radar_lock_module.nim): Thin wrapper around existing common_libs/radar_lock. Adapts doRadar() into RadarModule interface.

Wire into ModularBot, replacing direct radar_lock call.

Acceptance criteria

  • RadarModule concept defined and importable
  • Radar harness applies module output every tick
  • radar_lock adapter wraps existing doRadar() into interface
  • ModularBot uses radar harness instead of direct radar_lock call
  • Radar still locks on enemy reliably

Blocked by

#179 (T1)

## Parent #165 (ModularBot wayfinder map) ## What to build Radar trait and harness, plus adapter for existing radar_lock: - **Radar trait** (`common_libs/radar_harness/`): `RadarModule` concept with `computeScan(state) → float` (radar turn rate). Harness calls every tick, applies turn. - **radar_lock adapter** (`common_libs/radars/radar_lock_module.nim`): Thin wrapper around existing `common_libs/radar_lock`. Adapts `doRadar()` into RadarModule interface. Wire into ModularBot, replacing direct radar_lock call. ## Acceptance criteria - [ ] RadarModule concept defined and importable - [ ] Radar harness applies module output every tick - [ ] radar_lock adapter wraps existing doRadar() into interface - [ ] ModularBot uses radar harness instead of direct radar_lock call - [ ] Radar still locks on enemy reliably ## Blocked by #179 (T1)
SirStone added the ready-for-agent label 2026-09-19 14:49:08 +02:00
Author
Owner

Implemented and compiles clean.

Files created:

  • common_libs/radar_harness/radar_interface.nim — RadarModule concept with computeScan(module, state: WorldState): float; re-exports WorldState from gun_interface
  • common_libs/radars/radar_lock_module.nim — RadarLockModule adapter wrapping radar_lock.doRadar(); derives enemyBearing from WorldState coords; exposes init()

Files modified:

  • common_libs/gun_harness/gun_interface.nim — added selfRadarHeading: float to WorldState (needed by radar adapter)
  • ModularBot_garage/src/ModularBot.nim — replaced radar_lock direct import with radar_harness/radar_interface + radars/radar_lock_module; added radar: RadarLockModule field; buildState populates selfRadarHeading via getRadarDirection(); onRoundStarted calls bot.radar.init(); run calls bot.radar.computeScan(bot.lastState)

Build: nimble build passes.

Implemented and compiles clean. **Files created:** - `common_libs/radar_harness/radar_interface.nim` — `RadarModule` concept with `computeScan(module, state: WorldState): float`; re-exports `WorldState` from gun_interface - `common_libs/radars/radar_lock_module.nim` — `RadarLockModule` adapter wrapping `radar_lock.doRadar()`; derives `enemyBearing` from WorldState coords; exposes `init()` **Files modified:** - `common_libs/gun_harness/gun_interface.nim` — added `selfRadarHeading: float` to `WorldState` (needed by radar adapter) - `ModularBot_garage/src/ModularBot.nim` — replaced `radar_lock` direct import with `radar_harness/radar_interface` + `radars/radar_lock_module`; added `radar: RadarLockModule` field; `buildState` populates `selfRadarHeading` via `getRadarDirection()`; `onRoundStarted` calls `bot.radar.init()`; `run` calls `bot.radar.computeScan(bot.lastState)` Build: `nimble build` passes.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: SirStone/SirRoboGarage#183