Accueil Github ↗
Itération 3

APA — Mode QCM

Activité Physiquement Actif : trois sous-modes (Architecte, Interactif, Vidéo) dans une seule scène, système de questions QCM partagé.

Le mode QCM est le mode principal de l’APA. Trois sous-modes partagent la même scène Unity — SelectMode.cs active le bon GameManager au chargement selon ActivityDataManager.Mode.

Sous-modes

ModeDescription
ArchitecteUn élève est désigné “architecte” : il choisit 4 mouvements, la classe les exécute, puis il répond aux questions QCM.
Interactif (Professeur)L’enseignant note les réponses orales des élèves tirés au sort pendant les cycles physiques.
Interactif (Élève)Version adaptée pour jouer seul à la maison : 30 s d’effort (2 × APMV de 15 s), puis 30 s de questions sans phase APL.
VidéoMode passif, aucun clic pendant le jeu — voir APA — Mode Vidéo.

SelectMode.cs — routeur de scène

Lit ActivityDataManager.Mode au chargement et active uniquement le GameObject du mode correspondant, en laissant les autres désactivés.

ChampTypeDescription
modeVideoGoGameObjectConteneur du mode Vidéo
modeInteractifGoGameObjectMode Interactif Professeur
modeInteractifEleveGoGameObjectMode Interactif Élève
modeArchitecteGoGameObjectMode Architecte

Mode Architecte — GameManager

Boucle de jeu : un élève est tiré au sort (l’architecte), il choisit 4 mouvements via DialogVO2Panel, la classe exécute la routine (AP comptabilisée), puis l’architecte répond aux questions QCM. Le cycle se répète pour le nombre d’architectes configuré.

VariableDescription
currentEleveL’élève sélectionné — utilisé pour ses cosmétiques et son nom
_animationsEleveListLes 4 mouvements choisis par l’architecte
vo2PanelPanneau de dialogue interactif
isAPMVPhase / isQuestionPhaseIndiquent l’étape courante
MéthodeDescription
EleveIsSelected(Student student)Active l’avatar avec les bons cosmétiques et lance le dialogue
StartModeArchitecte_Coroutine()Boucle principale : 4 mouvements (20 s effort / 10 s repos), envoi AP, boucle QCM
GetMouvement(...)Pioche des animations aléatoires pour les proposer sur le panneau
EndActivityBeforeTheEnd()Calcule le temps écoulé (Time.time - _startTime) pour sauvegarder les secondes d’AP déjà effectuées si on quitte en cours de route

DialogVO2Panel.cs

Panneau interactif guidant l’architecte : d’abord pour choisir ses 4 mouvements, puis pour répondre aux questions.

MéthodeDescription
PrintDialog01() à PrintDialog08()Machine à états : chaque méthode correspond à une étape du dialogue (choix APMV 1, choix APL 1, etc.)
OnButtonAnimationClick(int index)Envoie le mouvement cliqué au GameManager
SendQuestionsToVo2Panel(...)Recycle l’interface pour afficher les choix de réponses QCM au lieu des mouvements

Mode Interactif — GameManager

Boucle : chrono de 30 s, appel d’un mouvement, affichage du nom de l’élève tiré au sort (si présence activée), puis attente des réponses.

MéthodeDescription
StartModeInteractif_Coroutine()Boucle principale : chrono, mouvement, tirage au sort, QCM
SetMouvement(...)Pioche le prochain mouvement, l’envoie aux personnages, met à jour l’UI et l’audio
ChatWithProgressBar(int indexSegment)Met la barre en pause quand un segment physique se termine, le temps que la classe réponde
EndActivityBeforeTheEnd()Calcule le temps écoulé pour sauvegarder les secondes d’AP avant de quitter

Système QCM — QuestionManager et QuestionDisplayer

Ces deux scripts fonctionnent en tandem : le Manager gère les données, le Displayer gère l’affichage.

QuestionManager.cs

Gère la base de données du QCM. Charge les JSON, les convertit en listes, distribue les questions dans un ordre aléatoire sans répétition.

Structure JSON attendue :

  • Question : question (string), solution (string), reponsesFausses (List)
  • QuestionList : Items (List de Question)
MéthodeDescription
SetJsonAndLoadQuestions(params TextAsset[] jsonFiles)Charge un ou plusieurs JSON, combine toutes les questions et mélange la liste
GetNextQuestion()Retourne la prochaine question (avec fausses réponses mélangées). Remélange tout si la liste est épuisée.

QuestionDisplayer.cs

Gère tout ce que le joueur voit et entend pour le QCM : textes, boutons, coloration et réactions du robot.

ÉvénementDescription
OnAnswerRevealedDéclenché quand une réponse est validée. Renvoie true si correcte, false sinon.
MéthodeDescription
DisplayQuestion(Question, int numberOfAnswers, bool isInteractable)Affiche la question, mélange et assigne les réponses aux boutons, masque les boutons inutilisés
OnAnswerSelected(string selectedAnswer, Button selectedButton)Vérifie la réponse : vert + son victoire + robot content si juste ; rouge + son erreur + robot surpris si faux
RevealCorrectAnswer(bool shouldPlaySound)Colore en vert le bouton contenant la bonne réponse. Utilisé après une erreur ou en mode Vidéo.
ResetButtons(bool isInteractable)Remet les boutons en bleu, gère leur interactivité pour la prochaine question
SetBoutonManagerActive(bool isActive)Active/désactive la saisie clavier physique (touches 1, 2, 3)