# UI et prefabs By Year

## Socle commun

`Assets/Src/UI/SimByYear/` contient l'UI réutilisée par les jeux annuels. Le contenu métier propre à ENT1/HR1/MGT1/MK1/MK2 reste dans `Assets/GameSpecific/<gameUid>/Src/UI` et leurs prefabs Resources.

## Contrôles principaux

<table id="bkmrk-domaineclasses-simul"><thead><tr><th>Domaine</th><th>Classes</th></tr></thead><tbody><tr><td>Simulation sync/async</td><td>`SimByYearControlBase`, `SimByYearSyncControl`, `SimByYearAsyncControl`</td></tr><tr><td>Années</td><td>`ActivityYearsControl`, `YearItemControl`, `WaitSimStartPopupControl`</td></tr><tr><td>Décisions</td><td>`DecisionsByYearControl`, `DecisionsPanelByYear`</td></tr><tr><td>Évaluation</td><td>`EvaluationByYearSyncControl`, `EvaluationByYearAsyncControl`, StudentEval lines</td></tr><tr><td>Reports</td><td>`DetailedReport*`, `ActPerfEval*`</td></tr><tr><td>Logbook</td><td>`LogBookControl`, `LogbookEvalPopupControl`, `LogbookRoleControl`</td></tr><tr><td>Rankings</td><td>`RankingsPanelControl`, `HiScoresPopupControl`, `FinalSequenceRankingsControl`</td></tr><tr><td>Events</td><td>`EventHistoryPopupControl` + rows game-specific</td></tr></tbody></table>

## Final sequence

Les contrôles `FinalSequence*` gèrent la fin de simulation, les équipes, classements et trophées. Ils consomment les rankings/résultats générés côté serveur.

## Règle de maintenance

Une UI qui ne connaît ni segment MK, ni employee HR, ni factory ENT, ni feature MGT appartient ici. Dès qu'un écran manipule une structure propre à un jeu, le code et le prefab doivent rester dans `GameSpecific`.

## Ajouter un écran de décision ou un report By Year

### Écran réellement commun

Les contrôles de cycle, années, eval, rankings, logbook et final sequence peuvent vivre sous `Assets/Src/UI/SimByYear`. Une UI qui connaît un type métier game-specific doit rester sous `Assets/GameSpecific/<gameUid>/Src/UI`.

### Nouvel écran de décision game-specific

1. Créer le contrôle sous `GameSpecific/<gameUid>/Src/UI`.
2. Créer/mettre à jour le prefab dans les Resources du jeu.
3. Lire la décision depuis `TeamController<Game>`/`TeamDecisions<Game>`.
4. Envoyer les changements via la custom command game-specific, pas en modifiant seulement le modèle local.
5. Écouter le message game-specific pour les modifications d'un coéquipier.
6. Ajouter les textes.
7. Ajouter un `TutorialUIObject` si l'écran participe à un tutoriel.

### Nouveau report de résultats

1. Ajouter le champ dans le modèle `Results<Game>`.
2. Créer le contrôle/report UI.
3. Brancher le report panel/detailed report du jeu.
4. Gérer année sélectionnée, équipe sélectionnée et teacher/student permissions.
5. Tester résultat absent (année non générée), année courante et années historiques.

## Sync vs async

Les écrans communs ont souvent des variantes `SimByYearSyncControl` et `SimByYearAsyncControl`, ainsi que des contrôles d'évaluation sync/async. Avant d'ajouter un bouton “commun”, vérifier s'il est valide dans les deux modes.

## Checklist prefab/UI By Year

- student + teacher;
- sync + async si applicable;
- année 1 + historique;
- avant résultats + après résultats;
- RTT coéquipier;
- textes FR/EN;
- tutorial target si requis;
- WebGL.