# MGT1 — architecture et logique game-specific (DEPRECATED)

## <s>Positionnement</s>

<s>MGT1 modélise la gestion d'une équipe de développement : employés, temps de travail, features, segments, budget et lancement d'un jeu.</s>

## <s>Static data</s>

<s>Les datasets comprennent `employees`, `events`, `features`, `scenario`, `segments` et `act_perf_pond`, plus `constants`.</s>

## <s>Modèles Unity</s>

- <s>`Employee`, `EmployeesData`;</s>
- <s>`Feature`, `FeatureResults`, `GameFeatureData`;</s>
- <s>`Segment`;</s>
- <s>`LaunchedGame`, `GameResults`;</s>
- <s>`TeamDecisionsMgt1`, `TeamMgt1`, `YearData`.</s>

## <s>Logique serveur</s>

<s>`GameSpecificUtilsMgt1` gère notamment :</s>

- <s>activation/inactivation d'employés;</s>
- <s>création et noms d'employés;</s>
- <s>coûts salaire et coûts additionnels;</s>
- <s>temps de travail;</s>
- <s>affectation d'employés aux features;</s>
- <s>travail requis et complétion de feature;</s>
- <s>events et rankings.</s>

## <s>Résultats</s>

<s>`GenerateResultsMgt1` calcule le travail requis, les bonus énergie/discipline/bonheur, les employés à inactiver, les résultats par équipe et la transition des employés vers l'année suivante.</s>

```mermaid
flowchart LR
EMP[Employés] --> WORK[Temps de travail]
FEAT[Features] --> NEED[Travail requis]
WORK --> PROG[Progression features]
NEED --> PROG
PROG --> COMPLETE[Features complétées]
COMPLETE --> GAME[Résultat du jeu]
EMP --> BONUS[Energy / discipline / happiness]
BONUS --> GAME

```

## <s>UI</s>

<s>L'UI game-specific contient employees list, team leader, producer, president, feature selectors, budgets, work allocation, lancement du jeu et rapports.</s>

## <s>Debug</s>

<s>Pour une feature qui progresse mal, vérifier `setWorkOnFeature()`, le temps/coût de l'employé, `getNeededWork()` et les bonus appliqués dans la génération annuelle.</s>

## <s>Ajouter une feature MGT1 de A à Z</s>

### <s>Custom commands réelles</s>

<s>`mgt1_custom_command.js` gère :</s>

- <s>`launch_game` / `delete_game`;</s>
- <s>`add_feature` / `delete_feature`;</s>
- <s>`hire_employees` / `dismiss_employee`;</s>
- <s>`change_work_time`;</s>
- <s>`save_social_budget` / `save_remote_budget`;</s>
- <s>`save_feature_ratios`;</s>
- <s>`change_employee_active_status`;</s>
- <s>`employee_level_up` / `employee_level_down`.</s>

### <s>Carte du moteur</s>

- <s>`getEmployeeSalaryCost()` / `getEmployeeAdditionnalCost()` — coûts;</s>
- <s>`getEmployeeWorkTimeBonus()` / `getEmployeeWorkTimeCost()` — temps;</s>
- <s>`getFeatureMinimumBudget()`;</s>
- <s>`setWorkOnFeature()`;</s>
- <s>`completeFeature()`;</s>
- <s>`getNeededWork()`;</s>
- <s>`getEnergyBonus()`, `getDisciplinaryBonus()`, `getHappinessBonus()`;</s>
- <s>`computeTeamsResults()` / `generateCurrentYearResults()`.</s>

## <s>Ajouter une nouvelle feature de jeu MGT1</s>

1. <s>Ajouter la static data sous `features` si c'est une feature configurable.</s>
2. <s>Ajouter le modèle Unity `Feature/GameFeatureData` si structure nouvelle.</s>
3. <s>Ajouter le contrôle UI et les ratios/budget si nécessaire.</s>
4. <s>Ajouter la command de création/édition.</s>
5. <s>Vérifier les employés déjà assignés lors d'une suppression : `deleteEmployeeFeature()` doit nettoyer les travaux devenus invalides.</s>
6. <s>Ajouter la contribution au `workNeeded` et à `computeTeamsResults()`.</s>
7. <s>Vérifier la complétion via `completeFeature()`.</s>
8. <s>Ajouter le résultat/report.</s>

## <s>Employés : index et noms</s>

<s>Le code associe certains employés par index dans `yearData.employees` et par nom dans `employeesNames`. Toute opération d'ajout/suppression doit préserver l'alignement attendu; une suppression mal gérée peut faire pointer un nom vers le mauvais employé.</s>

## <s>Work time : validation serveur obligatoire</s>

<s>`changeWorkTime()` valide game, feature, task level et niveau réel de l'employé. Une nouvelle allocation de travail doit conserver ce type de validation côté serveur.</s>

## <s>Debug MGT1</s>

<s>Pour une feature qui ne progresse pas : feature exists → employee works structure → level/workTime → needed work → bonuses → computeTeamsResults → final result.</s>