# Spécifications : Chemin

## Définition
Les chemins sont des cases aménagées permettant aux visiteurs et au staff de se déplacer efficacement à travers le zoo. Ils connectent les différentes infrastructures (Enclos, Boutiques, Services).

## Fonctions
*   **Circulation :** Permet le déplacement des entités (Visiteurs, Staff).
*   **Connexion :** Relie les bâtiments entre eux pour former un réseau accessible.
*   **Esthétique :** Améliore l'aspect visuel du zoo.

# Annexes Techniques

## 1. Données et États
### Modèle de Données (JSON)
```json
{
  "type": "path",
  "material": "gravel",
  "x": 10,
  "y": 12,
  "connected_neighbors": ["N", "S", "E"],
  "iso_x": "integer",
  "iso_y": "integer",
  "z_index": "integer"
}
```

## 2. Règles Métier
*   **Connexion Automatique :** Les textures des chemins se connectent automatiquement aux chemins adjacents (Auto-tiling).
*   **Vitesse :** Bonus de vitesse de déplacement pour les entités sur les chemins.

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

## 1. Détails Spécifiques
*   **Textures Connectées :** Les chemins utilisent des textures connectées (Terre, Gravier, Pavés) pour éviter les coupures nettes entre les cases.
*   **Variété :** Différents types de sols disponibles (Terre, Gravier, Pavés).

## Définition

| Champ | Valeur |
|---|---|
| Concept | Case “chemin” : tuile de circulation sur grille isométrique, auto-connectée (auto-tiling) pour former un réseau. |
| Rôle | Supporter le pathfinding visiteurs/staff, améliorer la vitesse, et garantir la connectivité entre points d’intérêt. |
| Portée | Tuile placée sur `case_zoo`, utilisée par `visiteur` et employés. |
| Contrainte | Pas de cache/mémorisation des routes : chemins calculés à la volée (A*/Dijkstra) ; pas de fallback silencieux si réseau cassé (message + log). |

## Fonctions (tableau détaillé)

| Fonction | Déclencheur | Entrées | Sorties | Règles | Observabilité |
|---|---|---|---|---|---|
| Placer chemin | action build | coord, material | tuile chemin | interdit sur case occupée | Event `PATH_PLACED` |
| Supprimer chemin | action delete | coord | tuile vide | interdit si bloque sortie (option) | Event `PATH_REMOVED` |
| Auto-tiling | placement/suppression | voisins N/E/S/W | sprite variant | recalcul local (voisinage) | Event `PATH_AUTOTILE_UPDATED` |
| Bonus vitesse | déplacement entité | type entité | speed multiplier | appliqué uniquement sur chemin | Event `PATH_SPEED_APPLIED` |
| Connectivité | navigation | graph chemins | route | route recalculée à la volée | Event `PATH_ROUTE_COMPUTED` |
| Esthétique | rendu | material + neighbors | sprite | variations (terre/gravier/pavés) | - |

## Icone de base

| Élément | Spécification |
|---|---|
| Représentation | Icône pavés / empreintes |
| Couleur dominante | Beige/gris selon matériau |
| Variantes | `icon_path_pavers.png`, `icon_path_footprints.png` |
| États | normal, hover, invalid (rouge) |

## Interactions (tableau détaillé)

| Interaction | Type | Préconditions | Étapes UI | Résultat | Erreurs / Messages |
|---|---|---|---|---|---|
| Construire chemin | Action | mode build | sélectionner chemin → cliquer cases | chemins posés | `CELL_OCCUPIED` |
| Choisir matériau | Action | build | dropdown | material appliqué | - |
| Supprimer | Action | mode delete | clic chemin | supprimé | `CANNOT_REMOVE_BLOCKING` |
| Prévisualiser auto-tiling | Consultation | build | survol | ghost variant | - |

## Personnage contextuel (événements & interaction)
Le module “Chemin” affiche prioritairement un **visiteur** (homme/femme) comme personnage contextuel (voir `visiteur.md`) afin de rendre visibles les conséquences de connectivité, de blocage et de flux.

### Affichage
Le visiteur s’affiche lorsque :
- le module est **actionné** (entrée en mode build chemins, pose/suppression, sélection matériau) ;
- un **événement** lié à la connectivité survient (route recalculée, blocage d’accès, saturation locale).

### Déclencheurs (exemples)
| Event / Message | Condition | Effet UI personnage |
|---|---|---|
| `ENTER_PATH_BUILD_MODE` | activation build | portrait visiteur + rappel “connectivité” |
| `CELL_OCCUPIED` | pose invalide | bulle : cause (case occupée) |
| `CANNOT_REMOVE_BLOCKING` | suppression bloquante | bulle : cause (accès bloqué) + CTA annuler |
| `PATH_ROUTE_COMPUTED` | route recalculée | bulle : “Itinéraire mis à jour” (info) |

### Interactions utilisateur
- Clic sur le personnage : ouvre le panneau “connectivité”/aide du mode chemin (si présent) ou met en surbrillance les zones impactées (entrée, POI).

### Skins & thèmes
Le visiteur suit `theme.md`. Les variantes homme/femme sont des skins/variantes de visiteurs (voir `visiteur.md` + `inventaire_skins.md` si les visiteurs sont skinnables).

## Annexes Techniques

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

| Donnée / État | Type | Exemple | Source | Contraintes |
|---|---|---|---|---|
| `type` | string | `path` | DB | constant |
| `material` | string | `gravel` | DB/config | enum |
| `grid.x` | int | 10 | DB | coord |
| `grid.y` | int | 12 | DB | coord |
| `connected_neighbors` | string[] | `["N","S","E"]` | calcul | à la volée |
| `iso_x` | int | 120 | calcul/DB | rendu |
| `iso_y` | int | 88 | calcul/DB | rendu |
| `z_index` | int | 12088 | calcul | profondeur |

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

| Caractéristique | Valeur initiale | Unité | Notes |
|---|---:|---|---|
| Bonus vitesse visiteurs | 1.15 | coef | sur chemin |
| Bonus vitesse staff | 1.25 | coef | sur chemin |
| Coût pose | 1 | coins | par tuile (exemple) |

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

| Score | Valeur initiale | Plage | Impact |
|---|---:|---|---|
| Connectivité | 0 | 0..100 | accessibilité |
| Chemins posés | 0 | 0..∞ | progression build |

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

| Phase | Déclencheur | Entrées | Sorties | Invariants |
|---|---|---|---|---|
| Apparition | build | coord | path | autotile local |
| Mise à jour | voisin change | voisins | sprite | cohérence |
| Disparition | delete | coord | vide | graph maj |

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

| Condition | Seuil | Opérateur | Résultat |
|---|---:|---|---|
| Achat/placement | true | est | chemin créé |

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

| Condition | Seuil | Opérateur | Résultat |
|---|---:|---|---|
| Suppression | true | est | chemin retiré |

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

| Élément | Hérité | Règle |
|---|---|---|
| Matériau | Oui | persiste sur tuile |
| Connectivité | Non | recalcul à la volée |

### 3. Impacts Environnementaux

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

| Condition | Effet chemin | Notes |
|---|---|---|
| Neige | visuel + glissant léger | option saisonnière |

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

| Biome | Effet chemin | Notes |
|---|---|---|
| Boue | vitesse - si pas pavés | material “terre” |

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

| Saison | Effet chemin | Notes |
|---|---|---|
| Hiver | variante sprite | neige |

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

| Période | Effet chemin | Notes |
|---|---|---|
| Nuit | éclairage lampadaires | via objets |

### 4. Impacts Biologiques et Sociaux

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

| Facteur | Effet sur taux | Condition |
|---|---|---|
| - | aucun | - |

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

| Cas | Effet | Condition |
|---|---|---|
| Embouteillage | risque incidents | trop dense |

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

| Ressource | Effet | Condition |
|---|---|---|
| Accès boutiques | consommation ↑ | chemin connecte |

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

| Action/État | Gain | Rayon | Notes |
|---|---:|---:|---|
| Chemins propres | + | zoo | esthétique |

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

| Action/État | Effet animaux | Condition |
|---|---|---|
| Passage trop proche | stress + | enclos sans barrière |

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

| Facteur | Variation | Condition |
|---|---:|---|
| Pavés premium | + | cosmétique |

### 5. Impacts Logistiques et Économiques

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

| Paramètre | Effet | Condition |
|---|---|---|
| Itinéraire camion | préfère chemins | si autorisé |

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

| Paramètre | Effet | Condition |
|---|---|---|
| Accès nurserie | temps staff - | chemin connecté |

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

| Paramètre | Effet | Condition |
|---|---|---|
| File visiteurs | plus fluide | chemin large |

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

| Paramètre | Effet | Condition |
|---|---|---|
| Staff | déplacement + | chemin |

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

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

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

| Paramètre | Effet | Condition |
|---|---|---|
| Visiteurs | vitesse + | chemin |

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

| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| - | 0 | - | - |

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

| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Maintenance | 1 | coins / tuile / jour | option |

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

| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| - | 0 | - | - |

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

| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Temps déplacement | - | min | chemins |

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

| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Section dupliquée | 0 | - | conservée |

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

| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| - | 0 | - | - |

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

| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| - | 0 | - | - |

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

| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| - | 0 | - | - |

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

| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| - | 0 | - | - |

#### Trajet Visiteurs

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

| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| Ville | Zoo | ouverture | route |

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

| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| Allée | Enclos | curiosité | route |

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

| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| Enclos | Boutique | besoin | route |

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

| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| Billetterie | Allées | entrée | flux |

### 6. Événements

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

| Event | Déclencheur | Payload | Effet |
|---|---|---|---|
| `PATH_PLACED` | build | coord, material | tuile |
| `PATH_REMOVED` | delete | coord | tuile |
| `PATH_AUTOTILE_UPDATED` | voisin | coord | sprite |

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

| Event | Déclencheur | Effet |
|---|---|---|
| - | - | - |

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

| Event | Déclencheur | Effet |
|---|---|---|
| `PATH_ROUTE_COMPUTED` | visite | route | navigation |

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

| Event | Déclencheur | Effet |
|---|---|---|
| - | - | - |

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

| Event | Déclencheur | Effet |
|---|---|---|
| `VISITOR_MOVES` | tick | speed bonus |

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

| Event | Déclencheur | Effet |
|---|---|---|
| `PLAYER_BUILDS_PATH` | build | réseau |

### 7. Progression

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

| Niveau | Coût | Effet | Débloque |
|---|---:|---|---|
| Terre | 0 | base | - |
| Gravier | 100 | vitesse + | matériau |
| Pavés | 250 | vitesse ++ | matériau |

### 8. Logique et Interfaces 

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

| Fonction | Entrées | Sorties | Notes |
|---|---|---|---|
| `computeNeighborsMask` | grid, coord | mask | N/E/S/W |
| `selectAutotileVariant` | material, mask | sprite_id | atlas |
| `computeSpeedMultiplier` | entity, tile | float | sur chemin |

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

| ID | Niveau | Message | Condition |
|---|---|---|---|
| `CELL_OCCUPIED` | Warning | "Case occupée." | placement |
| `CANNOT_REMOVE_BLOCKING` | Warning | "Suppression impossible : bloque un accès." | option |

## Annexes UX/UI 

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

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

| Parcours | But | Friction | Réduction clics |
|---|---|---|---|
| Tracer une allée | connecter zones | répétition | drag paint “pinceau” |
| Changer matériau | esthétique | navigation | quick switch |

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

| Composant | Contenu | États |
|---|---|---|
| Palette matériaux | terre/gravier/pavés | actif |
| Curseur pinceau | taille 1..3 | preview |
| Ghost tile | variant | valid/invalid |

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

| Zone UI | Position | Notes |
|---|---|---|
| Mode build | barre | accès direct |

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

| Intégration | Contrat | Notes |
|---|---|---|
| `visiteur.md` | pathfinding | routes |
| `zoo.md` | grille | coords |

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

| Action | Chemin | Résultat |
|---|---|---|
| Construire | build → chemin | pinceau |
| Supprimer | build → delete | gomme |

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

| Event UI | Déclencheur | Effet |
|---|---|---|
| `ENTER_PATH_BUILD_MODE` | clic | palette |
| `PAINT_PATH` | drag | pose |

#### Assets Skinables

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

| Asset | Usage | Durée | Notes |
|---|---|---:|---|
| `build_mode_loop.mp3` | build | loop | discret |

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

| Asset | Usage | Volume |
|---|---|---|
| `path_place.mp3` | pose | bas |
| `path_remove.mp3` | retrait | bas |

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

| Asset | Usage | Contraintes |
|---|---|---|
| `path_autotile_atlas.png` | sprites | atlas |
| `path_preview_overlay.png` | ghost | alpha |

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

| Asset | Usage |
|---|---|
| `path_material_icon_set.png` | palette |

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

| Asset | Usage | Durée |
|---|---|---:|
| `path_paint.webm` | tuto | 2.0s |

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

| Animation | Déclencheur | Notes |
|---|---|---|
| sparkle pavés | hover | subtil |

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

| Token | Valeur | Usage |
|---|---|---|
| `path_beige` | #D7C7A4 | terre |
| `path_gray` | #9E9E9E | pavés |

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

| Clé | FR | EN |
|---|---|---|
| `path.title` | Chemin | Path |
| `path.material` | Matériau | Material |

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

| Élément | Forme | Notes |
|---|---|---|
| Palette | rectangles | clairs |
