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) {
|
void _onSessionChange(GameViewState? prev, GameViewState? next) {
|
||||||
if (next == null) return;
|
if (next == null) return;
|
||||||
|
if (prev == null) ref.read(adServiceProvider).onRoundStart();
|
||||||
final audio = ref.read(audioServiceProvider);
|
final audio = ref.read(audioServiceProvider);
|
||||||
if (prev?.fxTick != next.fxTick && next.lastPlacement != null) {
|
if (prev?.fxTick != next.fxTick && next.lastPlacement != null) {
|
||||||
final placement = next.lastPlacement!;
|
final placement = next.lastPlacement!;
|
||||||
@@ -153,6 +154,9 @@ class _GameScreenState extends ConsumerState<GameScreen>
|
|||||||
if (next.phase != GamePhase.playing) {
|
if (next.phase != GamePhase.playing) {
|
||||||
ref.read(tutorialProvider.notifier).skip();
|
ref.read(tutorialProvider.notifier).skip();
|
||||||
}
|
}
|
||||||
|
if (next.phase == GamePhase.won || next.phase == GamePhase.lost) {
|
||||||
|
ref.read(adServiceProvider).onStageCompleted();
|
||||||
|
}
|
||||||
if (next.phase == GamePhase.won) {
|
if (next.phase == GamePhase.won) {
|
||||||
audio.play(Sfx.win);
|
audio.play(Sfx.win);
|
||||||
// recordResult keeps the best run, so re-entry is harmless.
|
// recordResult keeps the best run, so re-entry is harmless.
|
||||||
@@ -393,7 +397,10 @@ class _GameScreenState extends ConsumerState<GameScreen>
|
|||||||
[
|
[
|
||||||
if (!view.rescueUsed)
|
if (!view.rescueUsed)
|
||||||
FilledButton(
|
FilledButton(
|
||||||
onPressed: () {
|
onPressed: () async {
|
||||||
|
final earned =
|
||||||
|
await ref.read(adServiceProvider).showRewarded();
|
||||||
|
if (!earned) return;
|
||||||
ref.read(analyticsProvider).rescueUsed(type: 'extra_moves');
|
ref.read(analyticsProvider).rescueUsed(type: 'extra_moves');
|
||||||
notifier.addExtraMoves();
|
notifier.addExtraMoves();
|
||||||
},
|
},
|
||||||
@@ -416,7 +423,10 @@ class _GameScreenState extends ConsumerState<GameScreen>
|
|||||||
[
|
[
|
||||||
if (!view.rescueUsed)
|
if (!view.rescueUsed)
|
||||||
FilledButton(
|
FilledButton(
|
||||||
onPressed: () {
|
onPressed: () async {
|
||||||
|
final earned =
|
||||||
|
await ref.read(adServiceProvider).showRewarded();
|
||||||
|
if (!earned) return;
|
||||||
ref.read(analyticsProvider).rescueUsed(type: 'continue');
|
ref.read(analyticsProvider).rescueUsed(type: 'continue');
|
||||||
notifier.useContinue();
|
notifier.useContinue();
|
||||||
},
|
},
|
||||||
|
|||||||
Reference in New Issue
Block a user