**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
104 lines
4.0 KiB
Markdown
104 lines
4.0 KiB
Markdown
# 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` : n’affecte pas la lisibilité mais réduit l’attractivité (ex. -5 rayon 6 cases) jusqu’au 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.
|