Files
builazoo/docs/specs/affiche_enclos.md
Nicolas Cantu 5143a79890 docs: enrich docs/specs and remove placeholders
**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
2026-03-05 03:08:15 +01:00

104 lines
4.0 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Affiche Enclos
## 1. Définition
Panneau informatif fixé sur la clôture d'un enclos, présentant l'espèce animale qui y réside. Il apparaît automatiquement lorsqu'un enclos est créé et se positionne sur une section horizontale visible de la barrière.
## 2. Fonctions
* **Information :** Indique aux visiteurs (et au joueur) quel animal se trouve ici.
* **Éducation :** Augmente légèrement le score d'éducation du zoo (les visiteurs s'arrêtent pour lire).
* **Esthétique :** Habille les clôtures et rend le zoo plus réaliste.
## 3. Icone
* **Représentation :** Panneau rectangulaire avec une photo d'animal.
* **Couleur dominante :** Bois et Blanc.
## 4. Interactions
* **Clic :** Ouvre la fiche encyclopédique de l'animal ("Zoopédia").
* **Personnalisation :** (Optionnel) Changer le style du cadre ou l'image.
* **Maintenance :** Peut être vandalisé (tagué) ou cassé, nécessitant une réparation par un agent d'entretien.
## 5. Annexes Techniques
### Données (JSON)
```json
{
"sign_id": "sign_lion_01",
"parent_enclosure_id": "enclosure_lions_01",
"created_at": "timestamp",
"updated_at": "timestamp",
"position": {
"x": 10,
"y": 11,
"face": "enum (NORTH, SOUTH, EAST, WEST)"
},
"style_id": "wood_basic",
"status": "enum (OK, BROKEN, TAGGED)",
"status_since": "timestamp",
"repair_cost": "integer",
"clean_cost": "integer",
"cooldowns": {
"next_interaction_at": "timestamp"
},
"animal_info": {
"name": "Lion d'Afrique",
"scientific_name": "Panthera leo",
"conservation_status": "VU"
},
"i18n": {
"title_key": "string",
"subtitle_key": "string"
},
"iso_x": "integer",
"iso_y": "integer",
"z_index": "integer"
}
```
### Règles Métier
* **Placement Auto :** Le jeu détermine la meilleure position (côté sud ou est généralement, face au chemin le plus proche).
* **Unicité :** Une seule affiche par enclos fusionné (ou une tous les X cases de périmètre).
* **Mise à jour :** Si l'animal change (enclos vidé puis rempli avec autre chose), l'affiche se met à jour automatiquement.
* **Dégradation** :
* `TAGGED` : naffecte pas la lisibilité mais réduit lattractivité (ex. -5 rayon 6 cases) jusquau nettoyage.
* `BROKEN` : la Zoopédia est inaccessible au clic, et malus attractivité plus fort (ex. -15 rayon 8 cases).
* **Cooldown clic** : éviter les spams ; appliquer `next_interaction_at` (ex. 1s) sur ouverture Zoopédia.
### Algorithme de Placement
```python
def place_sign(enclosure):
# Trouver les murs adjacents à un chemin
valid_walls = []
for wall in enclosure.walls:
if is_path(wall.neighbor):
valid_walls.append(wall)
# Priorité : Sud > Est > Ouest > Nord (pour visibilité isométrique)
best_wall = select_best_wall(valid_walls)
create_sign(best_wall.position, best_wall.orientation)
```
## 6. Annexes UX/UI
* **Visuel :** Petit panneau en bois avec une image miniature de l'animal.
* **Lisibilité :** Doit être visible sans cacher les animaux derrière.
* **Zoom :** Devient plus détaillé ou affiche une bulle d'info au survol de la souris.
* **Vue Isométrique :**
* **Orientation :** Le sprite doit correspondre à l'orientation du mur (4 sprites différents).
* **Z-Index :** Doit être dessiné *après* la clôture mais *avant* les visiteurs passant devant.
### Messages i18n (exemples)
* `ENCLOSURE_SIGN_OPEN` : FR "Ouvrir la Zoopédia" / EN "Open Zoopedia"
* `ENCLOSURE_SIGN_TAGGED` : FR "Affiche taguée" / EN "Sign tagged"
* `ENCLOSURE_SIGN_BROKEN` : FR "Affiche cassée" / EN "Sign broken"
# 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.