feat(ads): rewarded ad gates the continue/extra-moves rescue

This commit is contained in:
2026-06-13 14:02:31 +09:00
parent 6c4304cfd8
commit 3943653a23
+12 -2
View File
@@ -117,6 +117,7 @@ class _GameScreenState extends ConsumerState<GameScreen>
void _onSessionChange(GameViewState? prev, GameViewState? next) {
if (next == null) return;
if (prev == null) ref.read(adServiceProvider).onRoundStart();
final audio = ref.read(audioServiceProvider);
if (prev?.fxTick != next.fxTick && next.lastPlacement != null) {
final placement = next.lastPlacement!;
@@ -153,6 +154,9 @@ class _GameScreenState extends ConsumerState<GameScreen>
if (next.phase != GamePhase.playing) {
ref.read(tutorialProvider.notifier).skip();
}
if (next.phase == GamePhase.won || next.phase == GamePhase.lost) {
ref.read(adServiceProvider).onStageCompleted();
}
if (next.phase == GamePhase.won) {
audio.play(Sfx.win);
// recordResult keeps the best run, so re-entry is harmless.
@@ -393,7 +397,10 @@ class _GameScreenState extends ConsumerState<GameScreen>
[
if (!view.rescueUsed)
FilledButton(
onPressed: () {
onPressed: () async {
final earned =
await ref.read(adServiceProvider).showRewarded();
if (!earned) return;
ref.read(analyticsProvider).rescueUsed(type: 'extra_moves');
notifier.addExtraMoves();
},
@@ -416,7 +423,10 @@ class _GameScreenState extends ConsumerState<GameScreen>
[
if (!view.rescueUsed)
FilledButton(
onPressed: () {
onPressed: () async {
final earned =
await ref.read(adServiceProvider).showRewarded();
if (!earned) return;
ref.read(analyticsProvider).rescueUsed(type: 'continue');
notifier.useContinue();
},