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→ activemodeVideoGoMode.InteractifChoixReponseAS→ activemodeInteractifGo- 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
- Start : lance
asPlaylist, remplit l’interface depuisActivityDataManager, envoie les JSON auQuestionManager, enregistre “AS-Interactif” dansPlayerData. - Écran d’accueil : jeu en pause, attend le clic sur “Commencer”.
- Boucle (
StartModeVideo_Coroutine, malgré le nom) : pour chaque question, leQuestionDisplayerl’affiche, puis le code attend l’événementOnAnswerRevealedviaWaitUntil— l’élève a tout le temps qu’il lui faut pour réfléchir. - 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
- Start : même initialisation que le mode Interactif.
- Boucle : pour chaque question, le
QuestionDisplayerl’affiche avecisInteractable = false(boutons non cliquables). Le jeu attendtmpsDeReponsesecondes (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
}
- 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égorie | Champ | Description |
|---|---|---|
| UI start | titreText, sousTitreText, consigneText, commencerButton | Écran d’accueil |
| UI jeu | nomEleve, aideMemoireText, questionText, segmentedProgressBar | Interface en cours de jeu |
| Mode vidéo | nbrQuestions, nbrReponsesVisibles, tmpsDeReponse | Rythme 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.