Décrire les créatures du monde comme entités structurées dans ZoneData (#2) #18

Merged
Reliodas merged 1 commit from feature/2-entites-monde-zonedata into develop 2026-06-19 20:51:46 +00:00
Owner

Closes #2.

Sort les entités de la zone du simple mapping caractère→monster_id vers des données structurées, avec une identité stable indépendante de la position — fondation de #16 (correctif fuite/rechargement), #4 (perception) et #7 (participants).

Changements

  • WorldEntityData (Resource) : monster_id, faction/hostilité, portée de vue (paramètre de perception, consommé au #4).
  • ZoneData.entities (caractère → WorldEntityData) remplace encounter_monsters ; beaulieu_proto.tres migré (sous-ressource gobelin hostile).
  • WorldEntity (runtime) : identité stable dérivée de la case d'apparition (== ancienne clé "x_y", donc défaites sauvegardées compatibles, aucune migration), position courante, données partagées.
  • World instancie depuis ces données, tient un registre d'entités, et n'engage le combat qu'avec une entité hostile (gating de faction).
  • Enemy porte son entity_id.

Critères d'acceptation

  • World instancie les ennemis depuis des données structurées ;
  • deux entités du même type coexistent avec des ids distincts ;
  • les anciennes rencontres vaincues restent compatibles (id stable = clé "x_y" historique, migration nulle) ;
  • chargement et repli de ZoneData testés.

Tests

Suite complète 111/111 (+5). La persistance complète de la Creature et le re-keying de la défaite par entity_id sont le #16 (prochain ticket).

Closes #2. Sort les entités de la zone du simple mapping caractère→monster_id vers des **données structurées**, avec une **identité stable indépendante de la position** — fondation de #16 (correctif fuite/rechargement), #4 (perception) et #7 (participants). ## Changements - **`WorldEntityData`** (Resource) : `monster_id`, `faction`/hostilité, portée de vue (paramètre de perception, consommé au #4). - **`ZoneData.entities`** (caractère → `WorldEntityData`) remplace `encounter_monsters` ; `beaulieu_proto.tres` migré (sous-ressource gobelin hostile). - **`WorldEntity`** (runtime) : identité **stable** dérivée de la case d'apparition (== ancienne clé `"x_y"`, donc défaites sauvegardées **compatibles**, aucune migration), position courante, données partagées. - **`World`** instancie depuis ces données, tient un registre d'entités, et n'engage le combat qu'avec une entité **hostile** (gating de faction). - **`Enemy`** porte son `entity_id`. ## Critères d'acceptation - [x] World instancie les ennemis depuis des données structurées ; - [x] deux entités du même type coexistent avec des ids distincts ; - [x] les anciennes rencontres vaincues restent compatibles (id stable = clé `"x_y"` historique, migration nulle) ; - [x] chargement et repli de ZoneData testés. ## Tests Suite complète **111/111** (+5). La persistance complète de la Creature et le re-keying de la défaite par `entity_id` sont le **#16** (prochain ticket).
Reliodas added this to the 0.15.0 milestone 2026-06-19 20:49:49 +00:00
feat: décrit les créatures du monde comme entités structurées dans ZoneData (#2)
All checks were successful
ci/woodpecker/pr/woodpecker Pipeline was successful
ci/woodpecker/push/woodpecker Pipeline was successful
ci/woodpecker/pull_request_metadata/woodpecker Pipeline was successful
ci/woodpecker/pull_request_closed/woodpecker Pipeline was successful
135cce5ccb
Sort les entités de la zone du simple mapping caractère→monster_id vers des
données structurées, avec une identité stable indépendante de la position.

- WorldEntityData (Resource) : monster_id, faction/hostilité, portée de vue
  (paramètre de perception consommé au #4).
- ZoneData.entities (caractère → WorldEntityData) remplace encounter_monsters ;
  beaulieu_proto.tres migré (sous-ressource gobelin hostile).
- WorldEntity (runtime) : identité STABLE dérivée de la case d'apparition
  (== ancienne clé "x_y", donc défaites sauvegardées compatibles, aucune
  migration), position courante, données partagées.
- World instancie depuis ces données, tient un registre d'entités et n'engage
  le combat qu'avec une entité hostile (gating de faction ; détection fine #4).
- Enemy porte son entity_id.

La persistance complète de la Creature et le re-keying de la défaite par
entity_id (correctif du bug de fuite/rechargement) sont le #16.

Tests : suite complète 111/111 — modèle de données, identité stable et distincte,
instanciation depuis la zone, gating d'une entité neutre, assertion de zone mise
à jour.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Reliodas merged commit 1fdb2ae33e into develop 2026-06-19 20:51:46 +00:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: jeux/beaulieu-sur-brume#18
No description provided.