# Spécifications : Attractivité dans le Zoo sur les Visiteurs

## Définition
Comportement des visiteurs une fois qu'ils sont entrés dans l'enceinte du zoo.

## Mécanique de Déplacement
Les visiteurs ne se déplacent pas au hasard. Ils ont des "cibles" d'intérêt.
- **Cibles Prioritaires** : Animaux Rares > Animaux Communs > Boutiques.
- **Algorithme** : À chaque intersection ou fin d'action, le visiteur évalue l'attrait des cases environnantes.

## Facteurs de Rétention
- **Diversité** : Voir des animaux différents prolonge la visite.
- **Confort** : La présence de bancs, poubelles et boutiques augmente le temps de séjour.
- **Départ** : Si l'attrait local tombe sous un seuil (ennui) ou si la journée finit, le visiteur se dirige vers la sortie (Billeterie).

# Annexes Techniques

## 1. Données et États
### Modèle de Données (JSON)
Propriétés de `Visiteur`.
```json
{
  "visitor_id": "uuid",
  "current_target": { "type": "enum('animal','shop','bench','toilet','exit')", "entity_id": "uuid" },
  "target_score": "float",
  "memory": {
    "seen_species": "string[]",
    "last_shop_at": "timestamp | null",
    "fatigue": "float (0-100)",
    "thirst": "float (0-100)"
  },
  "pathing": {
    "preferred_tiles": "enum('path','bridge')",
    "avoid_zones": "uuid[]",
    "repath_cooldown_ms": "integer"
  }
}
```

### Caractéristiques Initiales
| Caractéristique | Valeur Initiale | Type | Description |
|---|---|---|---|
| Fatigue | 0 | float | Monte avec la marche ; déclenche recherche de banc. |
| Soif | 0 | float | Monte avec le temps/température ; déclenche boutique. |
| Diversité vue | 0 | int | Compte d'espèces différentes vues. |

### Scores Initiaux
| Score | Valeur Initiale | Plage (Min-Max) | Impact |
|---|---:|---|---|
| Enthousiasme | 50 | 0-100 | Modifie durée de visite et dépenses. |
| Ennui | 0 | 0-100 | Si > 70, visiteur part vers sortie. |

## 2. Cycles de Vie et Apparition
### Conditions d'Apparition
| Condition | Seuil | Opérateur | Résultat |
|---|---:|---|---|
| Visiteur spawn | true | Est | IA interne démarre (choix cibles). |

### Conditions de Disparition
| Condition | Seuil | Opérateur | Résultat |
|---|---:|---|---|
| Ennui | 70 | >= | Cible sortie (billeterie). |
| Heure | fermeture | >= | Cible sortie. |

### Hérédité
| Parent | Trait Transmis | Probabilité | Mutation Possible |
|---|---|---:|---|
| Groupe famille | Itinéraire (préférence boutique/enclos) | 100% | Non |

## 3. Impacts Environnementaux
### Impact Température
**Canicule/Grand Froid** : Réduit le temps de séjour (-30%).

### Impact Milieu (Biome)
| Biome | Compatibilité | Bonus/Malus |
|---|---:|---|
| Chemin pavés | 100% | fatigue -10%/min |
| Boue | 30% | fatigue +20%/min, satisfaction - |

### Impact Saisons
| Saison | Effet | Modificateur |
|---|---|---|
| Été | recherche d’ombre/boutiques | soif + |
| Hiver | recherche d’intérieur | fatigue + |

### Impact Heure / Jour-Nuit
| Période | Activité | Visibilité |
|---|---|---|
| 10h–16h | exploration max | haute |
| 17h–19h | achats sortie | moyenne |

## 4. Impacts Biologiques et Sociaux
### Impact Reproduction
| Facteur | Effet sur Taux | Condition |
|---|---|---|
| Bébés visibles | + | visiteurs restent plus |

### Impact Mort
Voir `visiteur.md` (Départ immédiat).

### Impact Nourriture
| Type Nourriture | Gain Santé | Coût | Préférence |
|---|---:|---:|---:|
| Boisson | soif -50 | 5 | 5 |

### Impact Attractivité (Visiteurs/Animaux)
**Poids des Cibles** :
| Type Cible | Poids |
| :--- | :--- |
| Animal Rareté 1 | 10 |
| Animal Rareté 5 | 100 |
| Boutique | 50 |
| Banc (si fatigué) | 200 |

### Impact Valeur
| Facteur | Variation Prix | Condition |
|---|---:|---|
| Visiteur VIP | dépense x2 | si satisfait |

## 5. Impacts Logistiques et Économiques
### Vitesse (Camion/Nurserie/Accueil/Recherche/Labo/Visite)
| Paramètre | Valeur | Unité | Détail |
|---|---:|---|---|
| Repath cooldown | 500 | ms | évite recalcul permanent |
| Poids chemin | 2.0 | facteur | préférence chemin vs herbe |

### Dépenses (Boutiques/Visiteurs)
| Action | Dépense | Condition |
|---|---:|---|
| Achat boisson | 5 | soif > 50 |
| Achat souvenir | 15-30 | proche sortie |

### Trajet Visiteurs
Algorithme de choix de cible pondéré.

## 6. Événements
### Événements du Jeu / Carte / Zoo / Ville / Visiteur
| Event | Déclencheur | Effet | Durée |
|---|---|---|---|
| `TARGET_CHANGED` | nouvelle cible | path recalculé | instant |
| `VISITOR_BORED` | ennui seuil | départ | jusqu’à sortie |

## 7. Progression
### Tableau des Upgrades
| Niveau | Coût | Prérequis | Bonus Débloqué |
|---|---:|---|---|
| 1 | 0 | - | IA basique |
| 2 | 2000 | chemins niv 2 | préférence chemins + |

## 8. Logique et Interfaces
### Pseudo-code Impacts
```
function chooseNextTarget(visitor, zoo):
  candidates = getAllPOIs(zoo)
  scoredCandidates = candidates.map(c => {
    score = c.attractiveness / distance(visitor, c)
    return { target: c, score: score }
  })
  return weightedRandomSelect(scoredCandidates)
```

### Messages d'Infos / Alerte
| Type | Message | Condition | Priorité |
|---|---|---|---:|
| Info | "La foule se déplace vers une star." | animal rare visible | 2 |
| Warn | "Les visiteurs s'ennuient." | ennui moyen > seuil | 4 |

# 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)
### Foule (Passif)
**Description UX** : Les visiteurs s'agglutinent devant les animaux les plus intéressants.
**Description UI** : Densité de sprites visiteurs plus élevée autour des cases "Stars".
**Emplacement** : Grille Zoo.
**Intégration** : Comportement IA.
**Navigation** : Aucune (passif). Option debug : toggle “Heatmap foule” dans HUD pour visualiser les zones d’attroupement.
**Événements** : `CROWD_GATHER`.

#### Assets
- **Musiques** : `ambience_crowd_dynamic.mp3` (volume selon densité).
- **Sons** : Rumeur de foule (volume variable selon densité).
- **Graphiques** : Particules “flash photo”, bulles d’émotion.
- **Images** : `icon_camera.png`, `icon_star.png`.
- **Vidéos** : `crowd_flash.webm` (0.6s loop, optionnel).
- **Animations** : Applaudissements, Photos.
- **Couleurs** : Blanc/Jaune (flash), Or (star).
- **Textes** : `CROWD_GATHER` = "La foule se rassemble"
- **Formes** : Bulle BD (émotions).
