src/app/models/scenario-solides.ts
constructor(cabri: CabriDataService, accountService: AccountService, globalService: GlobalService, page: any, cd: ChangeDetectorRef, ttsService: any)
|
| 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.
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
|
| Public page |
page: |
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);
}
}