File

src/app/models/scenario-solides.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
goodResponse
goodResponse(answerStatus: AnswerStatus, responseTimeInSeconds: number, award: string)

Bonne réponse avec récompense (étoile / étoile filante / sonic mode detection)

Returns: void
badAnswer
badAnswer(answerStatus: AnswerStatus, responseTimeInSeconds: number)
Returns: void
playIntro
playIntro()

Introduction discovery mode

Returns: void
playIntroExos
playIntroExos(exoType: ExerciseType)

Introduction exercices

Returns: void
playIntroHoloRemote
playIntroHoloRemote()

Introduction Holo Remote

Returns: void
endPatron
endPatron()

Patron terminé/assemblé

Returns: void
endPatrons
endPatrons()

Tous les patrons d’un solide ont été assemblés.
cube: 11, pavé: 54, pyramide: 8.

Returns: void
pushButtons
pushButtons()
Returns: void
markFacetsEdgesVertices
markFacetsEdgesVertices(item: string)
Returns: void
endFacetsEdgesVertices
endFacetsEdgesVertices(item: string)

Tou(te)s les faces/arêtes/sommets ont été cliqué(es)

Returns: void
playRestart
playRestart()

play TTS sequence on Restart Activity

Returns: any
restartActivity
restartActivity()

Recommencer l’activité

Returns: void
whatSolidName
whatSolidName()
Returns: void
readConsigne
readConsigne(consigne: string, consigne2: string)
Returns: void
introRemediationPattern
introRemediationPattern()
Returns: void
goodAnswer
goodAnswer()
Returns: void
badAnswerRetry
badAnswerRetry()
Returns: void
descriptionSolid
descriptionSolid()
Returns: void

Properties

Public page
page: SolidesPage
import { PlayTTSService } from "src/app/services/play-tts.service";
import { ChangeDetectorRef } from "@angular/core";
import { SolidesPage } from "../page/solides/solides.page";
import { AccountService } from "../services/account.service";
import { CabriDataService } from "../services/cabri-data.service";
import { GlobalService } from "../services/global.service";
import { ExerciseType, SolideIds } from "./exercices-solides";
import { LrsUtils } from "./lrs/lrsUtils";
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 ScenarioSolides extends ScenarioCabri {
	public page: SolidesPage;

	constructor(
		cabri: CabriDataService,
		accountService: AccountService,
		globalService: GlobalService,
		page: any,
		cd: ChangeDetectorRef,
		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 ${this.page.currentUser.name}:playerName: ! Tu l’as retrouvé !`,
		// 	$localize`Bien joué ${this.page.currentUser.name}: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`Supra-luminique ! Tu réponds à la vitesse de l’éclair !`,
				$localize`Lumino-fantastique !`,
				$localize`Quelle maîtrise des solides ! Et quelle vitesse ! Bravo !`,
				$localize`Tu connais les solides à la perfection #playerName ! Bravo !`,
				$localize`Par Toutatis ! Quelle maîtrise de la géométrie !`
			],
			2
		);
		// PROGRESSION ABOVE AVERAGE
		this.addFeedbacks(
			{ status: AnswerStatus.VALID1ST, progressionAverage: AnswerAverage.ABOVE },
			3,
			[
				$localize`Wahou ! 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 ! Rien ne t’arrête !`,
				$localize`Eh bien ! Les solides n’ont pas de secrets pour toi !`,
				$localize`Incroyable ! Jusqu’où iras-tu comme ça ?`,
				$localize`Epoustouflant #playerName !`,
				$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 !`
			],
			2
		);
		// SUCCESS 2ND TRY
		this.addFeedbacks(
			{ status: AnswerStatus.VALID2ND },
			2,
			[
				$localize`Oui #playerName ! Magnifique rattrapage !`,
				$localize`Oui ! Tu as trouvé ! Je suis fière de toi !`,
				$localize`Wahou ! C’est bien ça ! Beau rattrapage !`,
				$localize`Oui ! Bravo ! C’était bien ça !`,
				$localize`Oui, bien rattrapé #playerName !`,
				$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 ! Je vais t’aider !`],
			2
		);
		this.addFeedbacks(
			{ status: AnswerStatus.ERROR1ST, needsHelp: AnswerNeedsHelp.YES },
			3,
			[
				$localize`Oups ! Laisse-moi te donner un coup de main !`,
				$localize`Tu y es presque ! Je vais t’aider !`,
				$localize`Oups ! Ce n’est pas ça. Laisse moi t’aider !`,
				$localize`Tu t’es trompé mais ce n’est pas grave, c’est comme ça qu’on apprend ! Je vais t’aider !`,
				$localize`Oups... J’aimerais pouvoir te dire que tu as trouvé, mais ce n’est pas ça !`,
				$localize`Ce n’est pas ça ! Voici un peu d’aide !`,
				$localize`Oups ! La soucoupe bug ! Je vais te donner un petit coup de main !`
				// $localize`Dommage, tu y étais presque... Regardons de plus près ces solides !`,
				// $localize`Attention ! Tu t’es perdu dans le nuage cosmique ! Je vais te guider !`,
				// $localize`Oups, ce n’est pas celui-ci. Regardons de plus près !`,
				// $localize`Appel à la base ! Nous avons besoin d’aide par ici !`,
			],
			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`Non. 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 ça. Courage !`,
				$localize`Tu y étais presque ! Ce n’est pas grave.`
				// $localize`Oups, ce n’est pas le bon solide...`
			],
			2
		);
		this.addFeedbacks(
			{ status: AnswerStatus.ERROR2ND, progressionAverage: AnswerAverage.BELOW },
			2,
			[$localize`Oups... Ce n’est pas ça ! Courage, je suis sûre que tu vas y arriver !`],
			2
		);
		this.addFeedbacks(
			{ status: AnswerStatus.ERROR2ND, progressionAverage: AnswerAverage.ABOVE },
			2,
			[
				$localize`Oups... Non. Tu était sur le bon chemin pourtant ! Allez, courage #playerName ! Tu peux le faire !`
			],
			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... Mauvaise réponse cette fois-ci !`],
			2
		);
		// console.error("feedbacks unshuffled = ", this.feedbacks);
		if (randomize) {
			AppUtils.shuffleArray(this.feedbacks);
			// console.error("feedbacks shuffled = ", this.feedbacks);
		}
	}

	/**
	 * Bonne réponse avec récompense (étoile / étoile filante / sonic mode detection)
	 */
	async goodResponse(answerStatus: AnswerStatus, responseTimeInSeconds: number, award: string) {
		let speechSequence;
		if (this.page.sonicAward) {
			this.page.hideBubbleText = true;
			speechSequence = [new ScenarioPhrase([" "], async() => {
				await this.page.timeOut(1500);
			}).showAward(award)];
		} else {
			const phrase = this.getContextualFeedbackPhrase(answerStatus, responseTimeInSeconds, award, 20, 4, 5, 3);
			speechSequence = [new ScenarioPhrase([phrase]).setRandomMode()];
		}
		await this.runMathiaSpeech(speechSequence);
		this.page.hideBubbleText = false;
	}

	async badAnswer(answerStatus: AnswerStatus, responseTimeInSeconds: number) {
		let feedbackNeedsHelp: AnswerNeedsHelp;
		if (this.page.needsHelp) {
			feedbackNeedsHelp = AnswerNeedsHelp.IGNORE;
		} else {
			feedbackNeedsHelp = AnswerNeedsHelp.YES;
		}
		const phrase = this.getContextualFeedbackPhrase(answerStatus, responseTimeInSeconds, null, 20, 4, 5, 3, feedbackNeedsHelp);
		const speechSequence = [new ScenarioPhrase([phrase]).setRandomMode()];
		await this.runMathiaSpeech(speechSequence);
		this.page.hideBubbleText = false;
	}

	/**
	 * Introduction discovery mode
	 */
	async playIntro() {
		if (!this.page.haveUserConnected) {
			const players: any = this.accountService.team.map(student => student.name).join(" ! ");
			// SEQUENCE:
			if (this.accountService.team.length > 1) {
				// MULTI:
				const introTeam: Array<any> = [
					new ScenarioPhrase([
						$localize`${players}:allPlayersNames: ! Bienvenue dans la galaxie des solides !`
					]),
					new ScenarioPhrase([
						$localize`Dans cette expédition, nous allons rencontrer différents types de solides !`
					]),
					new ScenarioPhrase([
						$localize`A vous de compter leurs faces, leurs arêtes et leurs sommets pour mieux les reconnaître.`
					]),
					new ScenarioPhrase([$localize`Vous pouvez même apprendre à les assembler à partir de leurs patrons !`]),
					new ScenarioPhrase([$localize`On y va ?`]),
					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(introTeam);
				// scenario multi should continues in this.nextPlayerInit() (TODO: handle multiplayer in solides exercises)
			} else {
				// intro SOLO:
				const introSolo: Array<any> = [
					new ScenarioPhrase([
						$localize`Bienvenue dans la galaxie des solides ${this.page.currentUser.name} !`
					]),
					new ScenarioPhrase([
						$localize`Dans cette expédition, nous allons rencontrer différents types de solides !`
					]),
					new ScenarioPhrase([
						$localize`À toi de compter leurs faces, leurs arêtes et leurs sommets pour mieux les reconnaître.`
					]),
					new ScenarioPhrase([$localize`Tu peux même apprendre à les assembler à partir de leurs patrons !`]),
					new ScenarioPhrase([$localize`On y va ?`]),
					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 exercices
	 */
	 async playIntroExos(exoType: ExerciseType) {
		if (!this.page.haveUserConnected) {
			const players: any = this.accountService.team.map(student => student.name).join(" ! ");
			// SEQUENCE:
			if (this.accountService.team.length > 1) {
				// MULTI:
				const introTeam = new Array();
				introTeam.push(
					new ScenarioPhrase([
						$localize`${players}:allPlayersNames: ! Bienvenue dans la galaxie des solides !`
					]).setRandomMode()
				)
				switch (exoType) {
					case ExerciseType.name:
						introTeam.push(
							new ScenarioPhrase([
								$localize`Dans cette expédition, nous allons voir si vous arrivez à reconnaître les différents solides que je vais vous montrer !`
							]).setRandomMode()
						)
						break;
					case ExerciseType.recognize:
						introTeam.push(
							new ScenarioPhrase([
								$localize`Dans cette expédition, nous allons voir si vous arrivez à reconnaître les différents solides que je vais vous montrer !`
							]).setRandomMode()
						)
						break;
					case ExerciseType.describe:
						introTeam.push(
							new ScenarioPhrase([
								$localize`Dans cette expédition, nous allons voir si vous connaissez bien toutes les caractéristiques de chaque solide !`
							]).setRandomMode()
						)
						break;
					case ExerciseType.pattern:
						introTeam.push(
							new ScenarioPhrase([
								$localize`Dans cette expédition, nous allons voir si vous connaissez bien les solides et leurs patrons !`
							]).setRandomMode()
						)
						break;
					default:
						break;
				}
				introTeam.push(
					new ScenarioPhrase([$localize`Ne vous inquiétez pas, si vous vous trompez je vous aiderai !`])
				)
				introTeam.push(
					new ScenarioPhrase([$localize`On y va ?`])
				)
				introTeam.push(
					new ScenarioPhrase("3... 2... 1...")
				)
				introTeam.push(
					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(introTeam);
				// scenario multi should continues in this.nextPlayerInit() (TODO: handle multiplayer in solides exercises)
			} else {
				// intro SOLO:
				const introSolo = new Array();
				introSolo.push(
					new ScenarioPhrase([
						$localize`Bienvenue dans la galaxie des solides ${this.page.currentUser.name} !`
					]).setRandomMode()
				)
				switch (exoType) {
					case ExerciseType.name:
						introSolo.push(
							new ScenarioPhrase([
								$localize`Dans cette expédition, nous allons voir si tu arrives à reconnaître les différents solides que je vais te montrer !`
							]).setRandomMode()
						)
						break;
					case ExerciseType.recognize:
						introSolo.push(
							new ScenarioPhrase([
								$localize`Dans cette expédition, nous allons voir si tu arrives à reconnaître les différents solides que je vais te montrer !`
							]).setRandomMode()
						)
						break;
					case ExerciseType.describe:
						introSolo.push(
							new ScenarioPhrase([
								$localize`Dans cette expédition, nous allons voir si tu connais bien toutes les caractéristiques de chaque solide !`
							]).setRandomMode()
						)
						break;
					case ExerciseType.pattern:
						introSolo.push(
							new ScenarioPhrase([
								$localize`Dans cette expédition, nous allons voir si tu connais bien les solides et leurs patrons !`
							]).setRandomMode()
						)
						break;
					default:
						break;
				}
				introSolo.push(
					new ScenarioPhrase([$localize`Ne t'inquiéte pas ! Si tu te trompes, je t’aiderai !`])
				)
				introSolo.push(
					new ScenarioPhrase([$localize`On y va ?`])
				)
				introSolo.push(
					new ScenarioPhrase("3... 2... 1...")
				)
				introSolo.push(
					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 Holo Remote
	 */
	async playIntroHoloRemote() {
		let players: any = this.accountService.team.map(student => student.name);
		players = players.join(" ! ");
		let tonVotre: string;
		let push: string;
		if (this.accountService.team.length > 1) {
			tonVotre = $localize`votre`;
			push = $localize`Appuyez`;
		} else if (this.accountService.team.length === 1) {
			tonVotre = $localize`ton`;
			push = $localize`Appuie`;
		}
		// SEQUENCE:
		if (this.accountService.team.length > 1) {
			// MULTI:
			const introTeam: Array<any> = [
				new ScenarioPhrase([
					$localize`${players}:allPlayersNames: ! Bienvenue à bord !`,
					$localize`Salutations voyageurs ! C’est super boulonique de vous voir ici !`
				]).setRandomMode(),
				new ScenarioPhrase([
					$localize`Notre fusée est prête à décoller vers la galaxie des solides !`,
					$localize`Attention au départ ! Nous décollons vers la galaxie des solides !`,
					$localize`Attachez votre ceinture, nous partons découvrir la galaxie des solides !`
				]).setRandomMode(),
				new ScenarioPhrase([
					$localize`Dans cette expédition, nous allons rencontrer différents types de solides !`
				]).setRandomMode(),
				new ScenarioPhrase([
					$localize`A vous de compter leurs faces, leurs arêtes et leurs sommets pour mieux les reconnaître.`
				]).setRandomMode(),
				new ScenarioPhrase([$localize`Vous pouvez même apprendre à les assembler à partir de leurs patrons !`]).setRandomMode(),
				new ScenarioPhrase([$localize`On y va ?`]).setRandomMode(),
				new ScenarioPhrase("3... 2... 1..."),
				new ScenarioPhrase([$localize`C’est parti !`, $localize`Décollage !`, $localize`Allumage des réacteurs !`], null, [
					$localize`C’est parti i i!`,
					$localize`Décollage!`,
					$localize`Allumage des réacteurs!`
				]).setRandomMode(),
				new ScenarioPhrase([
					$localize`${push}:push: sur le bouton de ${tonVotre}:your: choix pour commencer ${tonVotre}:your: voyage !`
				])
			];
			await this.runMathiaSpeech(introTeam);
		} else {
			// intro SOLO:
			const introSolo: Array<any> = [
				new ScenarioPhrase([
					$localize`Bienvenue à bord ${this.page.currentUser.name} !`,
					$localize`Salutations ${this.page.currentUser.name} ! C’est super boulonique de te voir ici !`
				]).setRandomMode(),
				new ScenarioPhrase([
					$localize`Notre fusée est prête à décoller vers la galaxie des solides !`,
					$localize`Attention au départ ! Nous décollons vers la galaxie des solides !`,
					$localize`Attache ta ceinture, nous partons découvrir la galaxie des solides !`
				]).setRandomMode(),
				new ScenarioPhrase([
					$localize`Dans cette expédition, nous allons rencontrer différents types de solides !`
				]).setRandomMode(),
				new ScenarioPhrase([
					$localize`À toi de compter leurs faces, leurs arêtes et leurs sommets pour mieux les reconnaître.`
				]).setRandomMode(),
				new ScenarioPhrase([$localize`Tu peux même apprendre à les assembler à partir de leurs patrons !`]).setRandomMode(),
				new ScenarioPhrase([$localize`On y va ?`]).setRandomMode(),
				new ScenarioPhrase("3... 2... 1..."),
				new ScenarioPhrase([$localize`C’est parti !`, $localize`Décollage !`, $localize`Allumage des réacteurs !`], null, [
					$localize`C’est parti i i!`,
					$localize`Décollage!`,
					$localize`Allumage des réacteurs!`
				]).setRandomMode(),
				new ScenarioPhrase([
					$localize`${push}:push: sur le bouton de ${tonVotre}:your: choix pour commencer ${tonVotre}:your: voyage !`
				])
			];
			await this.runMathiaSpeech(introSolo);
		}
	}

	/**
	 * Patron terminé/assemblé
	 */
	async endPatron() {
		if (!this.page.haveUserConnected) {
			this.page.audioService.playStarSound();
			let tuVousA: string;
			if (this.accountService.team.length > 1) {
				tuVousA = $localize`Vous avez`;
			} else if (this.accountService.team.length === 1) {
				tuVousA = $localize`Tu as`;
			}
			const speechSequence = [
				new ScenarioPhrase([
					$localize`Lumino-fantastique ! Quel assemblage !`,
					$localize`Méga-boulonique ! ${tuVousA}:youHaveBeforeVerb: réussi !`,
					$localize`Bravo ! ${tuVousA}:youHaveBeforeVerb: réussi !`,
					$localize`Vers l’infini et au-delà ! Bien joué !`,
					$localize`Oui ! Bravo !`
				])
					.disableSkipButton()
					.setRandomMode()
			];
			await this.runMathiaSpeech(speechSequence);
		}
	}

	/**
	 * Tous les patrons d’un solide ont été assemblés.
	 * cube: 11, pavé: 54, pyramide: 8.
	 */
	async endPatrons() {
		if (!this.page.haveUserConnected) {
			this.page.audioService.playStarSound();
			let tuVous: string;
			if (this.accountService.team.length > 1) {
				tuVous = $localize`Vous avez`;
			} else if (this.accountService.team.length === 1) {
				tuVous = $localize`Tu as`;
			}
			const speechSequence = [
				new ScenarioPhrase([$localize`Bravo ${tuVous}:youHaveBeforeVerb: terminé tous les patrons !`]).disableSkipButton()
			];
			await this.runMathiaSpeech(speechSequence);
		}
	}

	async pushButtons() {
		if (!this.page.haveUserConnected) {
			let tonVotre: string;
			let push: string;
			if (this.accountService.team.length > 1) {
				tonVotre = $localize`votre`;
				push = $localize`Appuyez`;
			} else if (this.accountService.team.length === 1) {
				tonVotre = $localize`ton`;
				push = $localize`Appuie`;
			}
			const speechSequence = [
				new ScenarioPhrase([
					$localize`${push}:push: sur le bouton de ${tonVotre}:your: choix pour commencer ${tonVotre}:your: voyage !`
				])
			];
			await this.runMathiaSpeech(speechSequence);
		}
	}

	async markFacetsEdgesVertices(item: string) {
		if (!this.page.haveUserConnected) {
			let push: string;
			let items: string;
			let itemSingular: string;
			if (this.accountService.team.length > 1) {
				push = $localize`Appuyez`;
			} else if (this.accountService.team.length === 1) {
				push = $localize`Appuie`;
			}
			if (item === "facets") {
				items = $localize`:leaveSpaceAtTheEnd:faces ` + ' ';
				itemSingular = $localize`:leaveSpaceAtTheEnd:face ` + ' ';
			} else if (item === "edges") {
				items = $localize`:leaveSpaceAtTheEnd:arêtes ` + ' ';
				itemSingular = $localize`:leaveSpaceAtTheEnd:arête ` + ' ';
			} else if (item === "vertices") {
				items = $localize`:leaveSpaceAtTheEnd:sommets ` + ' ';
				itemSingular = $localize`:leaveSpaceAtTheEnd:sommet ` + ' ';
			}
			const ofSolidName =
				this.page.currentSolid === 7
					? this.page.SOLIDES[this.page.currentSolid].scenarioEnd[this.page.currentRepresentation]
					: this.page.SOLIDES[this.page.currentSolid].scenarioEnd;
			const speechSequence = [
				new ScenarioPhrase([
					$localize`${push}:push: sur les ${items + ofSolidName} pour les colorier !`,
					$localize`${push}:push: sur chaque ${itemSingular + ofSolidName} pour les colorier !`
				]).setRandomMode()
			];
			await this.runMathiaSpeech(speechSequence);
		}
	}

	/**
	 * Tou(te)s les faces/arêtes/sommets ont été cliqué(es)
	 */
	async endFacetsEdgesVertices(item: string) {
		if (!this.page.haveUserConnected) {
			this.page.audioService.playStarSound();
			let tuVousFound: string;
			let tuVousImpress: string;
			let allItems: string;
			if (this.accountService.team.length > 1) {
				tuVousImpress = $localize`Vous m’impressionnez les amis !`;
				tuVousFound = $localize`:you found (before subject)|leaveSpaceAtTheEnd:Vous avez trouvé ` + ' ';
			} else if (this.accountService.team.length === 1) {
				tuVousImpress = $localize`Tu m’impressionnes ${this.page.currentUser.name}:playerName: !`;
				tuVousFound = $localize`:you found (before subject)|leaveSpaceAtTheEnd:Tu as trouvé ` + ' ';
			}
			if (item === "facets") {
				allItems = $localize`:every facets (Geometry)|leaveSpaceAtTheEnd:toutes les faces ` + ' ';
			} else if (item === "edges") {
				allItems = $localize`:every edges (Geometry)|leaveSpaceAtTheEnd:toutes les arêtes ` + ' ';
			} else if (item === "vertices") {
				allItems = $localize`:every vertices (Geometry)|leaveSpaceAtTheEnd:tous les sommets ` + ' ';
			}
			const ofSolidName =
				this.page.currentSolid === 7
					? this.page.SOLIDES[this.page.currentSolid].scenarioEnd[this.page.currentRepresentation]
					: this.page.SOLIDES[this.page.currentSolid].scenarioEnd;
			const speechSequence = [
				new ScenarioPhrase([
					$localize`Wouah ! ${tuVousImpress}`,
					$localize`Wouah ! ${tuVousImpress} Bien joué !`,
					$localize`Super ! ${tuVousFound + allItems}!`,
					$localize`Félicitations ! ${tuVousFound + allItems}!`,
					$localize`Génial ! ${tuVousFound + allItems}!`,
					$localize`Bien joué ! ${tuVousImpress}`,
					$localize`Excellent ! ${tuVousImpress}`,
					$localize`Bravo ! ${tuVousFound + allItems + ofSolidName} !`,
					$localize`Félicitations ! ${tuVousFound + allItems + ofSolidName} !`,
					$localize`Génial ! ${tuVousFound + allItems + ofSolidName} !`,
					$localize`Wouah ! ${tuVousImpress}`,
					$localize`Wouah ! ${tuVousImpress} Bien joué !`,
					$localize`Bravo ! ${tuVousFound + allItems}!`,
					$localize`Félicitations ! ${tuVousFound + allItems}!`,
					$localize`Génial ! ${tuVousFound + allItems}!`,
					$localize`Bien joué ! ${tuVousImpress}`,
					$localize`Excellent ! ${tuVousImpress}`
				]).setRandomMode()
			];
			await this.runMathiaSpeech(speechSequence);
		}
	}

	/**
	 * play TTS sequence on Restart Activity
	 */
	playRestart(): Promise<void> {
		return new Promise(async (resolve, reject) => {
			LrsUtils.currentUser = this.page.currentUser;
			const playRestart: Array<any> = [
				{
					phrase: [$localize`Une nouvelle expédition est parée au lancement ? Youpi !`],
					callback: () => {}
				},
				{
					phrase: [$localize`C’est reparti pour un nouveau jeu des solides intergalactique !`],
					callback: () => {}
				}
			];
			await this.runMathiaSpeech(playRestart);
			resolve();
		});
	}

	/**
	 * 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 voyage dans la galaxie des solides !`])
		];
		await this.runMathiaSpeech(playRestart);
	}

	async whatSolidName() {
		const speechSequence: Array<any> = [new ScenarioPhrase([$localize`Quel est le nom du solide affiché ?`])];
		await this.runMathiaSpeech(speechSequence);
	}
	async readConsigne(consigne: string, consigne2?: string) {
		const speechSequence: Array<any> = [new ScenarioPhrase([consigne]).keepBubbleOn()];
		if (consigne2) {
			speechSequence.push(new ScenarioPhrase([consigne2]).keepBubbleOn());
		}
		await this.runMathiaSpeech(speechSequence);
	}

	async introRemediationPattern() {
		const speechSequence: Array<any> = [
			new ScenarioPhrase([$localize`Essaye de reconstruire le solide en cliquant sur les différentes faces`]),
			new ScenarioPhrase([$localize`et en glissant ton doigt pour les remettre dans les bonnes positions.`]),
			new ScenarioPhrase([$localize`Tu peux aussi faire tourner la caméra en cliquant avec deux doigts`]),
			new ScenarioPhrase([$localize`et en les déplacant dans la direction que tu souhaites.`])
		];
		await this.runMathiaSpeech(speechSequence);
	}
	async goodAnswer() {
		const speechSequence = [new ScenarioPhrase([$localize`Bien joué ${this.page.currentUser.name}:playerName: !`]).setRandomMode()];
		await this.runMathiaSpeech(speechSequence);
	}

	async badAnswerRetry() {
		const speechSequence = [
			new ScenarioPhrase([$localize`Oups, ce n’est pas ça !`]).setRandomMode(),
			new ScenarioPhrase([$localize`Essaye encore !`]).setRandomMode()
		];
		await this.runMathiaSpeech(speechSequence);
	}
	async descriptionSolid() {
		const solidId = this.page.solidsExercices.solidId;
		let speechSequence;
		if (this.page.SOLIDES[solidId].hasFacets) {
			const currentSolidId = solidId + "-1";
			speechSequence = [
				new ScenarioPhrase([$localize`Regarde, j’ai ${this.page.SOLIDES_DATA[currentSolidId].nbFacets} faces,`]),
				new ScenarioPhrase([$localize`${this.page.SOLIDES_DATA[currentSolidId].nbEdges} arêtes,`]),
				new ScenarioPhrase([$localize`${this.page.SOLIDES_DATA[currentSolidId].nbVertices} sommets,`]),
				new ScenarioPhrase([$localize`et mes faces ont une forme de ${this.page.SOLIDES[solidId].facetShape}`])
			];
		} else {
			switch (solidId) {
				case SolideIds.cone:
					speechSequence = [
						new ScenarioPhrase([
							$localize`Regarde, j’ai une base ronde et je ressemble à une glace ou un plot de signalisation.`
						])
					];
					break;
				case SolideIds.boule:
					speechSequence = [
						new ScenarioPhrase([$localize`Regarde, je suis toute ronde et je ressemble à une planète ou une orange`])
					];
					break;
				case SolideIds.cylindre:
					speechSequence = [
						new ScenarioPhrase([$localize`Regarde, mes extrémités sont rondes et je suis tout lisse sur les côtés.`])
					];
					break;
				default:
					speechSequence = [new ScenarioPhrase([this.page.SOLIDES[solidId].name])];
			}
		}
		await this.runMathiaSpeech(speechSequence);
	}
}

results matching ""

    No results matching ""