# Spécifications : Case de Zoo (Générique)

## Définition
Case spécifique à la grille du zoo, pouvant accueillir les éléments de gestion.

## Types de Contenu Possibles
- **Bâtiments** : Billeterie, Nurserie, Boutique, Centre de Recherche, École, Accueil Animaux.
- **Animaux** : Bébés matures, Animaux adultes.
- **Éléments Mobiles** : Visiteurs, Camion (sur sa zone dédiée).
- **Vide** : Terrain libre pour construction ou placement.

## Propriétés Spécifiques
- **Occupation** : Une case ne peut contenir qu'un seul élément principal (bâtiment/animal) à la fois.
- **Visite** : Enregistre la date de dernier passage d'un visiteur (pour la règle de disparition).
- **Qualité** : Indicateur visuel d'adéquation avec l'animal posé dessus (Jaunissement, Givre).

## Liste des Cases Spéciales (cf. Carte Zoo)
- Agrandissement
- Recherche
- Billeterie
- Nurserie
- Accueil
- Nourriture
- Camion

# Annexes Techniques

## 1. Données et États
### Modèle de Données (JSON)
Hérite de `Case (Générique)`.
```json
{
  "last_visit_time": "timestamp | null",
  "visit_count_total": "integer",
  "visit_count_day": "integer",
  "heatmap_score": "float (0-100)",
  "quality_score": "float (0-100)",
  "pathing": {
    "walkable": "boolean",
    "movement_cost": "float (>= 1.0)",
    "preferred": "boolean (true for path tiles)"
  },
  "zoo_specific_flags": [
    "enum('premium_spot','near_entry','near_shop','near_enclosure','staff_only')"
  ]
}
```

### Contraintes (Invariants)
*   **Walkable** : une case avec `content_type` bâtiment/animal est généralement `walkable=false` pour les visiteurs (sauf exceptions design).
*   **last_visit_time** : mis à jour uniquement quand un visiteur “observe” réellement (pas juste traverse) si la mécanique de “visite” est distincte.
*   **movement_cost** : > 1.0 sur herbe/boue, = 1.0 sur chemins, < 1.0 interdit (évite vitesse infinie).

### Caractéristiques Initiales
| Caractéristique | Valeur Initiale |
| :--- | :--- |
| Dernière Visite | Création du zoo |
| Qualité | 100 |

### Scores Initiaux
**Passages** : 0 (Heatmap de fréquentation).
**Propreté** : 100 (aucun déchet).
**Coût de marche** : 1.2 (herbe) par défaut, 1.0 (chemin) si la case est convertie.

## 2. Cycles de Vie et Apparition
### Conditions d'Apparition
Génération zoo.

### Conditions de Disparition
**Jamais** : Une case ne disparaît pas, elle change juste de contenu.

### Hérédité
**Qualité du Sol** : Un sol bien entretenu (fertilisé) garde ses bonus après un reset partiel.

## 3. Impacts Environnementaux
### Impact Température
Voir `case_generique.md`.

### Impact Milieu (Biome)
Voir `case_generique.md`.

### Impact Saisons
**Neige** : La case devient blanche en hiver (si T° < 0).

### Impact Heure / Jour-Nuit
**Ombres** : Les ombres des objets sur la case tournent avec le soleil.

## 4. Impacts Biologiques et Sociaux
### Impact Reproduction
**Lieu de rencontre** : Les cases "Buissons" favorisent les rencontres.

### Impact Mort
**Lieu de décès** : Une case où un animal est mort garde une "odeur" (malus stress) pendant 24h.

### Impact Nourriture
**Pâturage** : Une case herbeuse peut être broutée (devient terreuse).

### Impact Attractivité (Visiteurs/Animaux)
**Vue** : Une case "Point de Vue" (hauteur) augmente l'attractivité des animaux alentour.

### Impact Valeur
**Emplacement** : Une case proche de l'entrée vaut plus cher (emplacement premium pour boutiques).

## 5. Impacts Logistiques et Économiques
### Vitesse (Camion/Nurserie/Accueil/Recherche/Labo/Visite)
**Revêtement** : Herbe (Lent), Terre (Moyen), Pavés (Rapide).

### Dépenses (Boutiques/Visiteurs)
**Nettoyage** : Coût si la case est sale (déchets visiteurs).

### Trajet Visiteurs
**Obstacle** : Une case occupée par un bâtiment ou de l'eau est infranchissable (sauf pont).

## 6. Événements
### Événements du Jeu / Carte / Zoo / Ville / Visiteur
*   **Passage Visiteur** : Met à jour `last_visit_time`.
*   **Salissure** : Apparition d'un déchet.

## 7. Progression
### Tableau des Upgrades
Voir `achat_upgrade_case.md`.

## 8. Logique et Interfaces
### Pseudo-code Impacts
```
function checkAnimalDisappearance(case):
  if currentTime - case.last_visit_time > MAX_TIME_WITHOUT_VISIT:
    removeAnimal(case.content)
```

### Messages d'Infos / Alerte
| ID | Niveau | Message |
| :--- | :--- | :--- |
| `CASE_DIRTY` | Info | "Une case est sale." |
| `PATH_BLOCKED` | Warning | "Chemin bloqué : les visiteurs recalculent leur trajet." |
| `ANIMAL_NOT_VISITED` | Warning | "Un animal n'a pas été observé depuis longtemps." |

# 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.


## 1. Expérience Utilisateur (UX)
### Sélection (Action)
**Description UX** : Clic sur une case zoo.
**Description UI** : Highlight + Menu contextuel adapté au contenu (Animal -> Stats, Bâtiment -> Upgrade, Vide -> Construire).
**Emplacement** : Grille.
**Intégration** : Standard.
**Navigation** : Clic.
**Événements** : `SELECT_ZOO_CASE`.

#### Assets
- **Musiques** : Son "Click".
- **Sons** : `select_soft.mp3`.
- **Graphiques** : Cadre sélection.
- **Images** : Icône Menu Contextuel.
- **Vidéos** : Effet de sélection (contour brillant).
- **Animations** : Rebondissement léger du contenu.
- **Couleurs** : Blanc.
- **Textes** : "Case [X,Y]".
- **Formes** : Carré.

## Définition

| Champ | Valeur |
|---|---|
| Concept | Case “zoo” : spécialisation de `case_generique` avec contraintes d’occupation, métriques de visite, et signaux qualité/propreté. |
| Rôle | Supporter le gameplay de placement (animal/bâtiment), le pathfinding (walkable/cost), et la logique “animal observé” (last_visit_time). |
| Portée | Une tuile de la carte du zoo, identifiée par coordonnées, rendue en isométrie. |
| Contrainte | Mesures dérivées (heatmap, quality_score) calculées à la volée ; pas de fallback : si `content_type` incohérent => log + erreur. |

## Fonctions (tableau détaillé)

| Fonction | Déclencheur | Entrées | Sorties | Règles | Observabilité |
|---|---|---|---|---|---|
| Sélectionner case | clic | x,y | menu contexte | actions selon contenu | Event `SELECT_ZOO_CASE` |
| Résoudre walkable | update terrain | content_type | `pathing.walkable` | bâtiment/animal => false (sauf exceptions) | Event `PATHING_UPDATED` |
| Mettre à jour last_visit_time | visiteur observe | visitor_id | timestamp | observe != traverse | Event `CASE_VISITED` |
| Accumuler heatmap | passage | dt | heatmap_score | 0..100 | Event `HEATMAP_UPDATED` |
| Dégrader propreté | déchets | visitor behavior | cleanliness ↓ | clamp 0..100 | Event `CASE_DIRTY` |
| Mettre à jour qualité | compat animal/terrain | biome/temp | quality_score | signaux visuels | Event `CASE_QUALITY_UPDATED` |

## Icone de base

| Élément | Spécification |
|---|---|
| Représentation | Tuile losange + marqueur |
| Couleur dominante | dépend biome/terrain |
| Variantes | `icon_tile.png`, `icon_tile_dirty.png` |
| États | `dirty`, `fertilized`, `frozen`, `muddy` |

## Interactions (tableau détaillé)

| Interaction | Type | Préconditions | Étapes UI | Résultat | Erreurs / Messages |
|---|---|---|---|---|---|
| Construire ici | Action | case vide | menu → item → place | occupancy building | `CELL_OCCUPIED` |
| Placer animal | Action | enclos compatible | drag/drop | occupancy animal | `BIOME_INCOMPATIBLE` |
| Nettoyer | Action | sale | outil nettoyage | cleanliness ↑ | `NO_STAFF` |

## Personnage contextuel (événements & interaction)
La case est actionnée via la sélection sur la carte du zoo. Le personnage contextuel attendu est le **joueur actif** (avatar) : voir `avatar_joueur.md`.

### Déclencheurs (exemples)
| Event / Message | Condition | Effet UI personnage |
|---|---|---|
| `SELECT_ZOO_CASE` | clic case | avatar présent dans le panneau contexte |
| `CELL_OCCUPIED` / `BIOME_INCOMPATIBLE` | action refusée | avatar affiche la cause et l’action suivante possible |
| `CASE_DIRTY` | case sale | avatar propose CTA “Nettoyer” (si action permise) |

### Skins & thèmes
Le rendu du portrait/overlay suit `theme.md` et `inventaire_skins.md`.

## Annexes Techniques

### 1. Données et États (tableau détaillé)

| Donnée / État | Type | Exemple | Source | Contraintes |
|---|---|---|---|---|
| `last_visit_time` | timestamp \| null | - | DB | UTC |
| `visit_count_total` | int | 120 | DB | cumul |
| `visit_count_day` | int | 12 | DB | reset day |
| `heatmap_score` | float | 35.5 | calcul | 0..100 |
| `quality_score` | float | 92.0 | calcul | 0..100 |
| `pathing.walkable` | boolean | true | calcul | dépend contenu |
| `pathing.movement_cost` | float | 1.2 | config | >=1.0 |
| `zoo_specific_flags[]` | enum[] | `near_entry` | DB | - |

#### Caractéristiques Initiales (tableau détaillé)

| Caractéristique | Valeur initiale | Unité | Notes |
|---|---:|---|---|
| Propreté | 100 | pts | init |
| Fertilité | 0 | pts | init |
| Coût marche herbe | 1.2 | coef | default |

#### Scores Initiaux (tableau détaillé)

| Score | Valeur initiale | Plage | Impact |
|---|---:|---|---|
| Passages | 0 | 0..∞ | heatmap |
| Qualité | 100 | 0..100 | rendu |

### 2. Cycles de Vie et Apparition (tableau détaillé)

| Phase | Déclencheur | Entrées | Sorties | Invariants |
|---|---|---|---|---|
| Création | génération map | biome | case | existe toujours |
| Occupation | placement | entity | occupancy | un principal |
| Nettoyage | action | outil | propreté ↑ | clamp |

#### Conditions d'Apparition (tableau détaillé)

| Condition | Seuil | Opérateur | Résultat |
|---|---:|---|---|
| Génération zoo | true | est | case créée |

#### Conditions de Disparition (tableau détaillé)

| Condition | Seuil | Opérateur | Résultat |
|---|---:|---|---|
| - | - | - | case persiste |

#### Hérédité (tableau détaillé)

| Élément | Hérité | Règle |
|---|---|---|
| Sol fertilisé | Oui | garde bonus soft reset |
| Heatmap | Non | recalcul |

### 3. Impacts Environnementaux

#### Impact Température (tableau détaillé)

| Condition | Effet case | Notes |
|---|---|---|
| < 0°C | flag `frozen` | givre |

#### Impact Milieu (Biome) (tableau détaillé)

| Biome | Effet | Notes |
|---|---|---|
| prairie | herbe repousse | nourriture |

#### Impact Saisons (tableau détaillé)

| Saison | Effet | Notes |
|---|---|---|
| hiver | `snowy` | visuel |

#### Impact Heure / Jour-Nuit (tableau détaillé)

| Période | Effet | Notes |
|---|---|---|
| nuit | ombres tournent | rendu |

### 4. Impacts Biologiques et Sociaux

#### Impact Reproduction (tableau détaillé)

| Facteur | Effet sur taux | Condition |
|---|---|---|
| buissons | +5% | proximité enclos |

#### Impact Mort (tableau détaillé)

| Cas | Effet | Condition |
|---|---|---|
| odeur | stress + | 24h in-game |

#### Impact Nourriture (tableau détaillé)

| Ressource | Effet | Condition |
|---|---|---|
| pâturage | herbe→terre | animal broute |

#### Impact Attractivité(Visiteurs (tableau détaillé)

| Action/État | Gain | Rayon | Notes |
|---|---:|---:|---|
| point de vue | + | 4 cases | hauteur |

#### Impact Attractivité Animaux) (tableau détaillé)

| Action/État | Effet animaux | Condition |
|---|---|---|
| foule | stress + | densité |

#### Impact Valeur (tableau détaillé)

| Facteur | Variation | Condition |
|---|---:|---|
| near_entry | + | premium spot |

### 5. Impacts Logistiques et Économiques

#### Vitesse (Camion) (tableau détaillé)

| Paramètre | Effet | Condition |
|---|---|---|
| revêtement | vitesse ± | chemin/pavés |

#### Vitesse (Nurserie) (tableau détaillé)

| Paramètre | Effet | Condition |
|---|---|---|
| placement mode | overlay | sortie bébé |

#### Vitesse (Accueil) (tableau détaillé)

| Paramètre | Effet | Condition |
|---|---|---|
| placement mode | overlay | sortie animal |

#### Vitesse (Recherche) (tableau détaillé)

| Paramètre | Effet | Condition |
|---|---|---|
| - | neutre | - |

#### Vitesse (Labo) (tableau détaillé)

| Paramètre | Effet | Condition |
|---|---|---|
| - | neutre | - |

#### Vitesse (Visite) (tableau détaillé)

| Paramètre | Effet | Condition |
|---|---|---|
| cost | route | A* |

#### Dépenses (Billeterie) (tableau détaillé)

| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| nettoyage | 5 | coins | si sale |

#### Dépenses (Boutiques) (tableau détaillé)

| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| maintenance sol | 1 | coin/case | option |

#### Dépenses (Visiteurs) (tableau détaillé)

| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| déchets | temps | min | propreté |

#### Dépenses (Employés) (tableau détaillé)

| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| passage staff | temps | min | path |

#### Dépenses (Boutiques) (tableau détaillé)

| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| section dupliquée | 1 | coin | conservée |

#### Dépenses (Nurseries) (tableau détaillé)

| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| hygiène | 1 | coin | lore |

#### Dépenses (Nourriture) (tableau détaillé)

| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| pâturage | 0 | - | herbe |

#### Dépenses (Acceuil des animaux) (tableau détaillé)

| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| quarantaine | 1 | coin | lore |

#### Dépenses (Camion) (tableau détaillé)

| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| usure | 1 | coin | lore |

#### Trajet Visiteurs

##### Trajet Visiteurs vers/depuis la ville (tableau détaillé)

| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| entrée | allées | ticket | spawn |

##### Trajet Visiteurs vers/depuis les animaux (tableau détaillé)

| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| allée | enclos | curiosité | observe |

##### Trajet Visiteurs vers/depuis les boutiques (tableau détaillé)

| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| enclos | boutique | faim | achat |

##### Trajet Visiteurs vers/depuis la billeterie (entrées/sorties du zoo) (tableau détaillé)

| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| allées | sortie | budget 0 | despawn |

### 6. Événements

#### Événements du Jeu  (tableau détaillé)

| Event | Déclencheur | Payload | Effet |
|---|---|---|---|
| `CASE_DIRTY` | déchet | coord | flag |
| `PATH_BLOCKED` | obstacle | coord | reroute |

#### Événements du Carte (tableau détaillé)

| Event | Déclencheur | Effet |
|---|---|---|
| `PATHING_UPDATED` | terrain | coûts |

#### Événements du Zoo (tableau détaillé)

| Event | Déclencheur | Effet |
|---|---|---|
| `CASE_QUALITY_UPDATED` | compat | rendu |

#### Événements du Ville / Visiteur (tableau détaillé)

| Event | Déclencheur | Effet |
|---|---|---|
| `CASE_VISITED` | observe | last_visit_time |

#### Événements du Visiteur (tableau détaillé)

| Event | Déclencheur | Effet |
|---|---|---|
| `VISITOR_REROUTE` | blocage | route |

#### Événements du Joueur (tableau détaillé)

| Event | Déclencheur | Effet |
|---|---|---|
| `PLAYER_CLEANS_TILE` | outil | propreté + |

### 7. Progression

#### Tableau des Upgrades (tableau détaillé)

| Niveau | Coût | Effet | Débloque |
|---|---:|---|---|
| Pavés | 250 | cost marche 1.0 | route |

### 8. Logique et Interfaces 

#### Pseudo-code Impacts (tableau détaillé)

| Fonction | Entrées | Sorties | Notes |
|---|---|---|---|
| `checkAnimalDisappearance` | case, now | bool | visite |
| `computeMovementCost` | terrain | float | >=1.0 |

#### Messages d'Infos / Alerte (tableau détaillé)

| ID | Niveau | Message | Condition |
|---|---|---|---|
| `CASE_DIRTY` | Info | "Une case est sale." | déchet |
| `PATH_BLOCKED` | Warning | "Chemin bloqué." | reroute |
| `ANIMAL_NOT_VISITED` | Warning | "Animal non observé." | timeout |

## Annexes UX/UI 

### 1. Expérience Utilisateur (UX)

#### Description UX (tableau détaillé)

| Parcours | But | Friction | Réduction clics |
|---|---|---|---|
| Ouvrir menu case | agir vite | contexte | menu auto-adapté |
| Nettoyer | propreté | outil | raccourci dans menu |

#### Description UI (tableau détaillé)

| Composant | Contenu | États |
|---|---|---|
| Menu contextuel | actions | selon contenu |
| Highlight | outline | hover/selected |

#### Emplacement (tableau détaillé)

| Zone UI | Position | Notes |
|---|---|---|
| Tuile | monde | iso |

#### Intégration (tableau détaillé)

| Intégration | Contrat | Notes |
|---|---|---|
| `carte_zoo.md` | sélection | panneau |

#### Navigation (tableau détaillé)

| Action | Chemin | Résultat |
|---|---|---|
| Sélection | clic | menu |

#### Événements (tableau détaillé)

| Event UI | Déclencheur | Effet |
|---|---|---|
| `SELECT_ZOO_CASE` | clic | open |

#### Assets Skinables

##### Musiques (tableau détaillé)

| Asset | Usage | Durée | Notes |
|---|---|---:|---|
| `select_tile_click.mp3` | sélection | 0.2s | discret |

##### Sons (tableau détaillé)

| Asset | Usage | Volume |
|---|---|---|
| `select_soft.mp3` | clic | bas |

##### Graphiques (tableau détaillé)

| Asset | Usage | Contraintes |
|---|---|---|
| `tile_outline.png` | highlight | overlay |

##### Images (tableau détaillé)

| Asset | Usage |
|---|---|
| `context_menu_icon.png` | menu |

##### Vidéos (tableau détaillé)

| Asset | Usage | Durée |
|---|---|---:|
| `tile_select.webm` | feedback | 0.5s |

##### Animations (tableau détaillé)

| Animation | Déclencheur | Notes |
|---|---|---|
| bounce contenu | sélection | léger |

##### Couleurs (tableau détaillé)

| Token | Valeur | Usage |
|---|---|---|
| `tile_white` | #FFFFFF | outline |

##### Textes (tableau détaillé)

| Clé | FR | EN |
|---|---|---|
| `tile.coords` | Case {x},{y} | Tile {x},{y} |

##### Formes (tableau détaillé)

| Élément | Forme | Notes |
|---|---|---|
| Tuile | losange | iso |
