Accueil Github ↗
Itération 3

AS — Apprentissage seul

Mode 100% cognitif sans composante physique : sous-mode Interactif (attend le clic élève) et sous-mode Vidéo (révélation automatique). Même scène, routeur SelectMode.

Le dossier Gameplay/AS/QCM/ gère les activités 100% cognitives. Deux sous-modes partagent la même scène — SelectMode.cs active le bon GameManager selon ActivityDataManager.Mode.

SelectMode.cs — routeur de scène

Désactive les deux GameObjects dans Awake() (pour éviter les bugs si un développeur oublie de les décocher dans l’éditeur), puis dans Start() active le bon selon ActivityDataManager.Mode :

  • Mode.VideoAS → active modeVideoGo
  • Mode.InteractifChoixReponseAS → active modeInteractifGo
  • Autre valeur → lance une Exception("Mode de jeu non défini")

Mode Interactif — GameManager

Mode 100% cognitif où l’élève répond à son propre rythme. Le jeu attend réellement un clic avant de passer à la question suivante.

Pipeline

  1. Start : lance asPlaylist, remplit l’interface depuis ActivityDataManager, envoie les JSON au QuestionManager, enregistre “AS-Interactif” dans PlayerData.
  2. Écran d’accueil : jeu en pause, attend le clic sur “Commencer”.
  3. Boucle (StartModeVideo_Coroutine, malgré le nom) : pour chaque question, le QuestionDisplayer l’affiche, puis le code attend l’événement OnAnswerRevealed via WaitUntil — l’élève a tout le temps qu’il lui faut pour réfléchir.
  4. Fin : envoie les statistiques à Google Sheets via une requête asynchrone avant de charger le menu (la requête HTTP doit se terminer avant le changement de scène, sinon les données seraient perdues).

Méthodes clés

// Attente d'un clic — l'élève contrôle le rythme
bool answered = false;
questionDisplayer.OnAnswerRevealed += (correct) => { answered = true; };
yield return new WaitUntil(() => answered);
// Sauvegarde asynchrone — attend la fin de la requête HTTP
yield return StartCoroutine(APIGoogleSheet.AttendreFinEcriture(
    APIGoogleSheet.EcrireDansClasseurStatistique()
));

EndActivityBeforeTheEnd() : vérifie _gameStarted. Si le jeu avait commencé, force EndActivity() pour sauvegarder. Si on était encore sur l’écran d’accueil, quitte directement sans polluer les statistiques.

Mode Vidéo — GameManager

Mode passif : aucun clic requis pendant le jeu. Questions projetées au tableau, réponses révélées automatiquement après un délai.

Pipeline

  1. Start : même initialisation que le mode Interactif.
  2. Boucle : pour chaque question, le QuestionDisplayer l’affiche avec isInteractable = false (boutons non cliquables). Le jeu attend tmpsDeReponse secondes (WaitForSeconds), puis révèle la bonne réponse.
// Révélation automatique selon le nombre de propositions visibles
yield return new WaitForSeconds(tmpsDeReponse);

if (nbrReponsesVisibles == 0) {
    questionDisplayer.DisplayCorrectAnswer(true); // mode Dictée
} else {
    questionDisplayer.RevealCorrectAnswer(true);  // QCM classique
}
  1. Fin : pas de statistiques Google Sheets (le système ne sait pas si l’élève a répondu juste à l’oral).

Champs sérialisés

CatégorieChampDescription
UI starttitreText, sousTitreText, consigneText, commencerButtonÉcran d’accueil
UI jeunomEleve, aideMemoireText, questionText, segmentedProgressBarInterface en cours de jeu
Mode vidéonbrQuestions, nbrReponsesVisibles, tmpsDeReponseRythme de la “vidéo”

Synchronisation barre de progression

public void ChatWithProgressBar(int indexSegment) {
    segmentedProgressBar.StopProgressBar();
}

La barre (conçue pour l’AP, elle avance avec le temps) s’arrête dès qu’un segment se remplit, puis repart au début du prochain tour de coroutine via ResumeProgressBar(). Cela garantit une synchronisation parfaite avec l’apparition des questions même si des décalages de calcul surviennent.