Skip to content

Releases: royt93/Flutter_Game_Base_Project

0.6.6 — Sprite Arena pause and bullet guard

Choose a tag to compare

@royt93 royt93 released this 26 Oct 13:02

Changes

  • Fix Sprite Arena example accepting Attack while paused or still loading. The button is disabled and its callback re-checks game state.
  • Fix the example's 24-bullet limit ignoring bullets queued for mounting. Pending bullets now count toward the limit, and removing a bullet releases its slot.
  • Add regression coverage for paused attack spam, pending-bullet limits and slot reuse, disabled loading/paused controls, stale callbacks, and system background/foreground attack locking. No public package API changed.

Verification

  • Root non-golden: 3,502 tests pass. Example: 330 tests pass. Analyzers, API compatibility and quality gates pass.
  • CI run 40322312945 on 68c4a142 passes all three jobs. consumer-smoke timed out once on the emulator; the failed job passed on rerun.
  • TECNO KJ7 (Android 14): smoke test and manual lifecycle checks pass. Attack remains disabled across Pause/background/foreground; five paused taps produce no queued burst. Step screenshots and existing evidence are in the FEAT-101 evidence directory. No rotation/screen-lock test.
  • Not yet published to pub.dev.

🤖 Generated with Claude Code

0.6.5 — Mini-game hub and Sprite Arena

Choose a tag to compare

@royt93 royt93 released this 26 Oct 03:59

Changes

  • Split the Flame demo into a mini-game hub: Home "Flame Demo" opens MiniGameHubScreen, with the unchanged classic demo (GameDemoScreen) and a dedicated full-screen SpriteArenaDemoScreen. The 0.6.4 notes that put the joystick and Attack button inside GameDemoScreen no longer apply; that screen is classic-only again.
  • Sprite Arena (example): a 32x24 Tiled map with visible crate, barrel and rock tiles aligned to the collision objects, a perimeter wall, and a camera that follows the player within the map bounds.
  • Add PlayableCharacter.onAttack, an optional hook that replaces the default spark burst. The example fires bullets from the sprite's barrel with it; bullets belong to the example, so the package still has no combat API.
  • Fix PlayableCharacter tunnelling through thin terrain walls when one frame covered a large distance; movement now advances in short steps.
  • Fix Tiled polygon colliders drawing a white fill; TerrainPolygon.toComponent() is now hitbox-only.

Verification

  • Root non-golden 3,502 tests and example 328 tests pass; analyzers report 0 issues; public API check is additive (onAttack); five quality gates and the example asset-license check pass.
  • Pixel 7 Pro integration smoke passes (sprite and map load, eight joystick directions, camera follow, wall and crate blocking, bullets from the barrel, pause/resume). The TECNO KJ7 lost its USB connection during this work, so device evidence is from the Pixel 7 Pro.
  • GitHub Actions CI Linux: run 40265823288 on 7cfadce passes all three jobs.
  • Clean-tree dart pub publish --dry-run reports 0 warnings (one hint: pub.dev latest is still 0.6.3 because 0.6.4 was never published).
  • Not published to pub.dev.

🤖 Generated with Claude Code

0.6.3 — Wallet consistency, FAB accessibility, and workload performance budgets

Choose a tag to compare

@royt93 royt93 released this 24 Oct 16:06

Changes

  • Add WorkloadPerformanceBudget in core/utils/performance_budget.dart to evaluate integration test frame timings against configurable p95, slow-frame percentage, and minimum frame thresholds with actionable failure diagnostics, plus extractMetrics for baseline integration.
  • Add localized tooltips and semantics to GameDemoScreen's icon-only pause and info FloatingActionButtons (game_demo_pause_tooltip and game_demo_info_tooltip in both en and vi locales).
  • Harden MonetizationScreen demo to verify EconomyWallet.earn() results for consumables and rewarded ads; on storage or persistence failure, error haptics and status are shown without granting phantom consumable ledger items or crediting unearned currency.

Verification

  • 22 unit tests in performance_budget_test.dart (including 5 workload evaluator tests), 13 tests in monetization_screen_test.dart, key parity in app_translations_test.dart, and 21 tests in game_demo_screen_test.dart pass.
  • Physical TECNO KJ7 (Android 14): integration smoke tests for wallet failure consistency and accessible FAB tooltips pass; benchmark runs for accessibility preview panel (202 frames, p95=21.45ms, slow-frame=13.37%) and offline earnings (3227 frames, p95=12.12ms, slow-frame=2.32%) satisfy performance budgets.
  • Analyzers report 0 issues on package and example; public API compatibility gate is additive; five quality gates pass; GitHub Actions CI Linux (run 40102532740 and 40106606257) passed all three jobs.
  • Clean-tree pub publish dry-run passes with 0 warnings.

🤖 Generated with Claude Code

0.6.2 — Event schema audit summary

Choose a tag to compare

@royt93 royt93 released this 24 Oct 07:07

Changes

  • Add EventSchemaAuditCard, a read-only summary of caller-mapped accepted, rejected and redacted validation counts.
  • Keep event names, parameter keys/values and raw violation strings out of the widget.
  • State clearly that schema validation does not confirm analytics delivery.

Verification

  • 21 Linux + Flutter 3.35.1 golden baselines (3 states × 7 variants).
  • Root 3,484 and example 316 non-golden tests; analyzers, API compatibility and five quality gates passed.
  • CI 40065468318 passed all jobs. TECNO KJ7 smoke verified aggregate UI only, not actual analytics delivery.

🤖 Generated with Claude Code

0.6.1 — Experiment override and onboarding fixes

Choose a tag to compare

@royt93 royt93 released this 23 Oct 15:07
  • Fixed ExperimentVariantAssignmentCard to hide and reject debug variant overrides in release builds, matching ExperimentBucketingService.debugSetVariantOverride.
  • Restricted OnboardingFlowQueueCard mark-seen action to caller-designated nextEligibleFlow; loading indicator now applies only to that flow.
  • Verified: 21 focused widget tests, a profile-mode override integration test on a TECNO KJ7, and CI 39969956180 (all three jobs). A throwaway release-mode probe on the same device rendered both a control and an overridden row with the callback supplied and showed no override or clear button; that probe is not kept in the repo.

🤖 Generated with Claude Code

0.6.0 — Widget kit expansion, transitive API check, verified device smoke

Choose a tag to compare

@royt93 royt93 released this 23 Oct 13:47
  • Widget kit expansion, additive only: the public API check reports no removed export. The new service-state widgets are presentation-only: pass plain state and callbacks, your code calls the service. Constructors that validate input at runtime are not const. Failures show generic copy, and a pending call locks the buttons. Some widgets take an explicit status from the caller instead of inferring success from a callback that returns.
  • The API check (tool/api_compatibility.dart) now follows local export barrels (including show/hide, relative paths and cycles) and fails loudly on export forms it cannot resolve. It is still a regex scanner, not the Dart analyzer: class fields and getters are not covered, so a break there is not detected.
  • Added save-recovery widgets CloudSaveStatusCard, SaveConflictPicker (keep local / use cloud, each with inline confirmation) and CheckpointResumeCard (confirm before discarding a checkpoint).
  • Added content-delivery widgets ContentPackStatusCard, ScenePreloadStatusPanel and ContentRevisionHistoryPanel. The panel lists metadata only (opaque revision reference, version, label, time) and never a checksum or content body; restoring needs confirmation, and the caller performs the rollback (for example RemoteContentPack.rollbackToChecksum) and refreshes its content.
  • Added offline-delivery widgets OutboxQueueStatusCard and OutboxConflictSummaryPanel. Neither shows a queued payload or key; the conflict panel works on caller-approved labels and opaque references, and accepting the remote version states that it does not undo local effects.
  • Added PlayerDataRightsPanel (export, plus erase behind inline confirmation, for PlayerDataRightsService), PrestigeReadinessCard (progress toward the threshold; the button is enabled only when ready, and the caller should confirm, for example with PrestigeConfirmationCard.show, before calling PrestigeService.prestige) and CooldownActionButton (disabled while a PersistentCooldownService cooldown runs). The cooldown gate is UI only: re-check the service inside your tap handler.
  • Added ConsentPreferencesPanel (ongoing per-category choices with explicit granted/denied/unknown status; the caller applies the change, for example ConsentStateService.grant/deny), SyncStatusCard (idle/syncing/synced/failed state with a retry button for achievement or leaderboard sync; the caller maps its SdkResult to the status) and BatterySaverIndicator (banner while the caller holds performance reduced for low battery; renders nothing when inactive).
  • Added RemoteKillSwitchPanel (device-local kill behind inline confirmation, plus clear for an existing local override; it never re-enables a remotely killed feature and shows only caller-sanitized text), PlatformCapabilityMatrix (read-only supported/unsupported list shown by icon and text, with a note that values are platform defaults rather than a live check) and DeepLinkResultCard (generic outcome per status; it never renders the link, its parameters or an exception, so the caller maps DeepLinkHandleResult to a status).
  • Added SessionTimelineInspector (bounded, caller-formatted session-relative history; never accepts raw controller metadata), EconomyCertificateStatusCard (displays verification status and never accepts balances, certificate data or the secret; “valid” means signature checked, not player honesty) and GuardrailStatusPanel (read-only caller-supplied rollout rows, without new read APIs or actions on ShadowActivationController).
  • Added MemoryWatchdogPanel (bounded caller-fed debug diagnostics; detector only), AnnouncementPreviewCard (shows caller-resolved localized text and invokes a caller preview callback) and RewardedAdResultCard (caller-owned seam state; it never grants a reward, which the caller grants exactly once after showRewardedAd returns true).
  • Added AnalyticsQueueStatusCard (caller-supplied queue snapshot: counts and generic status only, never event names or payloads) and SaveRestorePreviewPanel (read-only preview of what a restore would change, with restore behind inline confirmation; the caller performs the restore).
  • Added RemoteConfigHealthCard (source and schema-violation count only; no keys or values), ReminderPreferencesPanel (caller-owned preferences; notification delivery may be delayed or skipped), and ConnectivityStatusCard (reachability/queue count; queued work drains automatically when online).
  • Added RewardPlanPreviewCard (caller-formatted reward lines with explicit ready/stale/executing/applied/failed status; a preview is not a grant, and the caller sets applied only from a committed record), ReplayVerificationResultCard (outcome and randomness checks reported separately, with a skipped randomness check shown as skipped, never as a match; it is not proof of fair play) and RewardAuditTrailPanel (sanitized, bounded rows and one retry-all action for unfinished rewards; the caller refreshes the rows afterwards because completion of the retry does not mean every record committed).
  • Added OnboardingFlowQueueCard (read-only queue of caller-mapped onboarding flows with seen/next/pending state and an optional mark-seen action; flow ids identify rows in callbacks and are never shown) and ExperimentVariantAssignmentCard (caller-mapped experiment assignments; the per-device anonymous id never enters the widget, and the override action is debug-only, so pass the callback only in debug or profile builds).
  • Added accessibility and player-comfort widgets, retention/progression/social HUD widgets and juice/motion widgets (see common_widgets.dart and the showcase screen for the full list).
  • Verified (see each task spec in doc/task/done/ for the exact run): Linux + Flutter 3.35.1 golden baselines per widget wave, full root and example suites, API compatibility, analyzers, five quality gates and CI. Wave 23 device smoke ran on a Samsung S24 Ultra; Waves 26, 27, 29, 31 and 32 ran on a TECNO KJ7; other waves' device results are recorded in their task specs. Showcase and test callbacks are UI fixtures held in memory: they prove layout and callback wiring, not real certificate verification, rewarded-ad payout, platform screen-reader announcement, memory-leak freedom, 60 FPS or persistence.

roy_casual_kit 0.4.0

Choose a tag to compare

@royt93 royt93 released this 05 Oct 08:24

See CHANGELOG.md for details.