Modèle et représentation publique
Les classes et attributs existants restent inchangés :
| Classe | Attributs |
|---|---|
User | username: string, passhash: string |
Match | id: string, uid: string, players: List<Player>, teams: List<Team>, state: MatchState, roundNumber: int |
Player | user: User, match: Match, position: Vector3, rotation: Vector3, hp: float, team: Team, stats: MatchPlayerStats |
Team | teamId: int, color: string, players: List<Player>, score: int |
MatchPlayerStats | damage: float, kills: int, deaths: int, matchTime: float, aliveTime: float |
MatchState | MATCH_STARTING, ROUND_STARTING, ROUND_ONGOING, ROUND_ENDING, MATCH_ENDED |
matchUid correspond à Match.uid ; dans les chemins REST, {uid} désigne la même valeur. Match.id reste interne. username correspond à Player.user.username ; aucun identifiant distinct de joueur n’est introduit. passhash n’est jamais exposé, même dans un objet imbriqué.
Les représentations JSON évitent les références circulaires : Player.user devient username, Player.match est indiqué par le matchUid de l’enveloppe, et Player.team devient teamId. Team.players contient les usernames de ses membres. Dans le lobby, teamId: null indique une affectation encore absente. Un Vector3 contient des nombres finis x, y, z ; utiliser le repère Unity partagé de la carte et des rotations en angles d’Euler, en degrés.
token, eventId, targetUsername, attackerUsername, creatorUsername et winnerTeamId sont des données du protocole, pas de nouveaux attributs UML. Le backend peut conserver en mémoire le rôle de créateur, les connexions, les séquences et la déduplication.
Les exemples complets d’instantanés figurent dans l’API REST. L’enveloppe WebSocket transporte ces mêmes objets publics.