2ce11f8f4d
StatsPlugin loads stats on startup, persists them on every GameWonEvent and abandoned NewGameRequestEvent (>=1 move, not won), and provides a full-window overlay toggled with `S` showing games played/won, win rate, streak, best score, fastest win, and average win time. The storage path is configurable via StatsPlugin::storage_path: the default ctor uses dirs::data_dir(); StatsPlugin::headless() disables I/O entirely so tests don't read or overwrite the user's real stats.json. record_abandoned runs before GameMutation so it reads move_count before handle_new_game clobbers it. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
25 lines
885 B
Rust
25 lines
885 B
Rust
//! Bevy integration layer for Solitaire Quest.
|
|
|
|
pub mod animation_plugin;
|
|
pub mod card_plugin;
|
|
pub mod events;
|
|
pub mod game_plugin;
|
|
pub mod input_plugin;
|
|
pub mod layout;
|
|
pub mod resources;
|
|
pub mod stats_plugin;
|
|
pub mod table_plugin;
|
|
|
|
pub use animation_plugin::{AnimationPlugin, CardAnim};
|
|
pub use card_plugin::{CardEntity, CardLabel, CardPlugin};
|
|
pub use events::{
|
|
AchievementUnlockedEvent, CardFlippedEvent, DrawRequestEvent, GameWonEvent, MoveRequestEvent,
|
|
NewGameRequestEvent, StateChangedEvent, UndoRequestEvent,
|
|
};
|
|
pub use game_plugin::{GameMutation, GamePlugin};
|
|
pub use input_plugin::InputPlugin;
|
|
pub use layout::{compute_layout, Layout, LayoutResource};
|
|
pub use resources::{DragState, GameStateResource, SyncStatus, SyncStatusResource};
|
|
pub use stats_plugin::{StatsPlugin, StatsResource, StatsScreen};
|
|
pub use table_plugin::{PileMarker, TableBackground, TablePlugin};
|