**Motivations:** - Make docs/specs implementation-ready without empty sections or placeholders. **Root causes:** - Multiple specs still contained non-actionable placeholders (N/A, “see above”, "..."), and inconsistent “no cache” wording. **Correctifs:** - Replace placeholders with explicit tables, structures, and typed examples. - Align “no cache / no memorization” statements where relevant. **Evolutions:** - Add a features doc entry to track the documentation enrichment effort. **Pages affectées:** - docs/specs/* - docs/features/docs-specs-enrichment.md - docs/leo.md - docs/plan-enrich-docs-specs.md
102 lines
4.8 KiB
Markdown
102 lines
4.8 KiB
Markdown
# Enclos
|
||
|
||
## 1. Définition
|
||
Espace délimité destiné à accueillir une ou plusieurs espèces animales. L'enclos est constitué de cases de terrain modifiées pour répondre aux besoins des animaux (biome, végétation, eau). Une caractéristique clé est la fusion automatique des cases adjacentes contenant le même animal pour former un grand enclos unique.
|
||
|
||
## 2. Fonctions
|
||
* **Hébergement :** Lieu de vie des animaux.
|
||
* **Fusion (Merge) :** Si deux cases "Enclos [Animal X]" sont posées côte à côte, les barrières internes disparaissent pour créer un espace commun (Auto-tiling).
|
||
* **Visibilité :** Permet aux visiteurs d'observer les animaux (augmente l'attractivité).
|
||
* **Sécurité :** Empêche les animaux de s'enfuir (si entretenu).
|
||
|
||
## 5. Annexes Techniques
|
||
|
||
### Données (JSON)
|
||
```json
|
||
{
|
||
"enclosure_id": "uuid",
|
||
"owner_zoo_id": "uuid",
|
||
"created_at": "timestamp",
|
||
"updated_at": "timestamp",
|
||
"animal_type": "string (ref inventaire_animaux)",
|
||
"biome_type": "enum('prairie','ocean','montagne','savane','toundra','desert','jungle','marais')",
|
||
"cells": [
|
||
{"x": 10, "y": 10},
|
||
{"x": 10, "y": 11},
|
||
{"x": 11, "y": 10},
|
||
{"x": 11, "y": 11}
|
||
],
|
||
"area": 4,
|
||
"capacity": 6,
|
||
"current_population": 3,
|
||
"cleanliness": 85,
|
||
"fence_health": 100,
|
||
"decoration_score": 15,
|
||
"perimeter_edges": "integer",
|
||
"fence_style_id": "string (skin/theme)",
|
||
"sign": {
|
||
"enabled": "boolean",
|
||
"sign_id": "uuid | null"
|
||
},
|
||
"render": {
|
||
"auto_tile_key": "string",
|
||
"fence_segments": [
|
||
{
|
||
"edge": "enum('N','S','E','W')",
|
||
"x": "integer",
|
||
"y": "integer",
|
||
"variant": "string",
|
||
"occluder": "boolean"
|
||
}
|
||
]
|
||
},
|
||
"iso_x": "integer",
|
||
"iso_y": "integer",
|
||
"z_index": "integer"
|
||
}
|
||
```
|
||
|
||
### Règles Métier
|
||
* **Algorithme de Fusion :** À chaque placement/suppression de case enclos, recalculer les composants connectés (Connected Components) pour mettre à jour les murs.
|
||
* **Murs :** Les murs ne sont générés que sur les bords de la zone connectée qui ne touchent pas une autre case du même enclos.
|
||
* **Cohérence espèce** : un composant connecté ne peut contenir qu’un `animal_type` nominal. Si une case est convertie, elle déclenche un split/merge.
|
||
* **Capacité** : `capacity = floor(area * capacity_per_tile)` où `capacity_per_tile` dépend de l’espèce (valeur par défaut 1.5).
|
||
* **Propreté** : décroît par présence animale et par visiteurs proches ; remonte via employé (soigneur/nourisseur selon design) et/ou nettoyage.
|
||
|
||
### Cas limites (Edge cases)
|
||
* **Split** : retirer une case centrale peut séparer l’enclos en 2 composants → créer 2 enclos (nouveaux `enclosure_id`) et recalculer clôtures/affiches.
|
||
* **Pont/chemin** : une case chemin/pont adjacente ne fait pas partie de l’enclos mais influence la pose de l’affiche (priorité visibilité).
|
||
* **Occlusion** : si un segment de clôture masque l’animal (S/E), utiliser variante basse ou alpha réduit.
|
||
|
||
## 6. Annexes UX/UI
|
||
|
||
|
||
## 0. Direction Artistique & Vue
|
||
* **Vue** : Isométrique (2.5D).
|
||
* **Style** : Coloré, vivant, détails foisonnants (Réf: IMG_20260303_170253.jpg).
|
||
* **Sprites** : 4 directions.
|
||
* **Interactions** :
|
||
* **Sélection** : Cliquer sur la base de l'élément (ou son sprite principal) pour le sélectionner.
|
||
* **Feedback** : Surbrillance (outline blanc/jaune) au survol de la souris.
|
||
|
||
### 0. Direction Artistique & Vue
|
||
* **Note** : ce bloc double un autre bloc similaire ; les deux sont conservés. Celui-ci précise les règles de grille/profondeur.
|
||
* **Vue** : Isométrique (2.5D).
|
||
* **Grille** : Les déplacements se font sur une grille losange.
|
||
* **Sprites** : 4 directions (Nord-Est, Sud-Est, Sud-Ouest, Nord-Ouest).
|
||
* **Profondeur** : Gestion du Z-index (les éléments "en bas" cachent ceux "en haut").
|
||
* **Style Visuel** : Inspiré de `IMG_20260303_170253.jpg`.
|
||
* Coloré, vivant, détails foisonnants.
|
||
* Aspect "dessiné à la main" ou "cartoon soigné".
|
||
* Couleurs vives et contours nets.
|
||
|
||
### Détails Spécifiques
|
||
* **Visuel Barrières :** Génération procédurale des barrières uniquement sur le pourtour (Auto-tiling). Fusion visuelle des barrières si adjacents.
|
||
* **Isométrique :** Les barrières au Sud et à l'Est doivent être semi-transparentes ou plus basses pour ne pas cacher les animaux.
|
||
* **Signalétique :** Affiche de l'animal visible sur la clôture.
|
||
|
||
### Interactions (sélection / inspection)
|
||
* **Sélection enclos** : clic sur une clôture ou sur une case enclos ouvre un panneau “Enclos”.
|
||
* **Panneau** : espèce, population/capacité, propreté, santé clôture, bonus déco, bouton “Améliorer clôture”, bouton “Déplacer affiche” (si optionnel).
|
||
* **Erreurs** : tentative d’ajouter un animal d’une autre espèce dans un enclos fusionné → refus + message.
|