feat(ads): rewarded ad gates the continue/extra-moves rescue
This commit is contained in:
@@ -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();
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user