Skip to main content

HR1 — architecture et logique game-specific

Positionnement

HR1 est le jeu By Year orienté gestion des ressources humaines : staffing, rémunération, avantages, postings, contrats, CEO et segments d'employés.

Static data

Les datasets importés incluent ceo, employees, strategies, advantages, events, scenario, segments, contracts et act_perf_pond, plus constants.

Modèles Unity

  • CeoData;
  • EmployeeData / EmployeesAdvantage / AdvantageData;
  • PostingData, LaunchedPosting, PostingResult;
  • ContractData, ContractResult;
  • Segment, SegmentResult, SegmentScores;
  • TeamDecisionsHr1, TeamHr1, YearData.

Hooks serveur

GameSpecificUtilsHr1 gère entre autres le démarrage d'année, génération de contrats, reset des avantages, events, CEOs, coûts d'avantages, coûts de postings/licenciements, coûts employés et rankings.

Génération

flowchart LR
DEC[Staffing + rémunération + avantages + postings] --> HIRE[Hiring]
DEC --> RET[Retention / belonging]
DEC --> COST[Employee costs]
DEC --> CEO[CEO]
HIRE --> RES[Segment Results]
RET --> RES
COST --> RES
CEO --> RES
RES --> SCORE[Scores / ActPerf]

GenerateResultsHr1 finalise contrats et CEOs, calcule hiring, averages, retention/belonging, scores de postings et segments, puis sauvegarde les résultats.

Évaluation

EvalHr1 fournit scenario score, segment score et performance annuelle. Les résultats HR alimentent ensuite le cadre commun d'évaluation By Year.

UI

Les vues spécifiques comprennent CEO, staffing, employés, avantages, stratégies, postings, contrats, rémunération et rapports. Les classes sont sous Assets/GameSpecific/hr1/Src/UI.

Debug

Pour un problème RH, isoler d'abord la décision (employee/segment/posting/advantage), puis le coût calculé dans hr1_utils.js, puis la phase correspondante de GenerateResultsHr1.

Ajouter une feature HR1 de A à Z

Custom commands réelles

hr1_custom_command.js route actuellement :

    posting / delete_posting; dismiss / delete_dismiss; advantage / delete_advantage; salary; ceo_bid / delete_ceo_bid; change_wanted_contracts; puis les commandes By Year communes en fallback.

    Ces commandes ne font pas que sauvegarder une valeur : elles recalculent souvent un coût, modifient cash, sauvegardent teams, parfois actDataGameSpec, puis envoient des RTT comme posting_changed, salary_changed, team_new_bid.

    Carte résultats

      finalizeContracts() — contrats; solveCeos() — résolution des CEO bids; computeAverages() — références du marché RH; computeHiring() — embauche; computeRetentionAndBelonging() — rétention/appartenance; computeScores() — scores; gatherSegments() — collecte des décisions par segment; generateCurrentYearResults() / saveResults().

      Ajouter une nouvelle décision RH

        Définir si la décision appartient au segment, à l'employé, aux avantages, aux postings, CEO ou contrats. Ajouter la donnée au bon niveau de TeamDecisionsHr1/YearData. Ajouter l'UI sous GameSpecific/hr1/Src/UI. Ajouter la branche dans hr1_custom_command.js. Calculer le coût avec un helper utilsHr1 partagé; ne pas dupliquer le calcul UI. Appliquer/refund le delta de cash correctement lors d'une édition/suppression. Envoyer le RTT approprié. Consommer la décision dans GenerateResultsHr1. Adapter EvalHr1.computeActPerfScore() si le score change. Vérifier reopen/delete results.

        CEO bids : exemple d'opération multi-document

        Un bid CEO modifie à la fois teams et un compteur dans actDataGameSpec.ceos via saveDocumentIncrementData(). Une nouvelle feature concurrentielle partagée entre équipes peut nécessiter le même pattern; il faut alors tester la concurrence entre plusieurs teams.

        Debug HR1

        Quand un coût est faux : comparer static data → helper de coût → delta ancien/nouveau → cash sauvegardé. Quand le résultat annuel est faux : comparer segment decisions → averages → hiring/retention → result segment → ActPerf.