Files
builazoo/docs/specs/chemin.md
2026-03-05 04:01:29 +01:00

528 lines
16 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 dinté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 saffiche 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 daccè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 |