browser-entry/playback/snapshot

Snapshot synchronization helpers for playback.

The worker streams packed typed-array snapshots, while the browser renderer wants stable mutable arrays of pipes and birds. This module performs that translation in place so playback can stay fast and allocation-light.

The design goal is stable browser-side state with minimal churn: allocate when the population grows, then mutate in place for the steady-state render loop.

Snapshot flow:

flowchart LR
    Worker["worker snapshot\npacked typed arrays"] --> Hydrate["applyPlaybackSnapshot"]
    Hydrate --> Pipes["sync pipes in place"]
    Hydrate --> Birds["sync birds in place"]
    Pipes --> RenderState["stable PopulationRenderState"]
    Birds --> RenderState

Minimal example:

applyPlaybackSnapshot(renderState, payload.snapshot);

browser-entry/playback/snapshot/playback.snapshot.services.ts

applyPlaybackSnapshot

applyPlaybackSnapshot(
  renderState: PopulationRenderState,
  snapshot: EvolutionPlaybackStepSnapshot,
): void

Applies worker snapshot data to the mutable playback render state.

This is the top-level hydration step for one frame: copy scalar frame fields, then synchronize packed pipe and bird arrays into reusable browser-side objects.

Parameters:

Returns: Nothing.

syncPlaybackSnapshotBirds

syncPlaybackSnapshotBirds(
  renderState: PopulationRenderState,
  snapshot: EvolutionPlaybackStepSnapshot,
): void

Synchronizes packed bird snapshot fields into the reusable render-state bird array.

This mirrors the pipe strategy: keep a stable array shape when possible and update fields in place from the packed worker buffers.

Parameters:

Returns: Nothing.

syncPlaybackSnapshotPipes

syncPlaybackSnapshotPipes(
  renderState: PopulationRenderState,
  snapshot: EvolutionPlaybackStepSnapshot,
): void

Synchronizes packed pipe snapshot fields into the reusable render-state pipe array.

Instead of recreating pipe objects every frame, the browser grows the array as needed and then mutates the existing records in place.

Parameters:

Returns: Nothing.

browser-entry/playback/snapshot/playback.snapshot.summary.utils.ts

Small summary helpers derived from hydrated playback render state.

Once a packed snapshot has been synchronized into the browser render state, these helpers compute simple aggregate values needed by the HUD and playback reporting flow.

resolveLeaderFramesSurvived

resolveLeaderFramesSurvived(
  renderState: PopulationRenderState,
): number

Resolves the maximum survived-frame count in the current render state.

This is the "leader frames survived" view of the current frame: the best raw frame count among all birds currently represented in the render state.

Parameters:

Returns: Maximum frames survived by any bird.

Generated from source JSDoc • GitHub