# Spécifications : Carte du Monde

## Définition
La carte du monde est l'espace multijoueur où sont situés les zoos des joueurs, des bots, les villes et les laboratoires.

## Structure
- **Grille** : Fixe, avec des positions définies pour chaque entité.
- **Fond** : Reprend les biomes de la carte du zoo (Prairie/Océan/Montagne) en fond.
- **Zoom** : Niveau de zoom dépendant de l'upgrade "Agrandir la carte". Pas de pan manuel.

## Contenu Initial (Lancement)
- 1 Case Agrandissement de la carte (Payable en unités de recherche)
- 1 Compteur de bébés à vendre
- 1 Compteur d'animaux à vendre
- 1 Compteur de laboratoires
- 1 Compteur de zoos
- 1 Compteur de villes
- 1 Case Accueil nouveaux animaux (Haut gauche)
- 1 Case Nourriture générale (Haut gauche)
- 1 Case Camion (Haut gauche)
- 24 Cases de terrain (3 couleurs différentes)

## Entités Visibles
- **Zoos Joueurs** : Nom, icône, indicateurs.
- **Zoos Bots** : Identiques aux joueurs.
- **Villes** : Sources de visiteurs.
- **Laboratoires** : Sources d'œufs/bébés rares.
- **Camions** : En transit entre les entités.

## Mécaniques
- **Navigation** : Vue d'ensemble du marché.
- **Interactions** : Achat d'œufs/animaux via le camion.

# Annexes Techniques

## 1. Données et États
### Modèle de Données (JSON)
```json
{
  "id": "world_map",
  "width": "integer (très grand)",
  "height": "integer",
  "sites": [ { "id": "uuid", "type": "zoo|city|lab", "pos": { "x": "int", "y": "int" } } ],
  "trucks": [ { "id": "uuid", "owner_id": "uuid", "pos": { "x": "float", "y": "float" }, "target": "uuid" } ],
  "iso_x": "integer",
  "iso_y": "integer",
  "z_index": "integer"
}
```

### Caractéristiques Initiales
| Caractéristique | Valeur Initiale |
| :--- | :--- |
| Rayon Visible | 500km (simulé) |
| Nb Villes | 10 (dans rayon départ) |
| Nb Labos | 2 (dans rayon départ) |

### Scores Initiaux
**Score Exploration** : 0% (Carte dévoilée).

## 2. Cycles de Vie et Apparition
### Conditions d'Apparition
Unique (Singleton serveur).

### Conditions de Disparition
Jamais.

### Hérédité
**Cartographie** : Les zones découvertes restent visibles après un reset (Connaissance acquise).

## 3. Impacts Environnementaux
### Impact Température
**Météo Globale** : Nuages, Pluie ou Neige visibles sur la carte (Effet visuel + Gameplay).

### Impact Milieu (Biome)
**Diversité** : Les biomes influencent le type de zoo bot (ex: Zoo Polaire au Nord, Zoo Tropical à l'Équateur).

### Impact Saisons
**Visuel** : La carte change de teinte (Blanc en Hiver, Orange en Automne, Vert vif au Printemps).

### Impact Heure / Jour-Nuit
**Cycle Jour/Nuit** : Assombrissement global. Les villes et zoos s'allument (Pixel Art lumineux).

## 4. Impacts Biologiques et Sociaux
### Impact Reproduction
**Migration** : En saison des amours, des troupeaux sauvages (décoratifs) migrent sur la carte.

### Impact Mort
**Cimetière des Éléphants** : Lieu légendaire caché (Easter Egg) donnant un bonus si découvert.

### Impact Nourriture
**Ressources** : Les villes produisent de la nourriture (Champs autour des villes).

### Impact Attractivité (Visiteurs/Animaux)
**Rayonnement** : Un zoo très attractif (> 10k visiteurs) émet un halo doré visible de loin.

### Impact Valeur
**Économie** : Les prix du marché fluctuent selon l'offre globale (Loi de l'offre et la demande simulée).

## 5. Impacts Logistiques et Économiques
### Vitesse (Camion/Nurserie/Accueil/Recherche/Labo/Visite)
**Voyage Rapide** : Coût en pièces pour téléportation instantanée (si module "Héliport" débloqué).

### Dépenses (Boutiques/Visiteurs)
**Péages** : Taxe de passage sur certaines routes commerciales (1% valeur cargaison).

### Trajet Visiteurs
Calcul des distances Ville -> Zoo pour l'attractivité. Les visiteurs prennent le chemin le plus court.

## 6. Événements
### Événements du Jeu / Carte / Zoo / Ville / Visiteur
*   **Spawn Bot** : Apparition nouveau zoo bot.
*   **Spawn Truck** : Camion visible.
*   **Embouteillage** : Ralentissement sur les routes principales.

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

## 8. Logique et Interfaces
### Pseudo-code Impacts
```javascript
function updateWorldMap(map, deltaTime):
  for truck in map.trucks:
    moveTruck(truck, deltaTime)
    if hasArrived(truck):
      processTransaction(truck)

  updateWeather(map)
  updateDayNightCycle(map)
```

### Messages d'Infos / Alerte
| ID | Niveau | Message |
| :--- | :--- | :--- |
| `MAP_EVENT` | Info | "Un événement météo touche la région Nord." |

# 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)
### Vue Globale (Passif)
**Description UX** : Le joueur voit les autres acteurs et les flux économiques.
**Description UI** : Carte style "Google Maps" simplifiée ou grille hexagonale. Icônes (Maisons, Gratte-ciels, Fioles). **Flux** : Petites particules (voitures/points) voyageant entre les villes et les zoos attractifs.
**Emplacement** : Écran Carte Monde.
**Intégration** : Plein écran.
**Navigation** : Bouton Retour Zoo.
**Événements** : `OPEN_WORLD_MAP`.

#### Assets
- **Musiques** : Thème Aventure/Voyage.
- **Sons** : Vent, Bruit lointain trafic.
- **Graphiques** : Fond carte (Biomes flous).
- **Images** : Icônes Sites.
- **Vidéos** : Nuages dynamiques (shader).
- **Animations** : Camions qui bougent.
- **Couleurs** : Desaturées (pour faire ressortir les icônes).
- **Textes** : Noms des villes/zoos.
- **Formes** : Pins/Marqueurs.

### Brouillard de Guerre (Passif)
**Description UX** : Les zones inexplorées sont cachées.
**Description UI** : Nuages ou zone sombre en périphérie.
**Emplacement** : Bords Carte.
**Intégration** : Mask.
**Navigation** : Zoom-out via upgrade carte ; au clic sur une zone masquée, afficher un tooltip “Zone non explorée”.
**Événements** : `FOG_HOVER`, `FOG_CLICK_BLOCKED`

#### Assets
- **Musiques** : `ambience_fog_soft.mp3` (optionnel, très discret).
- **Sons** : `fog_whoosh.mp3` (au reveal), `ui_denied.mp3` (clic zone bloquée).
- **Graphiques** : Texture Nuages.
- **Images** : Masque alpha (bords flous).
- **Vidéos** : Effet de brume (particules).
- **Animations** : Nuages qui dérivent lentement.
- **Couleurs** : Blanc/Gris.
- **Textes** : "Zone Inexplorée".
- **Formes** : Zone non cliquable.

## Définition

| Champ | Valeur |
|---|---|
| Concept | “Carte du monde” : vue multijoueur/économie, affichant sites (zoos, villes, labos) et camions en transit. |
| Rôle | Permettre l’achat/vente via transport, visualiser la dynamique (flux, météo, jour/nuit) et l’exploration (brouillard). |
| Portée | Singleton logique (serveur), rendu client par zooms et marqueurs, sans pan manuel si règle active. |
| Contrainte | Pas de cache/mémorisation des flux : distances/choix calculés à la volée ; pas d’alternative HTTP/analytics ; interaction zone masquée => blocage explicite. |

## Fonctions (tableau détaillé)

| Fonction | Déclencheur | Entrées | Sorties | Règles | Observabilité |
|---|---|---|---|---|---|
| Ouvrir carte monde | bouton UI | player | écran monde | charge sites visibles | Event `OPEN_WORLD_MAP` |
| Résoudre visibilité | upgrade zoom | rayon | sites visibles | dépend upgrade carte | Event `WORLD_VISIBILITY_UPDATED` |
| Afficher sites | rendu | sites | markers | z_index stable | Event `WORLD_SITES_RENDERED` |
| Suivre camions | tick lazy | dt | pos camions | interpolation | Event `WORLD_TRUCKS_UPDATED` |
| Bloquer zone inexplorée | clic | coord | tooltip | pas de reveal gratuit | Event `FOG_CLICK_BLOCKED` |
| Délivrer cargo | camion arrive | cargo | dépôt zoo | adultes→accueil, œufs/bébés→nurserie | Event `DELIVERY_COMPLETE` |

## Icone de base

| Élément | Spécification |
|---|---|
| Représentation | Globe + pins |
| Couleur dominante | Désaturé (fond) + accents (pins) |
| Variantes | `icon_world_map.png`, `icon_pin_site.png` |
| États | normal, fogged, event_weather |

## Interactions (tableau détaillé)

| Interaction | Type | Préconditions | Étapes UI | Résultat | Erreurs / Messages |
|---|---|---|---|---|---|
| Clic site | Consultation | visible | clic marker | panneau site | `ZONE_NOT_EXPLORED` |
| Achat offre | Action | fonds + camion idle | drag offre→camion | mission | `TRUCK_BUSY`, `NOT_ENOUGH_COINS` |
| Zoom-out | Navigation | upgrade ok | bouton/gesture | rayon ↑ | `UPGRADE_REQUIRED` |

## Personnages contextuels (événements & interaction)
La carte du monde affiche des personnages contextuels selon le type de site sélectionné et les événements globaux.

### Sites et personnages
- **Ville** : maire (`maire.md`) — événements de ville, flux visiteurs, relation/jumelage.
- **Laboratoire** : laborantin (`laborantin.md`) — offres rares, services, alertes.
- **Zoo joueur** : joueur/portrait (`joueur.md`, `avatar_joueur.md`) — identité, indicateurs, interactions sociales.
- **Zoo bot** : bot (`bot.md`) — profil de stratégie et indicateurs.

### Déclencheurs (exemples)
| Event / Action | Condition | Personnage | Effet UI |
|---|---|---|---|
| `OPEN_WORLD_MAP` | ouverture écran | (contexte) | personnage de contexte selon dernier site sélectionné |
| clic site `city` | sélection ville | maire | panneau ville + événements |
| clic site `lab` | sélection labo | laborantin | panneau labo + offres/services |
| clic site `zoo` (autre joueur) | sélection zoo | joueur | panneau identité + actions permises |
| `ZONE_NOT_EXPLORED` | fog | (contexte) | message explicite (gating) |

### Skins & thèmes
Les portraits/mascottes suivent `theme.md`. Les mini-avatars des joueurs suivent leurs skins (si le profil est accessible) via les règles de `avatar_joueur.md` et `inventaire_skins.md`.

## Annexes Techniques

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

| Donnée / État | Type | Exemple | Source | Contraintes |
|---|---|---|---|---|
| `id` | string | `world_map` | DB | singleton |
| `width` | int | 200 | DB | très grand |
| `height` | int | 200 | DB | - |
| `sites[].id` | uuid_v4 | `uuid_v4` | DB | - |
| `sites[].type` | enum | `city` | DB | `zoo/city/lab` |
| `sites[].pos.x` | int | 40 | DB | grid |
| `sites[].pos.y` | int | 70 | DB | grid |
| `trucks[].id` | uuid_v4 | `uuid_v4` | DB | - |
| `trucks[].owner_id` | uuid_v4 | `uuid_v4` | DB | - |
| `trucks[].pos.x` | float | 40.2 | calcul | monde |
| `trucks[].pos.y` | float | 69.8 | calcul | monde |
| `trucks[].target` | uuid_v4 | `uuid_v4` | DB | site |
| `fog.revealed_radius` | float | 500 | config | km simulé |
| `weather.global` | enum | `rain` | calcul | rendu |

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

| Caractéristique | Valeur initiale | Unité | Notes |
|---|---:|---|---|
| Rayon visible | 500 | km | simulé |
| Nb villes | 10 | count | départ |
| Nb labos | 2 | count | départ |

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

| Score | Valeur initiale | Plage | Impact |
|---|---:|---|---|
| Exploration | 0 | 0..100 | fog |
| Trafic camions | 0 | 0..∞ | routes visibles |

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

| Phase | Déclencheur | Entrées | Sorties | Invariants |
|---|---|---|---|---|
| Création | serveur | seed | sites init | singleton |
| Exploration | upgrade | zoom | reveal | blocage zones |
| Événements | météo | saison | overlays | observables |

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

| Condition | Seuil | Opérateur | Résultat |
|---|---:|---|---|
| Démarrage | true | est | carte disponible |

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

| Condition | Seuil | Opérateur | Résultat |
|---|---:|---|---|
| - | - | - | jamais |

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

| Élément | Hérité | Règle |
|---|---|---|
| Cartographie | Oui | zones découvertes persistent |
| Routes “usuelles” | Oui | visibles si trafic haut |

### 3. Impacts Environnementaux

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

| Condition | Effet | Notes |
|---|---|---|
| Météo globale | visuel + mod vitesse | pluie/neige |

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

| Biome | Effet | Notes |
|---|---|---|
| Montagne | coût traversée + | camions |

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

| Saison | Effet | Notes |
|---|---|---|
| Hiver | teinte blanche | visuel |

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

| Période | Effet | Notes |
|---|---|---|
| Nuit | lumières villes/zoos | rendu |

### 4. Impacts Biologiques et Sociaux

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

| Facteur | Effet sur taux | Condition |
|---|---|---|
| Migration (décor) | 0 | purement visuel |

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

| Cas | Effet | Condition |
|---|---|---|
| Easter egg | bonus | découverte |

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

| Ressource | Effet | Condition |
|---|---|---|
| Villes produisent | stock + | marchés |

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

| Action/État | Gain | Rayon | Notes |
|---|---:|---:|---|
| Halo zoo attractif | visuel | monde | signal |

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

| Action/État | Effet animaux | Condition |
|---|---|---|
| - | neutre | - |

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

| Facteur | Variation | Condition |
|---|---:|---|
| Marché global | prix ± | offre/demande |

### 5. Impacts Logistiques et Économiques

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

| Paramètre | Effet | Condition |
|---|---|---|
| Embouteillage | vitesse - | event |

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

| Paramètre | Effet | Condition |
|---|---|---|
| Offres bébés | compteur + | listings |

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

| Paramètre | Effet | Condition |
|---|---|---|
| Offres animaux | compteur + | listings |

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

| Paramètre | Effet | Condition |
|---|---|---|
| Zoom upgrade | visibilité + | agrandissement carte |

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

| Paramètre | Effet | Condition |
|---|---|---|
| Refresh offers | TTL 24h | remplacement |

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

| Paramètre | Effet | Condition |
|---|---|---|
| Flux ville→zoo | distance | calcul |

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

| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Péages | 1% cargaison | coins | routes |

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Voyage rapide | 100 | coins | si héliport |

#### Trajet Visiteurs

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

| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| Ville | Zoo | attractivité | flux |

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

| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| Zoo | Enclos | visite | path |

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

| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| Zoo | Boutique | besoins | achats |

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

| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| Billeterie | Sortie | fin | despawn |

### 6. Événements

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

| Event | Déclencheur | Payload | Effet |
|---|---|---|---|
| `OPEN_WORLD_MAP` | UI | - | écran |
| `MAP_EVENT` | météo | region | overlay |

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

| Event | Déclencheur | Effet |
|---|---|---|
| `FOG_HOVER` | hover | tooltip |

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

| Event | Déclencheur | Effet |
|---|---|---|
| `WORLD_TRUCKS_UPDATED` | tick | positions |

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

| Event | Déclencheur | Effet |
|---|---|---|
| `CITY_FLOW_DISPATCHED` | calcul | flux |

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

| Event | Déclencheur | Effet |
|---|---|---|
| `ZONE_NOT_EXPLORED` | clic | denied |

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

| Event | Déclencheur | Effet |
|---|---|---|
| `WORLD_VISIBILITY_UPDATED` | upgrade | reveal |

### 7. Progression

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

| Niveau | Coût | Effet | Débloque |
|---|---:|---|---|
| 1 | 1000 | zoom + | rayon |

### 8. Logique et Interfaces 

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

| Fonction | Entrées | Sorties | Notes |
|---|---|---|---|
| `updateWorldMap` | map, dt | map | move trucks |
| `canReveal` | upgrade | bool | fog |

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

| ID | Niveau | Message | Condition |
|---|---|---|---|
| `ZONE_NOT_EXPLORED` | Warning | "Zone non explorée." | fog |
| `UPGRADE_REQUIRED` | Warning | "Amélioration requise." | zoom |

## Annexes UX/UI 

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

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

| Parcours | But | Friction | Réduction clics |
|---|---|---|---|
| Lire le marché | choisir offres | densité | compteurs + filtres |
| Acheter | déclencher camion | drag | drag direct vers camion |

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

| Composant | Contenu | États |
|---|---|---|
| Pins sites | zoo/city/lab | hover/selected |
| Fog mask | nuages | revealed/hidden |
| Compteurs | offres | live |

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

| Zone UI | Position | Notes |
|---|---|---|
| Plein écran | centre | carte monde |

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

| Intégration | Contrat | Notes |
|---|---|---|
| `camion.md` | transport | missions |
| `ville.md` | flux | visiteurs |

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

| Action | Chemin | Résultat |
|---|---|---|
| Ouvrir | bouton carte monde | écran |
| Retour | bouton zoo | ferme |

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

| Event UI | Déclencheur | Effet |
|---|---|---|
| `OPEN_WORLD_MAP` | clic | open |
| `FOG_CLICK_BLOCKED` | clic fog | tooltip |

#### Assets Skinables

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

| Asset | Usage | Durée | Notes |
|---|---|---:|---|
| `world_map_travel_loop.mp3` | carte monde | loop | aventure |

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

| Asset | Usage | Volume |
|---|---|---|
| `fog_whoosh.mp3` | reveal | bas |
| `ui_denied.mp3` | blocked | moyen |

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

| Asset | Usage | Contraintes |
|---|---|---|
| `world_pins_atlas.png` | pins | lisible |
| `fog_clouds.png` | fog | alpha |

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

| Asset | Usage |
|---|---|
| `world_biomes_blur.png` | fond |

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

| Asset | Usage | Durée |
|---|---|---:|
| `clouds_shader.webm` | fond | loop |

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

| Animation | Déclencheur | Notes |
|---|---|---|
| déplacement camions | tick | continu |

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

| Token | Valeur | Usage |
|---|---|---|
| `world_desat` | #8A8A8A | fond |
| `world_pin_gold` | #D4AF37 | halo |

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

| Clé | FR | EN |
|---|---|---|
| `world.fog` | Zone inexplorée | Unexplored zone |
| `world.back` | Retour zoo | Back to zoo |

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

| Élément | Forme | Notes |
|---|---|---|
| Pin | goutte | site |
