From 401a078950070d710cc1eef8eb4f3b7b7731cd88 Mon Sep 17 00:00:00 2001 From: Peter Fedak Date: Sat, 7 Aug 2021 18:32:33 -0600 Subject: [PATCH] Make tutorials monotonic. Don't reshow tutorial steps that have been completed. Also make video tutorials respect the tutorial setting. --- src/js/game/hud/parts/interactive_tutorial.js | 8 +++++++- src/js/game/hud/parts/tutorial_video_offer.js | 2 +- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/js/game/hud/parts/interactive_tutorial.js b/src/js/game/hud/parts/interactive_tutorial.js index e48a77fb..59f00047 100644 --- a/src/js/game/hud/parts/interactive_tutorial.js +++ b/src/js/game/hud/parts/interactive_tutorial.js @@ -154,6 +154,8 @@ export class HUDInteractiveTutorial extends BaseHUDPart { initialize() { this.domAttach = new DynamicDomAttach(this.root, this.element, { trackHover: true }); this.currentHintId = new TrackedState(this.onHintChanged, this); + this.lastLevelHinted = this.root.hubGoals.level; + this.lastHintShown = 0; } onHintChanged(hintId) { @@ -167,18 +169,22 @@ export class HUDInteractiveTutorial extends BaseHUDPart { update() { // Compute current hint const thisLevelHints = tutorialsByLevel[this.root.hubGoals.level - 1]; + if (this.root.hubGoals.level != this.lastLevelHinted) this.lastHintShown = 0; let targetHintId = null; if (thisLevelHints) { - for (let i = 0; i < thisLevelHints.length; ++i) { + for (let i = this.lastHintShown; i < thisLevelHints.length; ++i) { const hint = thisLevelHints[i]; if (hint.condition(this.root)) { targetHintId = hint.id; + this.lastHintShown = i; break; } } } + if (targetHintId === null) this.lastHintShown = thisLevelHints.length; + this.currentHintId.set(targetHintId); this.domAttach.update(!!targetHintId); } diff --git a/src/js/game/hud/parts/tutorial_video_offer.js b/src/js/game/hud/parts/tutorial_video_offer.js index 3cd2cb90..1ccc6a0f 100644 --- a/src/js/game/hud/parts/tutorial_video_offer.js +++ b/src/js/game/hud/parts/tutorial_video_offer.js @@ -12,7 +12,7 @@ export class HUDTutorialVideoOffer extends BaseHUDPart { this.root.hud.signals.unlockNotificationFinished.add(() => { const level = this.root.hubGoals.level; const tutorialVideoLink = THIRDPARTY_URLS.levelTutorialVideos[level]; - if (tutorialVideoLink) { + if (tutorialVideoLink && this.root.app.settings.getAllSettings().offerHints) { const isForeign = this.root.app.settings.getLanguage() !== "en"; const dialogData = isForeign ? T.dialogs.tutorialVideoAvailableForeignLanguage