Menus dynamiques
DynamicMenu : navigation pédagogique générée depuis des FolderSO dans Resources/, DynamicData comme pont vers les scènes de jeu, et LegacyMode enum.
Le dossier DynamicMenu/ génère la navigation pédagogique (matière → exercice → mode de jeu) depuis une hiérarchie de FolderSO stockés dans Assets/Resources/ContenuPedagogiqueData/. Aucune ligne de code à modifier pour ajouter une nouvelle matière ou un nouvel exercice.
[!NOTE] Un commentaire en tête de
DynamicMenuManager.csindique qu’un refactoring est prévu pour simplifier l’intégration de nouveaux éléments. Le système actuel est fonctionnel mais contient une logique de tri manuelle des chemins.
FolderSO — données d’un nœud de menu
Chaque fichier FolderSO dans Resources/ représente un nœud de la hiérarchie. Trois types de nœuds :
| Type | Champ actif | Comportement |
|---|---|---|
| Dossier | isExercice = false, isModeDeJeu = false | Navigue dans le sous-dossier |
| Exercice | isExercice = true | Écrit dans DynamicData et affiche la carte activité |
| Mode de jeu | isModeDeJeu = true | Ouvre le frame de paramètres correspondant (un prefab) |
Un nœud Exercice peut aussi être “spécial” (exerciceData.isSpecialExercice), auquel cas il instancie un menu personnalisé au lieu d’écrire dans DynamicData directement.
Les nœuds Dossier peuvent avoir des capsules de révision (hasCapsules) — des images affichées en diaporama avant de lancer l’activité.
DynamicMenuManager — orchestrateur
MonoBehaviour qui gère l’affichage. À l’activation (OnEnable), il charge le dossier racine.
Flux de navigation
OnEnable → LoadRacineFolder() → LoadSubFiles("ContenuPedagogiqueData")
│
Resources.LoadAll<FolderSO>(path)
filtre par path == assetDirectory
│
┌───────────┼────────────┐
Dossier Exercice ModeDeJeu
│ │ │
LoadSubFiles Écrit dans CreateParametersFrame
(sous-dossier) DynamicData (instancie prefab)
+ affiche carte
ButtonCommencerAction() — déclenche OnButtonCommencerClicked (pour que les ModeParameters sauvegardent leurs choix dans DynamicData) puis charge la scène selon DynamicData.mode :
LegacyMode | Scène chargée |
|---|---|
Video / Interactif | ScenesDatabase.GetRandomAPAScenePath() |
VideoAS / InteractifAS | AS_QCM |
PenduAS | AS_Pendu |
Bouton retour
À chaque navigation, UpdateBackButton(path) reconfigure le bouton. Si on est à la racine, il retourne au menu principal (mainMenuGo). Sinon, il remonte d’un niveau via GetParentPath().
DynamicData — pont vers les scènes de jeu
Classe statique qui stocke les choix de l’utilisateur. Les GameManagers la lisent au démarrage de la scène de jeu.
| Propriété | Type | Défaut | Description |
|---|---|---|---|
mode | LegacyMode | Video | Mode de jeu sélectionné |
TitreActivity | string | "DevMode" | Titre affiché dans la scène |
SousTitreActivity | string | "DevMode" | Sous-titre |
ConsigneActivity | string | "DevMode" | Instructions |
AideMemoireActivity | string | "DevMode" | Aide-mémoire |
JsonFiles | TextAsset[] | null | Fichiers JSON de questions |
IseSilent | bool | false | Mode silencieux |
UsePresence | bool | false | Utiliser la liste de présence |
TagsApmv | List<AnimationTag> | [APA, APMV] | Tags animations d’effort |
TagsApl | List<AnimationTag> | [APA, APL] | Tags animations repos |
PropositionsReponse | int | 3 | Nombre de choix QCM |
NbreQuestions | int | 6 | Nombre de questions (pair pour AS vidéo) |
DelaiReponse | int | 7 | Secondes par question (mode vidéo) |
NbrRepetitions | int | 2 | Cycles APMV+APL |
JSONsSelector | List<bool> | vide | Sélection de fichiers JSON spécifiques |
TablesSelectionnes | List<int> | vide | Tables de multiplication (jeux mélangés) |
LegacyMode enum
public enum LegacyMode {
Video, // APA vidéo
Interactif, // APA interactif
VideoAS, // AS vidéo
InteractifAS,// AS interactif
PenduAS // AS pendu
}
[!WARNING] Renommé de
ModeenLegacyModepour éviter le conflit CS0433 avecActivityDataManager.Mode(deux assemblies différentes). Le refactoring utiliseCogniActif.Contracts.IActivityContext.Mode(string).
Ajouter un nouvel exercice
- Créer un asset
FolderSOdans le bon sous-dossier deResources/ContenuPedagogiqueData/. - Remplir
displayName,folderName,path(chemin Unity relatif). - Cocher
isExercice = true. - Remplir
titreForActivity,consigneForActivity,jsonFiles. - Le bouton apparaît automatiquement dans le menu au prochain lancement.