File

src/app/models/scenario-kim.ts

Constructor

constructor(cabri: CabriDataService, accountService: AccountService, globalService: GlobalService, page: any, cd: ChangeDetectorRef, ttsService: any)

Methods

populateScenario
populateScenario(randomize: boolean)

Creates feedbacks for calcul mental on top of general feedbacks

Returns: void
playSoundWithAward
playSoundWithAward(award: any)
Returns: void
goodResponseShooting
goodResponseShooting(answerStatus: AnswerStatus, responseTimeInSeconds: number, award: string)

Bonne réponse avec récompense (étoile filante)

Returns: void
goodResponseNormal
goodResponseNormal(answerStatus: AnswerStatus, responseTimeInSeconds: number, award: any)

Bonne réponse avec récompense (étoile normale)

Returns: void
badResponseWillRetry
badResponseWillRetry(answerStatus: AnswerStatus, responseTimeInSeconds: number)

Mauvaise réponse avant 2ème essai (est suivi de help())

Returns: void
badResponseMoon
badResponseMoon(answerStatus: AnswerStatus, responseTimeInSeconds: number, award: any, feedback: AnswerNeedsHelp)

Mauvaise réponse avec récompense (lune)

Returns: void
badResponseMoonWithResult
badResponseMoonWithResult(answerStatus: AnswerStatus, responseTimeInSeconds: number, award: any)

Mauvaise réponse avec résultat - peut être suivi de eliminationChallengeMode() (voir scenario.ts / global) ou de la fin de l’activité

Returns: void
playIntroWithTutorial
playIntroWithTutorial()

Introduction avec le tutoriel du jeu de Kim en non-holo

Returns: void
playIntroShort
playIntroShort()

Introduction sans le tutoriel du jeu de Kim

Returns: void
playIntroWithTutorialHolo
playIntroWithTutorialHolo()

Introduction avec le tutoriel du jeu de Kim en holo TODO shorter ?

Returns: void
restartActivity
restartActivity()

Recommencer l’activité

Returns: void
nextPlayerInit
nextPlayerInit()

Lancement de l’activité / 1er joueur

Returns: void
nextPlayerSwitch
nextPlayerSwitch()

Joueur suivant.

Returns: void
help
help()

Aide (est précédée de badResponseWillRetry())

Returns: void
lookFirst
lookFirst()

Première phrase lors de la toute première question:

Returns: void
look
look()

Première phrase lors d’une nouvelle question:

Returns: void
memorize1st
memorize1st()

Deuxième phrase lors d’une nouvelle question: (disabled for quickness)

Returns: void
memorize
memorize()

Deuxième phrase lors d’une nouvelle question:

Returns: void
waitPlayerReady
waitPlayerReady(promiseButton: any, text: string)

Troisème phrase lors d’une nouvelle question:

Returns: void
cosmicCloudComingFirstTime
cosmicCloudComingFirstTime()

Quatrième phrase lors de la toute première question:

Returns: void
cosmicCloudComing
cosmicCloudComing()

Quatrième phrase lors d’une nouvelle question:

Returns: void
disappeardFirst
disappeardFirst()

Cinquième phrase lors de la toute première question:

Returns: void
disappeardAgain
disappeardAgain()

Cinquième phrase lors d’une nouvelle question:

Returns: void
whichObjectFirst
whichObjectFirst()

Dernière phrase lors de la première question:

Returns: void
whichObject
whichObject()

Dernière phrase lors d’une nouvelle question:

Returns: void
continueSolo
continueSolo()

Message entre 2 questions quand 1 seul joueur (SOLO)

Returns: void
endOfActivity
endOfActivity()
Returns: void

Properties

Public page
page: JeudekimPage
ttsService
ttsService: any
import { PlayTTSService } from "src/app/services/play-tts.service";
import { ChangeDetectorRef } from "@angular/core";
import { JeudekimPage } from "../page/jeudekim/jeudekim.page";
import { AccountService } from "../services/account.service";
import { CabriDataService } from "../services/cabri-data.service";
import { GlobalService } from "../services/global.service";
import { ScenarioPhrase } from "./scenario-phrase";
import { ScenarioCabri } from "./scenario-cabri";
import { AppUtils } from "../app-utils";
import { AnswerStatus, AnswerSpeed, AnswerAverage, AnswerExtreme, AnswerNeedsHelp } from "./activity-answer";

export class ScenarioKim extends ScenarioCabri {
	public page: JeudekimPage;

	constructor(
		cabri: CabriDataService,
		accountService: AccountService,
		globalService: GlobalService,
		page: any,
		cd: ChangeDetectorRef,
		public ttsService: PlayTTSService
	) {
		super(cabri, accountService, globalService, page, cd, ttsService);
	}

	/**
	 * Creates feedbacks for calcul mental on top of general feedbacks
	 */
	populateScenario(randomize?: boolean) {
		super.populateScenario(randomize);
		// SUCCESS 1ST TRY
		// SLOW
		this.addFeedbacks(
			{ status: AnswerStatus.VALID1ST, speed: AnswerSpeed.SLOW },
			2,
			[
				$localize`Pas facile à trouver celui-là ! Bien joué !`,
				$localize`Bravo #playerName ! Tu l’as retrouvé !`,
				$localize`Bien joué #playerName ! Tu l’as retrouvé !`,
				$localize`Un petit pas pour toi, un grand pas pour ton apprentissage ! Super !`
			],
			2
		);
		// NORMAL
		this.addFeedbacks(
			{ status: AnswerStatus.VALID1ST, speed: AnswerSpeed.NORMAL },
			1,
			[
				$localize`Quelle réponse super-géométrique ! Bien joué !`,
				$localize`Méga-boulonique cette réponse !`,
				$localize`Youpi ! Une nouvelle constellation en vue !`,
				$localize`Quelle giga-réponse ! Bravo`,
				$localize`Bravo ! Tu as trouvé la solution !`,
				$localize`Vers l’infini et au-delà ! Bien joué !`,
				$localize`Oui ! Bravo !`,
				$localize`Un petit pas pour toi, un grand pas pour ton apprentissage ! Bravo !`,
				$localize`Quelle cosmo-réponse ! Bien joué !`,
				$localize`Tu m’impressionnes #playerName ! Bravo !`
			],
			2
		);
		// FAST
		this.addFeedbacks(
			{ status: AnswerStatus.VALID1ST, speed: AnswerSpeed.FAST },
			2,
			[
				$localize`Wahou ! Tu l’as retrouvé sans hésiter ! Bravo !`,
				$localize`Incroyable ! On ne peut rien te cacher à toi ! Bien joué !`,
				$localize`Quelle maîtrise des solides ! Et quelle vitesse ! Bravo !`,
				$localize`Supra-luminique ! Tu réponds à la vitesse de l’éclair !`,
				$localize`Par Toutatis ! Quelle maîtrise de la géométrie !`,
				$localize`Encore un solide que tu as retrouvé à la vitesse de la lumière !`,
				$localize`Tu connais les solides à la perfection #playerName ! Bravo !`,
				$localize`Lumino-fantastique !`
			],
			2
		);
		// PROGRESSION ABOVE AVERAGE
		this.addFeedbacks(
			{ status: AnswerStatus.VALID1ST, progressionAverage: AnswerAverage.ABOVE },
			3,
			[
				$localize`Je suis impressionnée ! Ce voyage géométrique est une promenade pour toi !`,
				$localize`Super ! La victoire est proche, continue comme ça !`
			],
			2
		);
		// PROGRESSION BELOW AVERAGE
		this.addFeedbacks(
			{ status: AnswerStatus.VALID1ST, progressionAverage: AnswerAverage.BELOW },
			3,
			[$localize`Bien joué #playerName ! Continue comme ça, tu peux y arriver !`],
			2
		);
		// PROGRESSION NO ERRORS TILL THEN
		this.addFeedbacks(
			{ status: AnswerStatus.VALID1ST, progressionExtreme: AnswerExtreme.ALLGOOD },
			3,
			[
				$localize`Sans faute jusqu'ici ! Tu m’épates #playerName !`,
				$localize`Quelle série ! Tu as le compas dans l’oeil toi !`,
				$localize`Wahou ! Aucun solide ne t’échappe #playerName !`,
				$localize`Incroyable ! Jusqu’où iras-tu comme ça ?`,
				$localize`Epoustouflant #playerName !`,
				$localize`Eh bien ! Les solides n’ont pas de secrets pour toi !`,
				$localize`Quelle cosmo-réponse ! Tu es supra-luminique !`,
				$localize`Wahou ! Tes processeurs fonctionnent à plein régime !`,
				$localize`Par Toutatis ! Tu es le maître des astro-solides !`,
				$localize`Je suis impressionnée ! Tu maîtrises les cosmo-solides à la perfection !`,
				$localize`Youhou ! C’est trop facile pour toi !`
			],
			2
		);
		// PROGRESSION ONLY ERRORS TILL THEN
		this.addFeedbacks(
			{ status: AnswerStatus.VALID1ST, progressionExtreme: AnswerExtreme.ALLBAD },
			3,
			[$localize`Oui #playerName ! Bravo ! Tu l’as trouvé !`],
			2
		);
		this.addFeedbacks(
			{ status: AnswerStatus.VALID1ST, speed: AnswerSpeed.FAST, progressionExtreme: AnswerExtreme.ALLGOOD },
			4,
			[
				$localize`Youhou ! C’est trop facile pour toi !`,
				$localize`Oui bravo ! Rien ne t’arrête !`,
				$localize`Tu es lancé comme une fusée vers le sans faute !`,
				$localize`Wahou ! Tu m’impressionnes #playerName ! Quelle vitesse !`
			],
			2
		);
		// SUCCESS 2ND TRY
		this.addFeedbacks(
			{ status: AnswerStatus.VALID2ND },
			2,
			[
				$localize`Oui #playerName ! Magnifique rattrapage !`,
				$localize`Wahou ! C’est bien ça ! Beau rattrapage !`,
				$localize`Oui, bien rattrapé #playerName !`,
				$localize`Oui ! Tu l’as trouvé ! Je suis fière de toi !`,
				$localize`Oui ! Bravo ! C’était bien celui-là !`,
				$localize`Super ! Tu as su retrouver ce solide bien caché !`,
				$localize`Bravo ! Avec persévérance on arrive à tout ! Même toucher les étoiles !`,
				$localize`Oui ! Bravo ! Bravo ! Bravooo !`,
				$localize`Un petit pas pour toi, un grand pas pour ton apprentissage ! Bravo !`
			],
			2
		);
		// ERRORS
		// FIRST ERROR - retry with help
		this.addFeedbacks(
			{ status: AnswerStatus.ERROR1ST, needsHelp: AnswerNeedsHelp.YES, speed: AnswerSpeed.SLOW },
			4,
			[$localize`Tu n’es pas loin ! Regardons de plus près...`, $localize`Tu y es presque ! Retournons voir ces solides !`],
			2
		);
		this.addFeedbacks(
			{ status: AnswerStatus.ERROR1ST, needsHelp: AnswerNeedsHelp.YES },
			3,
			[
				$localize`Dommage, tu y étais presque... Regardons de plus près ces solides !`,
				$localize`Oups, laisse-moi te donner un coup de main pour rattraper cette petite erreur !`,
				$localize`Tu t’es trompé mais ce n’est pas grave, c’est comme ça qu’on apprend ! Je vais t’aider !`,
				$localize`Attention ! Tu t’es perdu dans le nuage cosmique ! Je vais te guider !`,
				$localize`Oups ! Ce n’est pas ça ! Voici un peu d’aide !`,
				$localize`Tu y es presque, nous allons réessayer avec un peu d’aide !`,
				$localize`Oups, ce n’est pas celui-ci. Regardons de plus près !`,
				$localize`Oups ! La soucoupe bug ! Je vais te donner un petit coup de main !`,
				$localize`Oups ! Ce n’est pas ça. Laisse moi t’aider !`,
				$localize`Appel à la base ! Nous avons besoin d’aide par ici !`,
				$localize`Oups... J’aimerais pouvoir te dire que tu as trouvé, mais ce n’est pas ça !`
			],
			2
		);
		this.addFeedbacks(
			{ status: AnswerStatus.ERROR1ST, needsHelp: AnswerNeedsHelp.YES, speed: AnswerSpeed.FAST },
			4,
			[
				$localize`Oups, ce n'était pas celui-là. N’hésite pas à prendre plus de temps pour les mémoriser !`,
				$localize`Oups ! Non... Ce n’est pas grave, ralentissons un peu !`,
				$localize`Ce n’est pas celui-là. Tu devrais peut-être aller plus doucement ?`,
				$localize`Pas si vite, ce n’est pas celui-là ! Regardons ces solides de plus près...`
			],
			2
		);
		// SECOND ERROR - failed
		this.addFeedbacks(
			{ status: AnswerStatus.ERROR2ND },
			2,
			[
				$localize`Non, Ce n’est pas ça ! Dur à trouver ce solide, pas vrai ?`,
				$localize`Oups ! Tu t’es trompé mais ce n’est pas grave ! C’est comme ça qu’on apprend !`,
				$localize`Ce n'est pas ça... Il faut dire qu’il était difficile à trouver celui-là !`,
				$localize`Non... Appel à la base, nous avons perdu un solide !`,
				$localize`Oups... J’aimerais pouvoir te dire que tu as trouvé, mais ce n’était pas celui-là. Courage !`,
				$localize`Tu y étais presque !`,
				$localize`Oups, ce n’est pas le bon solide...`
			],
			2
		);
		this.addFeedbacks(
			{ status: AnswerStatus.ERROR2ND, progressionAverage: AnswerAverage.BELOW },
			2,
			[$localize`Oups... Ce n’était pas celui-là ! Courage, je suis sûre que tu vas y arriver !`],
			2
		);
		this.addFeedbacks(
			{ status: AnswerStatus.ERROR2ND, progressionAverage: AnswerAverage.ABOVE },
			2,
			[$localize`Oups... Non. Tu y arrivais bien pourtant !`],
			2
		);
		this.addFeedbacks(
			{ status: AnswerStatus.ERROR2ND, progressionExtreme: AnswerExtreme.ALLBAD },
			2,
			[$localize`Oups... Non ! Courage, je suis sûre que tu vas y arriver !`],
			2
		);
		this.addFeedbacks(
			{ status: AnswerStatus.ERROR2ND, progressionExtreme: AnswerExtreme.ALLGOOD },
			2,
			[$localize`Oups... On dirait que le vent cosmique tourne !`],
			2
		);
		// console.error("feedbacks unshuffled = ", this.feedbacks);
		if (randomize) {
			AppUtils.shuffleArray(this.feedbacks);
			// console.error("feedbacks shuffled = ", this.feedbacks);
		}
	}

	async playSoundWithAward(award) {
		this.page.hideBubbleText = true;
		let awardSoundPromise;
		if (award === "moon") {
			awardSoundPromise = this.page.audioService.playAwardMoonSound();
		} else {
			awardSoundPromise = this.page.audioService.playStarSound();
		}
		await this.timeOut(500);
		this.page.showHideAward(3000, award);
		setTimeout(() => {
			this.page.updatePlayerAndTeamStarboards(award);
		}, 500);
		await awardSoundPromise;
		this.page.hideBubbleText = false;
	}

	/**
	 * Bonne réponse avec récompense (étoile filante)
	 */
	async goodResponseShooting(answerStatus: AnswerStatus, responseTimeInSeconds: number, award: string) {
		const phrase = this.getContextualFeedbackPhrase(answerStatus, responseTimeInSeconds, award, 20, 4, 5, 3);
		const speechSequence = [
			new ScenarioPhrase([phrase], async () => {
				await this.timeOut(500);
				this.page.showHideAward(3000, award);
				setTimeout(() => {
					this.page.updatePlayerAndTeamStarboards(award);
				}, 500);
			})
				.setRandomMode()
				.hideBubble(),
			new ScenarioPhrase(
				this.cabriService.teamShootingStarsCount <= 2
					? [
							$localize`Regarde ! Il y avait une étoile filante dans le nuage ! Merci petit nuage !`,
							$localize`Oh ! Regarde ce qu’il y avait caché sous le solide ! Une étoile filante !`,
							$localize`Tu as trouvé une étoile filante cachée sous le solide !`
					  ]
					: [
							$localize`Et hop ! Une étoile filante en plus !`,
							$localize`Et une étoile filante en plus pour ta collection !`,
							$localize`Encore une étoile filante de récupérée ! Super !`,
							$localize`Et une étoile filante en plus !`,
							$localize`Encore une étoile filante de retrouvée !`
					  ],
				async () => {}
			)
				.setRandomMode()
				.showAward(award)
		];
		await this.runMathiaSpeech(speechSequence);
	}

	/**
	 * Bonne réponse avec récompense (étoile normale)
	 */
	async goodResponseNormal(answerStatus: AnswerStatus, responseTimeInSeconds: number, award) {
		const phrase = this.getContextualFeedbackPhrase(answerStatus, responseTimeInSeconds, award, 20, 4, 5, 3);
		const speechSequence = [
			new ScenarioPhrase([phrase], async () => {
				this.page.showHideAward(3000, award);
				setTimeout(() => {
					this.page.updatePlayerAndTeamStarboards(award);
				}, 500);
			})
				.setRandomMode()
				.hideBubble(),
			new ScenarioPhrase(
				this.cabriService.teamNormalStarsCount <= 2
					? [
							$localize`Regarde ! Le nuage nous a laissé une étoile ! Merci petit nuage !`,
							$localize`Oh ! Regarde ce qu’il y avait caché sous le solide ! Une étoile !`,
							$localize`Tu as trouvé une étoile cachée sous le solide !`
					  ]
					: [
							$localize`Et hop ! Une étoile en plus !`,
							$localize`Et une étoile en plus pour ta collection !`,
							$localize`Encore une étoile de récupérée ! Super !`,
							$localize`Et une étoile en plus !`,
							$localize`Encore une étoile de retrouvée !`
					  ],
				async () => {}
			)
				.setRandomMode()
				.showAward(award)
		];
		await this.runMathiaSpeech(speechSequence);
	}

	/**
	 * Mauvaise réponse avant 2ème essai (est suivi de help())
	 */
	async badResponseWillRetry(answerStatus: AnswerStatus, responseTimeInSeconds: number) {
		const phrase = this.getContextualFeedbackPhrase(answerStatus, responseTimeInSeconds, null, 20, 4, 5, 3, AnswerNeedsHelp.YES);
		const speechSequence = [new ScenarioPhrase([phrase]).setRandomMode()];
		await this.runMathiaSpeech(speechSequence);
	}

	/**
	 * Mauvaise réponse avec récompense (lune)
	 */
	async badResponseMoon(answerStatus: AnswerStatus, responseTimeInSeconds: number, award, feedback: AnswerNeedsHelp) {
		const phrase = this.getContextualFeedbackPhrase(answerStatus, responseTimeInSeconds, award, 20, 4, 5, 3, feedback);
		const speechSequence = [
			new ScenarioPhrase([phrase], async () => {
				this.page.showHideAward(3000, award);
				await setTimeout(() => {
					this.page.updatePlayerAndTeamStarboards(award);
				}, 500);
			}).setRandomMode(),
			new ScenarioPhrase(
				this.page.endOfActivity() ?
				[
					$localize`Tu as quand même trouvé une lune, regarde !`,
					$localize`Oh mais... Regarde ce qu’il y avait dans le nuage ! Une lune !`,
					$localize`Ce n’est pas grave, tu as quand même gagné une lune !`,
					$localize`Pas d’étoile cette fois-ci, mais tu as quand même trouvé une lune !`,
					$localize`Tiens ! Voila quand même une lune pour ta collection !`
				]
				:
				[
					$localize`Tu as quand même trouvé une lune, regarde !`,
					$localize`Oh mais... Regarde ce qu’il y avait dans le nuage ! Une lune !`,
					$localize`Le nuage nous a laissé une lune pour nous encourager ! Merci petit nuage !`,
					$localize`Ce n’est pas grave, tu as quand même gagné une lune !`,
					$localize`Pas d’étoile cette fois-ci, mais tu as quand même trouvé une lune !`,
					$localize`Tiens ! Voila quand même une lune pour ta collection !`,
					$localize`Tiens ! Voila quand même une lune pour t’encourager !`,
					$localize`Cette fois c’est une lune mais je suis sûr que tu trouveras une étoile au prochain solide !`
				],
				async () => {}
			).setRandomMode()
		];
		await this.runMathiaSpeech(speechSequence);
	}

	/**
	 * Mauvaise réponse avec résultat - peut être suivi de eliminationChallengeMode() (voir scenario.ts / global) ou de la fin de l’activité
	 */
	async badResponseMoonWithResult(answerStatus: AnswerStatus, responseTimeInSeconds: number, award) {
		const phrase = this.getContextualFeedbackPhrase(answerStatus, responseTimeInSeconds, award, 20, 4, 5, 3);
		const moonResult: Array<any> = [
			new ScenarioPhrase([phrase], async () => {
				setTimeout(async () => {
					await this.page.cabri.blinkObject(this.page.objectToFindId);
				}, 1000);
			}).setRandomMode(),
			new ScenarioPhrase(
				[
					$localize`Regarde, le solide que j’ai caché était ${this.page.goodResultNameForHelp} !`,
					$localize`La bonne réponse était ${this.page.goodResultNameForHelp} !`
				],
				async () => {
					await this.timeOut(3000);
					this.page.showHideAward(3000, award);
					await AppUtils.timeOut(500);
					this.page.updatePlayerAndTeamStarboards(award);
				}
			),
			new ScenarioPhrase(
				[$localize`Tu as quand même gagné une lune !`, $localize`Nous avons quand même gagné une lune !`],
				async () => {
					await this.timeOut(1000);
				}
			)
				.setRandomMode()
				.showAward(award)
		];
		await this.runMathiaSpeech(moonResult);
	}

	/**
	 * Introduction avec le tutoriel du jeu de Kim en non-holo
	 */
	async playIntroWithTutorial() {
		const players: any = this.accountService.team.map(student => student.name).join(" ! ");

		// Verbs:
		// let commencerContinuer;
		// let reDécoller;
		// let rePartons;
		// let reVoir;
		// let reDecollons;

		// commencerContinuer = $localize`commencer`;
		// reDécoller = $localize`décoller`;
		// rePartons = $localize`partons`;
		// reVoir = $localize`voir`;
		// reDecollons = $localize`décollons`;

		// SEQUENCE:
		if (this.accountService.team.length > 1) {
			// SEQUENCE MULTIJOUEUR:
			const introTeam: Array<any> = [
				new ScenarioPhrase([
					$localize`${players}:allPlayersNames: ! Bienvenue dans le jeu de Kim ! `,
				]),
				new ScenarioPhrase([$localize`Dans ce jeu, nous allons apprendre à reconnaître les différents solides !`]),
				new ScenarioPhrase([$localize`A chaque tour, je vais cacher un solide dans un nuage cosmique !`]),
				new ScenarioPhrase([$localize`A vous de retrouver lequel !`],
				async () => {
					await this.page.setAllObjects();
					await this.page.setObjectToFind(1);
					this.page.cabri.updateObjectsToRotate();
				}),
				new ScenarioPhrase($localize`Par exemple voici des solides. Ils sont beaux, non ?`),
				new ScenarioPhrase($localize`Il y a les cubes...`, async () => {
					await this.page.cabri.hideAllSolids();
					this.page.cabri.toggleSolids("cube", 1);
					await this.timeOut(2000);
				}),
				new ScenarioPhrase($localize`Les pavés...`, async () => {
					await this.page.cabri.hideAllSolids();
					this.page.cabri.toggleSolids("pave", 1);
					await this.timeOut(2000);
				}),
				new ScenarioPhrase($localize`Les boules...`, async () => {
					await this.page.cabri.hideAllSolids();
					this.page.cabri.toggleSolids("boule", 1);
					await this.timeOut(2000);
				}),
				new ScenarioPhrase($localize`Les pyramides...`, async () => {
					await this.page.cabri.hideAllSolids();
					this.page.cabri.toggleSolids("pyr", 1);
					await this.timeOut(2000);
				}),
				new ScenarioPhrase($localize`Les cônes...`, async () => {
					await this.page.cabri.hideAllSolids();
					this.page.cabri.toggleSolids("cone", 1);
					await this.timeOut(2000);
				}),
				new ScenarioPhrase($localize`Et les cylindres !`, async () => {
					await this.page.cabri.hideAllSolids();
					this.page.cabri.toggleSolids("cyl", 1);
					await this.timeOut(2000);
					await this.page.cabri.showAllSolids();
				}),
				new ScenarioPhrase($localize`Je vais cacher un de nos petits solides à chaque tour...`),
				new ScenarioPhrase($localize`Comme ça : et hop !`, async () => {
					await this.page.cabri.hideObjectTofind(this.page.objectToFindId);
					await this.timeOut(2000);
				}),
				new ScenarioPhrase($localize`Avez-vous vu quel solide j’ai caché ? C’est celui qui clignote !`, async () => {
					if (!this.skipSequence) {
						await this.page.cabri.blinkObject(this.page.objectToFindId);
					}
					await this.timeOut(6000);
					this.page.cabri.stopBlink(this.page.objectToFindId);
				}),
				new ScenarioPhrase($localize`Il vous suffit alors de me dire son nom pour que je le fasse revenir !`, async () => {}),
				new ScenarioPhrase($localize`Pour cela, parlez-moi quand l’icône du micro est allumée.`, async () => {
					this.globalService.fakeMicOn = true;
					this.cd.detectChanges();
				}),
				new ScenarioPhrase($localize`Vous la voyez ? Elle s’allume en rose quand vous pouvez me parler !`, async () => {
					this.globalService.fakeMicOn = false;
					this.cd.detectChanges();
				}),
				new ScenarioPhrase($localize`Vous pouvez aussi utiliser le cosmo clavier pour me répondre.`),
				new ScenarioPhrase($localize`Pour l’activer, appuyez sur son bouton. Regardez c’est celui-là !`, async () => {
					// numpad on
					this.globalService.activateNumpadIcon = true;
					this.cd.detectChanges();
					await this.timeOut(1000);
				}),
				new ScenarioPhrase($localize`Si vous appuyez dessus, hop ! Le cosmo clavier apparaît !`, async () => {
					await this.page.toggleNumpad(true);
					await this.page.toggleNumpadPointerEvents(false);
				}),
				new ScenarioPhrase(
					$localize`Appuyez sur la touche qui correspond au solide que j’ai caché pour que je le ramène !`,
					async () => {
						await this.timeOut(2000);
						await this.page.toggleNumpad(false);
						await this.page.toggleNumpadPointerEvents(true);
					}
				),
				new ScenarioPhrase($localize`Ok, maintenant que vous savez tout, commençons à jouer !`, async () => {
					await this.page.hideObjects();
					await this.page.cabri.resetScene();
				})
			];
			await this.runMathiaSpeech(introTeam);
			// scenario multi continues in this.nextPlayerInit()
		} else {
			// SEQUENCE SOLO:
			const introSolo: Array<any> = [
				new ScenarioPhrase([
					$localize`${this.page.currentUser.name}:playerName: ! Bienvenue dans le jeu de Kim ! `,
				]),
				new ScenarioPhrase([$localize`Dans ce jeu, nous allons apprendre à reconnaître les différents solides !`]),
				new ScenarioPhrase([$localize`A chaque tour, je vais cacher un solide dans un nuage cosmique !`]),
				new ScenarioPhrase([$localize`A toi de retrouver lequel !`],
				async () => {
					if (!this.skipSequence) {
						await this.page.setAllObjects();
						await this.page.setObjectToFind(1);
						this.page.cabri.updateObjectsToRotate();
					}
				}),
				new ScenarioPhrase($localize`Par exemple voici des solides. Ils sont beaux, non ?`),
				new ScenarioPhrase($localize`Il y a les cubes...`, async () => {
					if (!this.skipSequence) {
						await this.page.cabri.hideAllSolids();
						this.page.cabri.toggleSolids("cube", 1);
						await this.timeOut(2000);
					}
				}),
				new ScenarioPhrase($localize`Les pavés...`, async () => {
					if (!this.skipSequence) {
						await this.page.cabri.hideAllSolids();
						this.page.cabri.toggleSolids("pave", 1);
						await this.timeOut(2000);
					}
				}),
				new ScenarioPhrase($localize`Les boules...`, async () => {
					if (!this.skipSequence) {
						await this.page.cabri.hideAllSolids();
						this.page.cabri.toggleSolids("boule", 1);
						await this.timeOut(2000);
					}
				}),
				new ScenarioPhrase($localize`Les pyramides...`, async () => {
					if (!this.skipSequence) {
						await this.page.cabri.hideAllSolids();
						this.page.cabri.toggleSolids("pyr", 1);
						await this.timeOut(2000);
					}
				}),
				new ScenarioPhrase($localize`Les cônes...`, async () => {
					if (!this.skipSequence) {
						await this.page.cabri.hideAllSolids();
						this.page.cabri.toggleSolids("cone", 1);
						await this.timeOut(2000);
					}
				}),
				new ScenarioPhrase($localize`Et les cylindres !`, async () => {
					if (!this.skipSequence) {
						await this.page.cabri.hideAllSolids();
						this.page.cabri.toggleSolids("cyl", 1);
						await this.timeOut(2000);
						await this.page.cabri.showAllSolids();
					}
				}),
				new ScenarioPhrase($localize`Je vais cacher un de nos petits solides à chaque tour...`),
				new ScenarioPhrase($localize`Comme ça : et hop !`, async () => {
					if (!this.skipSequence) {
						await this.page.cabri.hideObjectTofind(this.page.objectToFindId);
						await this.timeOut(2000);
					}
				}),
				new ScenarioPhrase($localize`As-tu vu quel solide j’ai caché ? C’est celui qui clignote !`, async () => {
					if (!this.skipSequence) {
						await this.page.cabri.blinkObject(this.page.objectToFindId);
						await this.timeOut(6000);
						this.page.cabri.stopBlink(this.page.objectToFindId);
					}
				}),
				new ScenarioPhrase($localize`Il te suffit alors de me dire son nom pour que je le fasse revenir !`),
				new ScenarioPhrase($localize`Pour cela, parle moi quand l’icône du micro est allumée.`, async () => {
					if (!this.skipSequence) {
						this.globalService.fakeMicOn = true;
						this.cd.detectChanges();
					}
				}),
				new ScenarioPhrase($localize`Tu la vois ? Tout en haut ! Elle s’allume en rose quand tu peux me parler !`),
				new ScenarioPhrase($localize`Tu peux aussi utiliser le cosmo clavier pour me répondre.`, async () => {
					if (!this.skipSequence) {
						this.globalService.fakeMicOn = false;
						this.cd.detectChanges();
					}
				}),
				new ScenarioPhrase($localize`Pour l’activer, appuie sur son bouton. Regarde c’est celui-là !`, async () => {
					if (!this.skipSequence) {
						// numpad on
						this.globalService.activateNumpadIcon = true;
						this.cd.detectChanges();
						await this.timeOut(1000);
					}
				}),
				new ScenarioPhrase($localize`Si tu appuies dessus, hop ! Le cosmo clavier apparaît !`, async () => {
					if (!this.skipSequence) {
						await this.page.toggleNumpad(true);
						await this.page.toggleNumpadPointerEvents(false);
					}
				}),
				new ScenarioPhrase(
					$localize`Appuie sur la touche qui correspond au solide que j’ai caché pour que je le ramène !`,
					async () => {
						if (!this.skipSequence) {
							await this.timeOut(2000);
							await this.page.toggleNumpad(false);
							await this.page.toggleNumpadPointerEvents(true);
						}
					}
				),
				new ScenarioPhrase($localize`Ok, maintenant que tu sais tout, commençons à jouer !`, async () => {
					await this.page.hideObjects();
					await this.page.cabri.resetScene();
				}),
				new ScenarioPhrase(`3... 2... 1...`),
				new ScenarioPhrase(
					[
						$localize`C’est parti !`,
						// $localize`Décollage !`,
						// $localize`Allumage des réacteurs !`,
						$localize`Vers l’infini et au-delà !`,
						$localize`Que la force soit avec toi !`
					]
				).setRandomMode()
			];
			await this.runMathiaSpeech(introSolo);
		}
	}

	/**
	 * Introduction sans le tutoriel du jeu de Kim
	 */
	async playIntroShort() {
		const players: any = this.accountService.team.map(student => student.name).join(" ! ");
		if (this.accountService.team.length > 1) {
			// MULTI:
			const introTeam: Array<any> = [
				new ScenarioPhrase([
					$localize`${players}:allPlayersNames: ! Bienvenue dans le jeu de Kim ! `,
				]).setRandomMode(),
				new ScenarioPhrase([$localize`Dans ce jeu, nous allons apprendre à reconnaître les différents solides !`]),
				new ScenarioPhrase([$localize`A chaque tour, je vais cacher un solide dans un nuage cosmique !`]),
				new ScenarioPhrase([$localize`A vous de retrouver lequel !`]),
				// new ScenarioPhrase([
				// 	$localize`Il paraît qu’on peut aussi trouver des étoiles ou des lunes dans les nuages cosmiques !`,
				// 	$localize`Vous aurez même la chance de trouver des étoiles ou des lunes en fouillant ces nuages !`
				// ]).setRandomMode()
			];
			await this.runMathiaSpeech(introTeam);
			// scenario multi continues in this.nextPlayerInit()
		} else {
			// SOLO:
			const introSolo: Array<any> = [
				new ScenarioPhrase([
					$localize`${this.page.currentUser.name}:playerName: ! Bienvenue dans le jeu de Kim ! `
				]).setRandomMode(),
				new ScenarioPhrase([$localize`Dans ce jeu, nous allons apprendre à reconnaître les différents solides !`]),
				new ScenarioPhrase([$localize`A chaque tour, je vais cacher un solide dans un nuage cosmique !`]),
				new ScenarioPhrase([$localize`A toi de retrouver lequel !`]),
				// new ScenarioPhrase([
				// 	$localize`Il paraît qu’on peut aussi trouver des étoiles ou des lunes dans les nuages cosmiques !`,
				// 	$localize`Tu auras même la chance de trouver des étoiles ou des lunes en fouillant ces nuages !`
				// ]).setRandomMode(),
				new ScenarioPhrase([`3... 2... 1...`]),
				new ScenarioPhrase(
					[
						$localize`C’est parti !`,
						// $localize`Décollage !`,
						// $localize`Allumage des réacteurs !`,
						$localize`Vers l’infini et au-delà !`,
						$localize`Que la force soit avec toi !`
					]
				).setRandomMode()
			];
			await this.runMathiaSpeech(introSolo);
		}
	}

	/**
	 * Introduction avec le tutoriel du jeu de Kim en holo TODO shorter ?
	 */
	async playIntroWithTutorialHolo() {
		let firstMessage;
		let players: any = this.accountService.team.map(student => student.name);
		players = players.join(" ! ");

		// Verbs:
		let commencerContinuer;
		let reDécoller;
		let rePartons;
		let reVoir;
		let reDecollons;
		commencerContinuer = $localize`commencer`;
		reDécoller = $localize`décoller`;
		rePartons = $localize`partons`;
		reVoir = $localize`voir`;
		reDecollons = $localize`décollons`;

		// FIRSTIME:
		if (this.accountService.team.length > 1) {
			// team:
			firstMessage = [
				$localize`${players} ! Bienvenue à bord !`,
				$localize`Salutations voyageurs ! C’est super boulonique de vous ${reVoir} ici !`
			];
		} else if (this.accountService.team.length === 1) {
			// solo:
			firstMessage = [
				$localize`Bienvenue à bord ${this.page.currentUser.name}:playerName: !`,
				$localize`Salutations voyageur ! C’est super boulonique de te ${reVoir} ici !`
			];
		}

		// SEQUENCE:
		if (this.accountService.team.length > 1) {
			// MULTI:
			const introTeam: Array<any> = [
				new ScenarioPhrase(firstMessage).setRandomMode(),
				new ScenarioPhrase([
					$localize`Prêts pour ${reDécoller} vers le jeu de Kim ?`,
					$localize`Attachez votre ceinture, nous ${rePartons} jouer au jeu de Kim !`,
					$localize`Tout le monde est prêt ? Parfait, ${reDecollons} vers le jeu de Kim !`,
					$localize`Vous êtes prêts ? Alors plein gaz sur le jeu de Kim !`
				]).setRandomMode(),
				new ScenarioPhrase([$localize`Le but de notre expédition est simple : trouver des étoiles ou des lunes !`]),
				new ScenarioPhrase([$localize`Et surtout apprendre à reconnaître les différents solides !`], async () => {
					await this.timeOut(1000);
					// this.page.setObjects();
				}),
				new ScenarioPhrase([$localize`Nous allons dans une galaxie pleine de nuages cosmiques`]),
				new ScenarioPhrase([$localize`Je vais en profiter pour y cacher des solides !`]),
				new ScenarioPhrase([$localize`Votre mission est de retrouver les solides que je cacherai dans les nuages !`], async () => {
					await this.page.setAllObjects();
					await this.page.setObjectToFind(1);
					this.page.cabri.updateObjectsToRotate();
				}),
				new ScenarioPhrase([$localize`Par exemple voici des solides. Ils sont beaux, non ?`]),
				new ScenarioPhrase([$localize`Il y a les cubes...`], async () => {
					await this.page.cabri.hideAllSolids();
					this.page.cabri.toggleSolids("cube", 1);
					await this.timeOut(2000);
				}),
				new ScenarioPhrase([$localize`Les pavés...`], async () => {
					await this.page.cabri.hideAllSolids();
					this.page.cabri.toggleSolids("pave", 1);
					await this.timeOut(2000);
				}),
				new ScenarioPhrase([$localize`Les boules...`], async () => {
					await this.page.cabri.hideAllSolids();
					this.page.cabri.toggleSolids("boule", 1);
					await this.timeOut(2000);
				}),
				new ScenarioPhrase([$localize`Les pyramides...`], async () => {
					await this.page.cabri.hideAllSolids();
					this.page.cabri.toggleSolids("pyr", 1);
					await this.timeOut(2000);
				}),
				new ScenarioPhrase([$localize`Les cônes...`], async () => {
					await this.page.cabri.hideAllSolids();
					this.page.cabri.toggleSolids("cone", 1);
					await this.timeOut(2000);
				}),
				new ScenarioPhrase([$localize`Et les cylindres !`], async () => {
					await this.page.cabri.hideAllSolids();
					this.page.cabri.toggleSolids("cyl", 1);
					await this.timeOut(2000);
					await this.page.cabri.showAllSolids();
				}),
				new ScenarioPhrase([$localize`Je vais cacher un de nos petits solides à chaque tour...`]),
				new ScenarioPhrase([$localize`Comme ça ! Pouf !`], async () => {
					await this.page.cabri.hideObjectTofind(this.page.objectToFindId);
					await this.timeOut(2000);
				}),
				new ScenarioPhrase([$localize`Avez-vous vu lequel j’ai caché ? C’est celui qui clignote !`], async () => {
					await this.page.cabri.blinkObject(this.page.objectToFindId);
					await this.timeOut(6000);
					this.page.cabri.stopBlink(this.page.objectToFindId);
				}),
				new ScenarioPhrase([$localize`Il vous suffit alors de me dire son nom pour que je le ramène !`]),
				new ScenarioPhrase([$localize`Pour cela, parlez-moi quand le triangle en face de vous est allumé en rouge.`], async () => {
					this.page.holoTriangleStt = true;
					this.page.detectChanges();
				}),
				new ScenarioPhrase([$localize`Vous le voyez ?`], async () => {
					await this.timeOut(2000);
					this.page.holoTriangleStt = false;
					this.page.detectChanges();
				}),
				new ScenarioPhrase([$localize`Ok, maintenant que vous savez tout, commençons notre nouvelle aventure !`], async () => {
					await this.page.hideObjects();
					await this.page.cabri.resetScene();
				})
			];
			await this.runMathiaSpeech(introTeam);
			// scenario multi continues in this.nextPlayerInit()
		} else {
			// intro SOLO:
			const introSolo: Array<any> = [
				new ScenarioPhrase(firstMessage).setRandomMode(),
				new ScenarioPhrase([
					$localize`Attention au départ ! Nous ${reDecollons} dans l’espace vers le jeu de Kim !`,
					$localize`Attache ta ceinture, nous ${rePartons} dans l’espace jouer au jeu de Kim !`,
					$localize`Notre fusée est prête à ${reDécoller} dans l’espace vers le jeu de Kim ! On y va ?`
				]).setRandomMode(),
				new ScenarioPhrase([$localize`Le but de notre expédition est simple : trouver des étoiles ou des lunes !`]),
				new ScenarioPhrase([$localize`Et surtout apprendre à reconnaître les différents solides !`], async () => {
					await this.timeOut(1000);
					// this.page.setObjects();
				}),
				new ScenarioPhrase([$localize`Nous allons dans une galaxie pleine de nuages cosmiques`]),
				new ScenarioPhrase([$localize`Je vais en profiter pour y cacher des solides !`]),
				new ScenarioPhrase([$localize`Ta mission est de retrouver les solides que je cacherai dans les nuages !`], async () => {
					await this.page.setAllObjects();
					await this.page.setObjectToFind(1);
					this.page.cabri.updateObjectsToRotate();
				}),
				new ScenarioPhrase([$localize`Par exemple voici des solides. Ils sont beaux, non ?`]),
				new ScenarioPhrase([$localize`Il y a les cubes...`], async () => {
					await this.page.cabri.hideAllSolids();
					this.page.cabri.toggleSolids("cube", 1);
					await this.timeOut(2000);
				}),
				new ScenarioPhrase([$localize`Les pavés...`], async () => {
					await this.page.cabri.hideAllSolids();
					this.page.cabri.toggleSolids("pave", 1);
					await this.timeOut(2000);
				}),
				new ScenarioPhrase([$localize`Les boules...`], async () => {
					await this.page.cabri.hideAllSolids();
					this.page.cabri.toggleSolids("boule", 1);
					await this.timeOut(2000);
				}),
				new ScenarioPhrase([$localize`Les pyramides...`], async () => {
					await this.page.cabri.hideAllSolids();
					this.page.cabri.toggleSolids("pyr", 1);
					await this.timeOut(2000);
				}),
				new ScenarioPhrase([$localize`Les cônes...`], async () => {
					await this.page.cabri.hideAllSolids();
					this.page.cabri.toggleSolids("cone", 1);
					await this.timeOut(2000);
				}),
				new ScenarioPhrase([$localize`Et les cylindres !`], async () => {
					await this.page.cabri.hideAllSolids();
					this.page.cabri.toggleSolids("cyl", 1);
					await this.timeOut(2000);
					await this.page.cabri.showAllSolids();
				}),
				new ScenarioPhrase([$localize`Je vais cacher un de nos petits solides à chaque tour...`]),
				new ScenarioPhrase([$localize`Comme ça ! Pouf !`], async () => {
					await this.page.cabri.hideObjectTofind(this.page.objectToFindId);
					await this.timeOut(2000);
				}),
				new ScenarioPhrase([$localize`As-tu vu lequel j’ai caché ? C’est celui qui clignote !`], async () => {
					await this.page.cabri.blinkObject(this.page.objectToFindId);
					await this.timeOut(6000);
					this.page.cabri.stopBlink(this.page.objectToFindId);
				}),
				new ScenarioPhrase([$localize`Il te suffit alors de me dire son nom pour que je le retrouve !`]),
				new ScenarioPhrase([$localize`Pour cela, parle-moi quand le triangle en face de toi est allumé en rouge.`], async () => {
					this.page.holoTriangleStt = true;
					this.page.detectChanges();
				}),
				new ScenarioPhrase([$localize`Tu le vois ?`], async () => {
					await this.timeOut(2000);
					this.page.holoTriangleStt = false;
					this.page.detectChanges();
				}),
				new ScenarioPhrase([$localize`Ok, maintenant que tu sais tout, commençons notre nouvelle aventure !`], async () => {
					await this.page.hideObjects();
					await this.page.cabri.resetScene();
				}),
				new ScenarioPhrase([$localize`Attention !`]),
				new ScenarioPhrase(`3... 2... 1...`),
				new ScenarioPhrase(
					[
						$localize`C’est parti !`,
						$localize`Décollage !`,
						$localize`Allumage des réacteurs !`,
						$localize`Vers l’infini et au-delà !`,
						$localize`Que la force soit avec toi !`
					],
					null,
					[
						$localize`:tts:C’est parti i i!`,
						$localize`:tts:Décollage!`,
						$localize`:tts:Allumage des réacteurs!`,
						$localize`:tts:Vers l’infini et au-delà !`,
						$localize`:tts:Que la force soit avec toi !`
					]
				).setRandomMode()
			];
			await this.runMathiaSpeech(introSolo);
			// end intro solo
		}
	}

	/**
	 * Recommencer l’activité
	 */
	async restartActivity() {
		const playRestart: Array<any> = [
			new ScenarioPhrase([$localize`Une nouvelle expédition est parée au lancement ? Youpi !`]),
			new ScenarioPhrase([$localize`C’est reparti pour un nouveau jeu de Kim dans l’espace !`])
		];
		await this.runMathiaSpeech(playRestart);
	}

	/**
	 * Lancement de l’activité / 1er joueur
	 */
	async nextPlayerInit() {
		const nextPlayerInit: Array<any> = [
			new ScenarioPhrase([
				$localize`C’est toi qui commences ${this.page.currentUser.name} !`,
				$localize`A toi de commencer ${this.page.currentUser.name} !`,
				$localize`${this.page.currentUser.name}:playerName:, à toi l’honneur de répondre en premier !`
			]).setRandomMode(),
			new ScenarioPhrase(`3... 2... 1...`),
			new ScenarioPhrase(
				[
					$localize`C’est parti !`,
					// $localize`Décollage !`,
					// $localize`Allumage des réacteurs !`,
					$localize`Vers l’infini et au-delà !`,
					$localize`Que la force soit avec toi !`
				]
			).setRandomMode()
		];
		await this.runMathiaSpeech(nextPlayerInit);
	}

	/**
	 * Joueur suivant.
	 */
	async nextPlayerSwitch() {
		const nextPlayerContent: Array<any> = [
			new ScenarioPhrase([
				$localize`Maintenant c’est à ${this.page.currentUser.name}:playerName: de piloter ! Vas-y ${this.page.currentUser.name}:playerName: !`,
				$localize`Maintenant à toi ${this.page.currentUser.name}:playerName: ! Vas-y !`,
				$localize`A ton tour ${this.page.currentUser.name}:playerName: !`,
				$localize`A toi ${this.page.currentUser.name}:playerName: !`,
				$localize`Ok, à ton tour ${this.page.currentUser.name}:playerName: ! Vas-y !`,
				$localize`${this.page.currentUser.name}:playerName: ? Tu es toujours là ? Ok, à toi de jouer !`,
				$localize`Et maintenant c’est à... Mince j’ai oublié ! Olala... A oui ! C’est à ${this.page.currentUser.name}:playerName: !`,
				$localize`On forme une bonne équipe tous les ${this.page.currentTeam.length + 1}, non ? Continuons !
				A toi ${this.page.currentUser.name}:playerName: !`,
				$localize`A ${this.page.currentUser.name}:playerName: maintenant !`,
				$localize`${this.page.currentUser.name}:playerName:, à toi !`,
				$localize`Quel voyage ! A toi ${this.page.currentUser.name}:playerName: !`
			])
		];
		await this.runMathiaSpeech(nextPlayerContent);
	}

	/**
	 * Aide (est précédée de badResponseWillRetry())
	 */
	async help() {
		const speechSequence = [
			new ScenarioPhrase([$localize`Le solide qu’il faut trouver est celui qui clignote, regarde !`], async () => {
				if (!this.skipSequence) {
					await this.page.cabri.blinkObject(this.page.objectToFindId);
				}
			}),
			new ScenarioPhrase([$localize`Tu le vois ?`], async () => {
				if (!this.skipSequence) {
					await this.timeOut(4000);
				}
				await this.page.cabri.stopBlink(this.page.objectToFindId);
				this.page.cabri.hideObjectTofind(this.page.objectToFindId);
			}),
			new ScenarioPhrase([$localize`Maintenant essaye de répondre à nouveau !`]),
			new ScenarioPhrase([$localize`Quel est le solide qui a disparu ?`])
		];
		await this.runMathiaSpeech(speechSequence);
	}

	/**
	 *  Première phrase lors de la toute première question:
	 */
	async lookFirst() {
		const look: Array<any> = [new ScenarioPhrase([$localize`Regarde ! Voici des solides !`]).disableSkipButton()];
		await this.runMathiaSpeech(look);
	}

	/**
	 *  Première phrase lors d’une nouvelle question:
	 */
	async look() {
		const look: Array<any> = [
			new ScenarioPhrase([
				$localize`Regarde les solides !`,
				$localize`Regarde ces solides !`,
				$localize`Regarde les solides !`,
				$localize`Regarde ces solides !`,
				$localize`Regarde ! Des petits solides...`
			])
				.setRandomMode()
				.disableSkipButton()
		];
		await this.runMathiaSpeech(look);
	}

	/**
	 *  Deuxième phrase lors d’une nouvelle question: (disabled for quickness)
	 */
	async memorize1st() {
		const disappear: Array<any> = [
			new ScenarioPhrase([
				$localize`Mémorise les bien !`
				// $localize`Essaye de bien les mémoriser !`,
				// $localize`Essaye de bien te souvenir d’eux !`,
				// $localize`Souviens-toi bien d’eux !`
			])
				.setRandomMode()
				.disableSkipButton()
		];
		await this.runMathiaSpeech(disappear);
	}

	/**
	 *  Deuxième phrase lors d’une nouvelle question:
	 */
	async memorize() {
		const disappear: Array<any> = [
			new ScenarioPhrase([
				$localize`Mémorise bien ces nouveaux solides !`,
				$localize`Regarde ces nouveaux solides !`,
				$localize`Attention, de nouveaux solides !`
				// $localize`Souviens-toi bien d’eux !`
			])
				.setRandomMode()
				.disableSkipButton()
		];
		await this.runMathiaSpeech(disappear);
	}

	/**
	 *  Troisème phrase lors d’une nouvelle question:
	 */
	waitPlayerReady(promiseButton, text: string) {
		return new Promise(async resolve => {
			const waitPlayerReady: Array<any> = [
				new ScenarioPhrase(
					[text],
					async () => {
						await promiseButton;
						resolve(true);
					},
					null,
					"Nuage"
				).showButtons()
			];
			this.runMathiaSpeech(waitPlayerReady);
		});
	}

	/**
	 *  Quatrième phrase lors de la toute première question:
	 */
	async cosmicCloudComingFirstTime() {
		const cosmicCloudComing: Array<any> = [new ScenarioPhrase($localize`Oh ! Regarde ! Un nuage cosmique !`).disableSkipButton()];
		await this.runMathiaSpeech(cosmicCloudComing);
	}

	/**
	 *  Quatrième phrase lors d’une nouvelle question:
	 */
	async cosmicCloudComing() {
		const cosmicCloudComing: Array<any> = [
			new ScenarioPhrase([
				$localize`Chouette ! Le nuage cosmique !`,
				$localize`Le nuage est de retour !`,
				$localize`Le nuage cosmique revient !`,
				$localize`Super ! Le nuage cosmique !`,
				$localize`Sacreboule ! Le nuage !`
			])
				.setRandomMode()
				.disableSkipButton()
		];
		await this.runMathiaSpeech(cosmicCloudComing);
	}

	/**
	 *  Cinquième phrase lors de la toute première question:
	 */
	async disappeardFirst() {
		const hop: Array<any> = [new ScenarioPhrase($localize`J’en ai profité pour y cacher un solide !`).disableSkipButton()];
		await this.runMathiaSpeech(hop);
	}

	/**
	 *  Cinquième phrase lors d’une nouvelle question:
	 */
	async disappeardAgain() {
		const hop: Array<any> = [
			new ScenarioPhrase(
				this.cabriService.teamTotalAwards < 5
					? [
							$localize`Hop ! Un solide en moins !`,
							$localize`J’y ai caché un solide !`,
							$localize`Abracadaboule ! Un solide en moins !`
					  ]
					: [
							$localize`Abracadaboule !`,
							$localize`Hop ! Un solide en moins !`,
							$localize`Abracadaboule !`,
							$localize`Hop ! Un solide en moins !`,
							$localize`Et encore un solide de caché !`
					  ]
			)
				.setRandomMode()
				.disableSkipButton()
		];
		await this.runMathiaSpeech(hop);
	}

	/**
	 *  Dernière phrase lors de la première question:
	 */
	async whichObjectFirst() {
		const disappear: Array<any> = [
			new ScenarioPhrase([
				$localize`Quel est le solide que j’ai caché ?`,
				$localize`Quel est le nom du solide manquant ?`,
				// $localize`${this.page.currentUser.name}:playerName:, quel est le nom du solide manquant ?`,
				$localize`Quel est le nom du solide que j’ai caché ?`,
				$localize`Comment s'appelle le solide que j’ai caché ?`
			])
				.setRandomMode()
				.disableSkipButton()
		];
		await this.runMathiaSpeech(disappear);
	}

	/**
	 *  Dernière phrase lors d’une nouvelle question:
	 */
	async whichObject() {
		const disappear: Array<any> = [
			new ScenarioPhrase(
				this.cabriService.teamTotalAwards < 5
					? [$localize`Quel est son nom ?`, $localize`Comment s’appelle t-il ?`]
					: [
							$localize`Quel est le nom du solide que j’ai caché ?`,
							$localize`Quel est le nom du solide qui a disparu ?`,
							$localize`Quel est le nom du solide manquant ?`,
							$localize`${this.page.currentUser.name}:playerName:, quel est le nom du solide manquant ?`,
							$localize`Comment s'appelle le solide que j’ai caché ?`,
							$localize`Comment s’appelle le solide qui a disparu ?`,
							$localize`Comment s’appelle le solide manquant ?`,
							$localize`${this.page.currentUser.name}:playerName:, comment s’appelle le solide manquant ?`,
							$localize`Quel est le solide manquant ?`,
							$localize`Quel est le solide qui a disparu ?`,
							$localize`Quel est le solide que j’ai caché ?`,
							$localize`${this.page.currentUser.name}:playerName:, quel est le solide que j’ai caché ?`
					  ]
			)
				.setRandomMode()
				.disableSkipButton()
		];
		await this.runMathiaSpeech(disappear);
	}

	/**
	 *  Message entre 2 questions quand 1 seul joueur (SOLO)
	 */
	async continueSolo() {
		const look: Array<any> = [
			new ScenarioPhrase([
				$localize`On continue !`,
				$localize`Continuons !`,
				$localize`Je sens un nouveau nuage arriver ! Continuons !`,
				$localize`Toujours là ${this.page.currentUser.name}:playerName: ? Continuons !`
			])
				.setRandomMode()
				.disableSkipButton()
		];
		await this.runMathiaSpeech(look);
	}

	async endOfActivity() {
		const phrase: Array<any> = [new ScenarioPhrase([$localize`Quelle expédition !`, $localize`Quel voyage !`]).setRandomMode()];
		this.page.starboardToggle = false;
		this.detectChanges();
		await this.runMathiaSpeech(phrase);
	}
}

results matching ""

    No results matching ""