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