Files
wlgol/openspec/changes/archive/2026-11-08-gol-simulation/design.md
T
arek b7120e67f2 docs: archive gol-simulation change and sync specs
Archive completed change and add gol-simulation main spec.
2026-11-08 15:57:21 +01:00

1.2 KiB

Design

Context

Input, placement, HiDPI, and grid are implemented. Simulation state (sim_paused, ACTION_PAUSE, ACTION_STEP, speed actions) exists but is unused. See proposal.md.

Goals / Non-Goals

Goals:

  • Conway tick loop with adjustable interval.
  • Pause/resume, stepping, speed control.
  • Paused-only cell editing via mouse, including drag painting.

Non-Goals:

  • Pattern detection or statistics.
  • Undo/redo.
  • Multi-threading.

Decisions

D1: Tick timing

  • Use monotonic clock in the frame loop; accumulate elapsed time; when >= interval, compute next generation and reset accumulator.

D2: Next generation buffer

  • Allocate a second grid buffer; compute into it, then swap pointers (or copy). Prefer swap of cells pointers with size unchanged.

D3: Editing while paused

  • Pointer button handler sets/clears cells if sim_paused; drag paints using motion events while button held.

D4: Speed bounds

  • Interval range 0.05s..1.0s (20 tps..1 tps), step factor 2.

D5: Default bindings

  • Add p, n, +/- to default config (merge).

Risks / Trade-offs

  • [Tick cost on large grids] -> grid is small (50x50), fine.
  • [Editing during tick race] -> editing only while paused avoids races.

Open Questions

None.