• v0.15.0 — in-engine replay playback, Klondike solver, Cinephile

    funman300 released this 2026-05-05 23:07:15 +00:00 | 467 commits to master since this release

    Closes the post-v0.14.0 candidate list. The major new player-
    facing pieces are the working "Watch replay" button (with Stop +
    progress overlay), the Klondike solver behind a "Winnable deals
    only" toggle, and a rolling history of the last 8 wins. Under the
    hood, the Bevy default-features trim drops 51 transitive crates.

    Added

    • In-engine replay playback. ReplayPlaybackPlugin + ReplayPlaybackState
      state machine resets the live game to the recorded deal and
      ticks through replay.moves at 0.45 s/move firing canonical
      MoveRequestEvent / DrawRequestEvent per recorded move. Recording
      suppression keeps replays from re-recording themselves.
    • Replay overlay banner. ReplayOverlayPlugin anchors a top-of-window
      banner during playback with "Replay" label, "Move N of M"
      progress, and a Stop button. Z-order leaves modals openable
      during playback.
    • Rolling replay history at <data_dir>/replays.json capped at 8.
      Legacy latest_replay.json migrates forward. Stats selector with
      Prev / Next chips lets the player revisit older wins.
    • Cinephile achievement (#19). Unlocks the first time playback
      transitions Playing → Completed naturally; Stop button doesn't
      count.
    • Klondike solver in solitaire_core::solver. Iterative DFS, 64-bit
      canonical state hash, three-state SolverResult, two budget knobs.
      Median solve 2 ms, pathological 120 ms.
    • "Winnable deals only" toggle in Settings → Gameplay (default
      off). handle_new_game retries seeds up to SOLVER_DEAL_RETRY_CAP
      (50) when on. Daily / replays / explicit-seed bypass.

    Changed

    • Bevy default-feature trim. default-features = false plus a
      curated explicit feature list drops 51 transitive crates
      including the bevy_audio → rodio → cpal 0.15 + symphonia chain.

    By the numbers: 1178 passing tests (was 1134 at v0.14.0), zero
    clippy warnings.

    Downloads