From 6c8a7104320c87cca3bb51ebddcdeb166525335d Mon Sep 17 00:00:00 2001 From: Nicolas Cantu Date: Thu, 5 Mar 2026 04:01:29 +0100 Subject: [PATCH] ok --- docs/specs/accueil_animaux.md | 507 +++++++++++++++++++++++++ docs/specs/agent_securite.md | 10 + docs/specs/bebe_animal.md | 22 +- docs/specs/billeterie.md | 497 +++++++++++++++++++++++++ docs/specs/boutique.md | 499 +++++++++++++++++++++++++ docs/specs/camion.md | 492 +++++++++++++++++++++++++ docs/specs/carte_generique.md | 461 +++++++++++++++++++++++ docs/specs/carte_monde.md | 472 ++++++++++++++++++++++++ docs/specs/carte_zoo.md | 495 +++++++++++++++++++++++++ docs/specs/case_generique.md | 442 ++++++++++++++++++++++ docs/specs/case_monde.md | 425 +++++++++++++++++++++ docs/specs/case_zoo.md | 451 +++++++++++++++++++++++ docs/specs/centre_recherche.md | 19 + docs/specs/chemin.md | 472 ++++++++++++++++++++++++ docs/specs/guichetiere.md | 57 +++ docs/specs/inventaire_bebe_animaux.md | 480 ++++++++++++++++++++++++ docs/specs/inventaire_skins.md | 470 +++++++++++++++++++++++ docs/specs/joueur.md | 11 + docs/specs/laborantin.md | 51 +++ docs/specs/laboratoire.md | 499 +++++++++++++++++++++++++ docs/specs/maire.md | 49 +++ docs/specs/menu_achats.md | 469 +++++++++++++++++++++++ docs/specs/nourisseur.md | 10 + docs/specs/nurse.md | 75 ++++ docs/specs/nurserie.md | 511 ++++++++++++++++++++++++++ docs/specs/personnage_generique.md | 46 +++ docs/specs/personnel_accueil.md | 68 ++++ docs/specs/soigneur.md | 10 + docs/specs/vendeur.md | 57 +++ docs/specs/vendeur_pieces.md | 55 +++ docs/specs/ville.md | 17 + docs/specs/visiteur.md | 7 +- 32 files changed, 8203 insertions(+), 3 deletions(-) create mode 100644 docs/specs/guichetiere.md create mode 100644 docs/specs/laborantin.md create mode 100644 docs/specs/maire.md create mode 100644 docs/specs/nurse.md create mode 100644 docs/specs/personnel_accueil.md create mode 100644 docs/specs/vendeur.md create mode 100644 docs/specs/vendeur_pieces.md diff --git a/docs/specs/accueil_animaux.md b/docs/specs/accueil_animaux.md index 1bce4e0..140af76 100644 --- a/docs/specs/accueil_animaux.md +++ b/docs/specs/accueil_animaux.md @@ -266,3 +266,510 @@ def add_animal_to_reception(reception_center, animal): - **Occlusion** : Le bâtiment doit être semi-transparent si le joueur passe la souris derrière (pour voir les objets cachés). - **Indicateur d'état** : Une icône flottante (bulle) au-dessus du bâtiment indique si un animal est prêt (point d'exclamation vert) ou en cours (sablier). - **Z-Index** : Doit être trié correctement par rapport aux visiteurs passant devant. + +## Définition + +| Champ | Valeur | +|---|---| +| Concept | Bâtiment “Accueil des animaux” : point d’entrée unique des animaux livrés/achetés, avec slots, acclimatation/quarantaine, et passage vers placement sur la grille. | +| Rôle | Éviter le placement immédiat, révéler/afficher des informations avant placement, appliquer des règles d’acclimatation et incidents sanitaires observables. | +| Portée | Une instance de bâtiment sur la carte zoo (iso), gérant une liste de slots `EMPTY/OCCUPIED/READY`. | +| Contrainte | Timers et statuts recalculés à la volée (lazy update), sans cache/mémorisation ; aucun fallback silencieux en cas d’incohérence (log + erreur + message). | + +## Fonctions (tableau détaillé) + +| Fonction | Déclencheur | Entrées | Sorties | Règles | Observabilité | +|---|---|---|---|---|---| +| Ouvrir accueil | clic bâtiment | `reception_id` | bottom sheet slots | liste slots + progression | Event `OPEN_RECEPTION` | +| Réceptionner un animal | livraison camion/achat | `animal_id`, `arrival_time` | slot OCCUPIED | 1 slot libre requis, sinon `RECEPTION_FULL` | Event `ANIMAL_ARRIVAL` | +| Calculer fin acclimatation | arrivée/upgrade | level, baseDuration | `acclimatization_end_time` | formule par niveau ; clamp ≥ now | Event `ACCLIMATIZATION_SCHEDULED` | +| Passer READY | tick lazy | now, end_time | status READY | idempotent ; pas de skip | Event `ANIMAL_READY` | +| Inspection pré-placement | ouverture slot | `animal_id` | UI stats | révèle traits selon “Traçabilité” | Event `RECEPTION_INSPECTED` | +| Placement vers zoo | action joueur | `animal_id`, coord/enclos | animal placé | valide biome/enclos/case, sinon `PLACEMENT_ERROR` | Event `ANIMAL_PLACED` | +| Appliquer bonus temporaire | sortie accueil | level | modifs temporaires | fertilité + calm/confident selon niveau | Event `RECEPTION_BONUS_APPLIED` | +| Déclencher incident quarantaine | tick (par animal) | `risk_contamination` | quarantaine prolongée/coût | probabilité explicite ; jamais silencieux | Event `QUARANTINE_ALERT` | +| Gestion saturation | slot plein | - | signal UI | badge + réduction attractivité façade | Event `RECEPTION_SATURATED` | + +## Icone de base + +| Élément | Spécification | +|---|---| +| Représentation | Porte/étable + caisse, badge quarantaine | +| Couleur dominante | Ambre/bois (caisse), vert (prêt) | +| Variantes | `reception_building_dir_{N,E,S,W}.png`, `reception_icon.png` | +| États | `idle`, `occupied`, `ready`, `quarantine_alert`, `full` | + +## Interactions (tableau détaillé) + +| Interaction | Type | Préconditions | Étapes UI | Résultat | Erreurs / Messages | +|---|---|---|---|---|---| +| Ouvrir slots | Consultation | - | clic accueil | bottom sheet | - | +| Inspecter animal | Consultation | slot OCCUPIED/READY | clic slot | panneau détail | `ANIMAL_NOT_FOUND` | +| Placer animal | Action | slot READY | bouton “Placer” → mode placement | placement | `PLACEMENT_ERROR` | +| Détails incident | Consultation | `QUARANTINE_ALERT` actif | clic badge | panneau cause/coût | - | +| Quitter | Navigation | sheet ouvert | fermer | retour carte | - | + +## Personnage contextuel (événements & interaction) +Voir `personnel_accueil.md`. + +### Affichage +Le personnel d’accueil s’affiche lorsque : +- le module est **actionné** (ouverture de l’accueil, inspection d’un slot, lancement du placement) ; +- un **événement** lié à l’accueil survient (arrivée, prêt, saturation, quarantaine). + +### Déclencheurs (événements) +| Event | Condition | Effet UI personnage | +|---|---|---| +| `OPEN_RECEPTION` | clic bâtiment | portrait + état slots, CTA vers slot/placement | +| `ANIMAL_ARRIVAL` | slot affecté | bulle “Arrivée enregistrée” + deep-link inspection | +| `ANIMAL_READY` | slot passe READY | bulle “Prêt à placer” + CTA “Placer” | +| `RECEPTION_FULL` | pas de slot libre | bulle “Accueil saturé” + CTA “Voir slots” | +| `QUARANTINE_ALERT` | incident actif | bulle “Alerte quarantaine” + CTA “Voir détails” | + +### Skins & thèmes +Le rendu du personnage suit `theme.md` et les skins éventuels via `inventaire_skins.md` (uniforme, badge, clipboard). + +## Annexes Techniques + +### 1. Données et États (tableau détaillé) + +| Donnée / État | Type | Exemple | Source | Contraintes | +|---|---|---|---|---| +| `id` | uuid_v4 | `uuid_v4` | DB | - | +| `type` | string | `building_reception` | DB | constant | +| `level` | int | 1 | DB | 1..7 | +| `position.x` | int | 10 | DB | grid | +| `position.y` | int | 12 | DB | grid | +| `iso_x` | int | 120 | DB/calcul | rendu iso | +| `iso_y` | int | 88 | DB/calcul | rendu iso | +| `z_index` | int | 12088 | calcul | profondeur | +| `slots[].slot_id` | int | 0 | DB | 0..capacity-1 | +| `slots[].animal_id` | uuid_v4 \| null | `uuid_v4` | DB | null si vide | +| `slots[].status` | enum | `OCCUPIED` | DB | `EMPTY/OCCUPIED/READY` | +| `slots[].arrival_time` | timestamp \| null | - | DB | UTC | +| `slots[].acclimatization_end_time` | timestamp \| null | - | DB | UTC | +| `slots[].bonus_applied` | boolean | false | DB | idempotent | +| `scores.comfort_quarantine` | int | 60 | calcul/config | 0..100 | +| `scores.risk_contamination` | float | 0.02 | config | 0..0.25 | +| `scores.traceability` | int | 80 | config | 0..100 | + +#### Caractéristiques Initiales (tableau détaillé) + +| Caractéristique | Valeur initiale | Unité | Notes | +|---|---:|---|---| +| Capacité | 1 | slots | level 1 | +| Temps acclimatation | 600 | s | base | +| Zone température | neutre | - | stase | +| Nourrissage | auto | bool | coût inclus | + +#### Scores Initiaux (tableau détaillé) + +| Score | Valeur initiale | Plage | Impact | +|---|---:|---|---| +| Confort quarantaine | 60 | 0..100 | stress initial \(\downarrow\) | +| Risque contamination | 2% | 0..25% | incident sanitaire | +| Traçabilité | 80 | 0..100 | traits révélés | + +### 2. Cycles de Vie et Apparition (tableau détaillé) + +| Phase | Déclencheur | Entrées | Sorties | Invariants | +|---|---|---|---|---| +| Apparition | début jeu | - | bâtiment présent | indestructible | +| Entrée animal | livraison | animal_id | slot OCCUPIED | capacité | +| READY | fin timer | now | status READY | idempotent | +| Sortie | placement | coord | animal placé | slot libéré | +| Incident | tirage risque | risk | prolongation/coût | observable | + +#### Conditions d'Apparition (tableau détaillé) + +| Condition | Seuil | Opérateur | Résultat | +|---|---:|---|---| +| Nouvelle partie | true | est | accueil présent | + +#### Conditions de Disparition (tableau détaillé) + +| Condition | Seuil | Opérateur | Résultat | +|---|---:|---|---| +| - | - | - | indestructible | + +#### Hérédité (tableau détaillé) + +| Élément | Hérité | Règle | +|---|---|---| +| Bonus temporaires | Non | expirent | +| Niveau accueil | Oui | persiste | + +### 3. Impacts Environnementaux + +#### Impact Température (tableau détaillé) + +| Condition | Effet accueil | Notes | +|---|---|---| +| - | neutre | pas de dégâts température | + +#### Impact Milieu (Biome) (tableau détaillé) + +| Biome | Effet accueil | Notes | +|---|---|---| +| - | neutre | compatible tous | + +#### Impact Saisons (tableau détaillé) + +| Saison | Effet accueil | Notes | +|---|---|---| +| - | protégé | pas d’intempéries | + +#### Impact Heure / Jour-Nuit (tableau détaillé) + +| Période | Effet accueil | Notes | +|---|---|---| +| Nuit | aucun | 24/7 | + +### 4. Impacts Biologiques et Sociaux + +#### Impact Reproduction (tableau détaillé) + +| Facteur | Effet sur taux | Condition | +|---|---|---| +| Level 4..6 | +10% temporaire | 2 jours in-game | +| Level 7 | +25% temporaire | 5 jours in-game | + +#### Impact Mort (tableau détaillé) + +| Cas | Effet | Condition | +|---|---|---| +| Stase | pas de mort | jauges gelées | + +#### Impact Nourriture (tableau détaillé) + +| Ressource | Effet | Condition | +|---|---|---| +| Stock global | nourri auto | coût inclus | + +#### Impact Attractivité(Visiteurs (tableau détaillé) + +| Action/État | Gain | Rayon | Notes | +|---|---:|---:|---| +| Façade propre > 80 | +5 | 6 cases | ambiance | +| File visible (saturation) | -10 | 8 cases | frustration | +| Livraison animal rare | +20 | 10 cases | spectacle | + +#### Impact Attractivité Animaux) (tableau détaillé) + +| Action/État | Effet animaux | Condition | +|---|---|---| +| Quarantaine visible | stress voisin + | proximité | + +#### Impact Valeur (tableau détaillé) + +| Facteur | Variation | Condition | +|---|---:|---| +| Niveau accueil | +5% / niveau | valeur zoo | +| Sans incident 7 jours | +10% | aucun `QUARANTINE_ALERT` | + +### 5. Impacts Logistiques et Économiques + +#### Vitesse (Camion) (tableau détaillé) + +| Paramètre | Effet | Condition | +|---|---|---| +| Livraison | pousse slot OCCUPIED | camion arrive | + +#### Vitesse (Nurserie) (tableau détaillé) + +| Paramètre | Effet | Condition | +|---|---|---| +| - | - | - | + +#### Vitesse (Accueil) (tableau détaillé) + +| Paramètre | Effet | Condition | +|---|---|---| +| Temps acclimatation | table par level | 1..7 | + +#### Vitesse (Recherche) (tableau détaillé) + +| Paramètre | Effet | Condition | +|---|---|---| +| Traçabilité | + | score | + +#### Vitesse (Labo) (tableau détaillé) + +| Paramètre | Effet | Condition | +|---|---|---| +| - | - | - | + +#### Vitesse (Visite) (tableau détaillé) + +| Paramètre | Effet | Condition | +|---|---|---| +| Saturation | détour visiteurs | `QUARANTINE_ALERT` | + +#### Dépenses (Billeterie) (tableau détaillé) + +| Poste | Coût | Unité | Condition | +|---|---:|---|---| +| - | 0 | - | - | + +#### Dépenses (Boutiques) (tableau détaillé) + +| Poste | Coût | Unité | Condition | +|---|---:|---|---| +| Consommables quarantaine | 50 | coins / semaine | utilisation | +| Nettoyage/désinfection | 30 | coins / semaine | maintenance | +| Contrôle vétérinaire | 80 | coins / semaine | périodique | + +#### Dépenses (Visiteurs) (tableau détaillé) + +| Poste | Coût | Unité | Condition | +|---|---:|---|---| +| - | 0 | - | - | + +#### Dépenses (Employés) (tableau détaillé) + +| Poste | Coût | Unité | Condition | +|---|---:|---|---| +| Intervention quarantaine | 10 | coins | incident | + +#### 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 | +|---|---:|---|---| +| Nourrissage auto | 0 | - | inclus | + +#### Dépenses (Acceuil des animaux) (tableau détaillé) + +| Poste | Coût | Unité | Condition | +|---|---:|---|---| +| Maintenance accueil | 10 | coins / semaine | base | + +#### 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 | réputation | fréquentation \(\downarrow\) si incidents | + +##### Trajet Visiteurs vers/depuis les animaux (tableau détaillé) + +| Source | Destination | Déclencheur | Effet | +|---|---|---|---| +| Allées | Accueil | curiosité façade | détour faible | + +##### Trajet Visiteurs vers/depuis les boutiques (tableau détaillé) + +| Source | Destination | Déclencheur | Effet | +|---|---|---|---| +| Accueil | Boutique | stress/peur | détour fuite | + +##### Trajet Visiteurs vers/depuis la billeterie (entrées/sorties du zoo) (tableau détaillé) + +| Source | Destination | Déclencheur | Effet | +|---|---|---|---| +| Accueil | Sortie | quarantaine visible | sortie anticipée | + +### 6. Événements + +#### Événements du Jeu (tableau détaillé) + +| Event | Déclencheur | Payload | Effet | +|---|---|---|---| +| `ANIMAL_ARRIVAL` | camion | animal_id | slot OCCUPIED | +| `ANIMAL_READY` | timer | animal_id | status READY | +| `ANIMAL_PLACED` | placement | animal_id, coord | sortie slot | +| `RECEPTION_FULL` | livraison | - | message | +| `QUARANTINE_ALERT` | tirage | animal_id | avoidance visiteurs | + +#### Événements du Carte (tableau détaillé) + +| Event | Déclencheur | Effet | +|---|---|---| +| - | - | - | + +#### Événements du Zoo (tableau détaillé) + +| Event | Déclencheur | Effet | +|---|---|---| +| `OPEN_RECEPTION` | clic | bottom sheet | + +#### Événements du Ville / Visiteur (tableau détaillé) + +| Event | Déclencheur | Effet | +|---|---|---| +| `VISITOR_AVOIDS_QUARANTINE` | `QUARANTINE_ALERT` | reroute | + +#### Événements du Visiteur (tableau détaillé) + +| Event | Déclencheur | Effet | +|---|---|---| +| `VISITOR_SEES_QUEUE` | saturation | satisfaction - | + +#### Événements du Joueur (tableau détaillé) + +| Event | Déclencheur | Effet | +|---|---|---| +| `PLAYER_PLACES_ANIMAL_FROM_RECEPTION` | CTA | placement | + +### 7. Progression + +#### Tableau des Upgrades (tableau détaillé) + +| Niveau | Coût | Effet | Débloque | +|---|---:|---|---| +| 1 | 100 | 1 slot, 10 min | base | +| 4 | 800 | fertilité +10% (2j) | bonus calme | +| 7 | 6400 | instant, fertilité +25% (5j) | bonus confiant | + +### 8. Logique et Interfaces + +#### Pseudo-code Impacts (tableau détaillé) + +| Fonction | Entrées | Sorties | Notes | +|---|---|---|---| +| `getAcclimatizationDuration` | level | seconds | table | +| `updateReceptionSlots` | reception, now | reception | READY idempotent | +| `tryStartQuarantineIncident` | slot, risk | incident? | observable | +| `applyReceptionBonus` | animal, level | animal | temporaire | + +#### Messages d'Infos / Alerte (tableau détaillé) + +| ID | Niveau | Message | Condition | +|---|---|---|---| +| `ANIMAL_READY` | Info | "Un animal est prêt à rejoindre le zoo." | slot READY | +| `RECEPTION_FULL` | Warning | "Accueil saturé." | pas de slot libre | +| `PLACEMENT_ERROR` | Error | "Impossible de placer ici." | placement invalide | +| `QUARANTINE_ALERT` | Warning | "Alerte quarantaine." | incident | + +## Annexes UX/UI + +### 1. Expérience Utilisateur (UX) + +#### Description UX (tableau détaillé) + +| Parcours | But | Friction | Réduction clics | +|---|---|---|---| +| Voir arrivées | savoir quoi faire | dispersion | notif → deep-link accueil | +| Inspecter | vérifier stats | menus | clic slot direct | +| Placer | intégrer au zoo | erreurs | overlay OK/KO + CTA | + +#### Description UI (tableau détaillé) + +| Composant | Contenu | États | +|---|---|---| +| Bottom sheet accueil | liste slots | open/closed | +| Slot | portrait + barre | empty/occupied/ready | +| Badge état | sablier/! | visible au-dessus bâtiment | + +#### Emplacement (tableau détaillé) + +| Zone UI | Position | Notes | +|---|---|---| +| Carte zoo | bâtiment | sélection base sprite | +| HUD | notifications | deep-link | + +#### Intégration (tableau détaillé) + +| Intégration | Contrat | Notes | +|---|---|---| +| `camion.md` | livraison | pousse vers accueil | +| `enclos.md` | placement | validation | + +#### Navigation (tableau détaillé) + +| Action | Chemin | Résultat | +|---|---|---| +| Ouvrir accueil | clic bâtiment | slots | +| Aller depuis notif | clic notif | focus slot | +| Placer | CTA | mode placement | + +#### Événements (tableau détaillé) + +| Event UI | Déclencheur | Effet | +|---|---|---| +| `OPEN_RECEPTION` | clic | sheet | +| `CLICK_PLACE_FROM_RECEPTION` | CTA | placement | + +#### Assets Skinables + +##### Musiques (tableau détaillé) + +| Asset | Usage | Durée | Notes | +|---|---|---:|---| +| `ambience_stable_soft.mp3` | accueil | loop | discret | + +##### Sons (tableau détaillé) + +| Asset | Usage | Volume | +|---|---|---| +| `crate_drop.mp3` | arrivée | moyen | +| `ui_open.mp3` | ouvrir | bas | +| `ui_confirm_place.mp3` | placer | bas | + +##### Graphiques (tableau détaillé) + +| Asset | Usage | Contraintes | +|---|---|---| +| `badge_quarantine.png` | état | contraste | +| `reception_icon_ready.png` | prêt | lisible | + +##### Images (tableau détaillé) + +| Asset | Usage | +|---|---| +| `reception_building.png` | bâtiment | +| `placement_ghost_ok.png` | overlay | + +##### Vidéos (tableau détaillé) + +| Asset | Usage | Durée | +|---|---|---:| +| `delivery_short.webm` | notif | 2.0s | + +##### Animations (tableau détaillé) + +| Animation | Déclencheur | Notes | +|---|---|---| +| badge sablier | OCCUPIED | loop | +| badge ! vert | READY | loop | + +##### Couleurs (tableau détaillé) + +| Token | Valeur | Usage | +|---|---|---| +| `reception_amber` | #F39C12 | en cours | +| `reception_green` | #2ECC71 | prêt | +| `reception_red` | #E74C3C | erreur | + +##### Textes (tableau détaillé) + +| Clé | FR | EN | +|---|---|---| +| `reception.delivery_done` | Livraison effectuée | Delivery complete | +| `reception.ready` | Prêt | Ready | +| `reception.full` | Accueil saturé | Reception full | + +##### Formes (tableau détaillé) + +| Élément | Forme | Notes | +|---|---|---| +| Slot | rectangle arrondi | lisible | +| Badge état | rond | visible | diff --git a/docs/specs/agent_securite.md b/docs/specs/agent_securite.md index e72e15b..3a013a2 100644 --- a/docs/specs/agent_securite.md +++ b/docs/specs/agent_securite.md @@ -80,6 +80,16 @@ def update_security_agent(agent, world): * **Feedback :** Les visiteurs s'écartent sur son passage. * **Vue Isométrique :** Sprite 8 directions pour des déplacements fluides. +## Affichage contextuel (modules) +L’agent de sécurité sert de personnage contextuel lors des incidents d’ordre/sécurité. + +### Déclencheurs (exemples) +| Event | Condition | Effet UI personnage | +|---|---|---| +| `VANDALISM_ALERT` / `VANDALISM_DETECTED` | menace détectée | bulle “Incident” + CTA “Envoyer sécurité” | +| `ESCAPE_ALERT` / `ESCAPE_DETECTED` | évasion détectée | bulle “Évasion” + CTA focus zone | +| `ZONE_BLOCKED` | zone bloquée | message explicite + explication détour | + # Annexes UX/UI diff --git a/docs/specs/bebe_animal.md b/docs/specs/bebe_animal.md index 1b34718..da68162 100644 --- a/docs/specs/bebe_animal.md +++ b/docs/specs/bebe_animal.md @@ -250,18 +250,36 @@ function updateBaby(baby, context): | Sortie prématurée | Action | bébé en nurserie | drag vers case → confirm | bébé sur grille | `PLACEMENT_INVALID`, `BABY_TOO_FRAGILE` | | Mettre en vente | Action | bébé stable | “Vendre” → choisir mode | listing créé | `BABY_CRITICAL` | +## Personnages contextuels (événements & interaction) +- **Nurse (nurserie)** : voir `nurse.md` (triage, urgences, éclosion). +- **Soigneur** : voir `soigneur.md` (soins santé, maladies, stabilisation globale). + +### Affichage +La nurse est le personnage contextuel principal des actions “bébé” (éclosion, sortie prématurée, danger). Le soigneur est affiché lors des événements de santé (maladie, traitement, surcharge). + +### Déclencheurs (exemples) +| Event | Condition | Personnage | Effet UI | +|---|---|---|---| +| `BABY_CREATED` | naissance/éclosion | nurse | bulle “Bébé né” + CTA “Voir” | +| `BABY_CRITICAL` | danger critique | nurse | bulle “Urgence” + CTA “Soigner / Voir” | +| `ANIMAL_SICK` (bébé) | état maladie | soigneur | bulle “Maladie détectée” + CTA “Appeler soigneur” | +| `ANIMAL_HEALED` (bébé) | fin soin | soigneur | message fin intervention | + +### Skins & thèmes +Rendu des personnages : `theme.md` + skins via `inventaire_skins.md` (si skins de staff). + ## Annexes Techniques ### 1. Données et États (tableau détaillé) | Donnée / État | Type | Exemple | Source | Contraintes | |---|---|---|---|---| -| `animal_id` | uuid_v4 | `...` | DB | identifiant stable | +| `animal_id` | uuid_v4 | `uuid_v4` | DB | identifiant stable | | `species_id` | string | `PANDA` | DB | enum espèces | | `is_baby` | boolean | true | DB | vrai jusqu’à transition adulte | | `growth_progress` | float | 42.5 | calcul/DB | clamp 0..100 | | `growth_stage` | string | `juvenile` | calcul | dérivé de `growth_progress` | -| `nurserie_id` | uuid_v4 \| null | `...` | DB | null si sur grille | +| `nurserie_id` | uuid_v4 \| null | `uuid_v4` | DB | null si sur grille | | `position.iso_x` | int \| null | 120 | DB | requis si sur grille | | `position.iso_y` | int \| null | 88 | DB | requis si sur grille | | `render.z_index` | int | 12088 | calcul | tri profondeur (iso) | diff --git a/docs/specs/billeterie.md b/docs/specs/billeterie.md index 58ea779..cc9e777 100644 --- a/docs/specs/billeterie.md +++ b/docs/specs/billeterie.md @@ -121,3 +121,500 @@ def process_entry(zoo): ### Vue Isométrique - **File d'attente** : Afficher physiquement les sprites des visiteurs qui attendent devant le guichet. - **Portiques** : Animation d'ouverture/fermeture des barrières. + +## Personnage contextuel (événements & interaction) +Voir `guichetiere.md`. + +### Affichage +La guichetière s’affiche lorsque : +- la billetterie est **actionnée** (clic panneau, upgrade, consultation stats) ; +- un **événement** d’entrée survient (saturation, file longue, arrivée VIP). + +### Déclencheurs (exemples) +| Event | Condition | Effet UI personnage | +|---|---|---| +| `CLICK_BILLETERIE` | clic bâtiment | portrait + synthèse (prix, capacité, file) | +| `ZOO_FULL` | capacité atteinte | bulle “Zoo complet” + CTA “Améliorer billetterie” | +| `QUEUE_LONG` | file > seuil | bulle “File longue” + CTA “Voir billetterie” | +| `VIP_BUS` | arrivée VIP | bulle “Bus VIP” + CTA “Voir entrée” | + +### Skins & thèmes +Uniforme et guichet suivent `theme.md` ; variantes éventuelles via `inventaire_skins.md`. + +## Définition + +| Champ | Valeur | +|---|---| +| Concept | Bâtiment “billeterie” : point unique d’entrée/sortie des visiteurs et point de monétisation “tickets”. | +| Rôle | Transformer l’attractivité (ville → zoo) en entrées contrôlées (capacité/queue) et en revenus (prix ticket), avec signaux visibles (file, portiques, saturation). | +| Portée | Une instance fixe sur la carte zoo, connectée au réseau de chemins, agissant comme spawn/despawn visiteurs. | +| Contrainte | Aucun tracking externe/analytics ; flux et revenus calculés à la volée (lazy update), sans cache/mémorisation ; saturation doit produire message + event (pas silencieux). | + +## Fonctions (tableau détaillé) + +| Fonction | Déclencheur | Entrées | Sorties | Règles | Observabilité | +|---|---|---|---|---|---| +| Ouvrir panneau billeterie | clic bâtiment | `ticket_booth_id` | UI stats | montre prix/capacité/queue/revenus jour | Event `CLICK_BILLETERIE` | +| Calculer demandes d’entrée | tick logique | attractivité, villes, saison | `potential_visitors` | dépend distance ville + attractivité zoo | Event `VISITOR_DEMAND_COMPUTED` | +| Alimenter file | tick logique | `potential_visitors` | `current_queue_length` | clamp ≥ 0 | Event `QUEUE_UPDATED` | +| Convertir file en entrées | tick logique | level, queue | `actual_entries` | limité par vitesse guichet et capacité zoo | Event `VISITOR_ENTERED` | +| Encaisser ticket | entrée | ticket_price | coins + | atomicité par visiteur entré | Event `TICKET_SOLD` | +| Bloquer si zoo complet | capacité atteinte | `current_visitors` | entrée 0 | déclenche alerte + évaporation file (visiteurs partent) | Event `ZOO_FULL` | +| Gérer bus VIP | event | multiplicateur | pic entrées | bus si condition (réputation/ville riche) | Event `VIP_BUS` | +| Mesurer impatience | queue longue | temps attente | départs | si attente > seuil, départs + malus réputation léger | Event `QUEUE_LONG` | + +## Icone de base + +| Élément | Spécification | +|---|---| +| Représentation | Guichet + ticket + portique | +| Couleur dominante | Bleu/rouge (signalétique), or (coins) | +| Variantes | `billeterie_lvl_{1..7}_dir_{N,E,S,W}.png`, `icon_ticket_booth.png` | +| États | `open`, `busy` (queue), `full` (zoo complet), `vip_bus` (arrivée) | + +## Interactions (tableau détaillé) + +| Interaction | Type | Préconditions | Étapes UI | Résultat | Erreurs / Messages | +|---|---|---|---|---|---| +| Consulter stats | Consultation | - | clic billeterie | panneau stats | - | +| Upgrader | Action | coins ok | panneau → “Améliorer” | level +1 | `NOT_ENOUGH_COINS` | +| Voir file | Consultation | file > 0 | survol bâtiment | tooltip “X en attente” | - | +| Aller à la saturation | Navigation | `ZOO_FULL` | clic notif | focus billeterie | - | +| Forcer fermeture | Action (option future) | mode maintenance | toggle | entrées stoppées | `MAINTENANCE_REQUIRED` | + +## Annexes Techniques + +### 1. Données et États (tableau détaillé) + +| Donnée / État | Type | Exemple | Source | Contraintes | +|---|---|---|---|---| +| `id` | uuid_v4 | `uuid_v4` | DB | - | +| `type` | string | `ticket_booth` | DB | constant | +| `level` | int | 3 | DB | 1..7 | +| `position.x` | int | 1 | DB | grid | +| `position.y` | int | 1 | DB | grid | +| `stats.total_entries` | int | 1280 | DB | cumul | +| `stats.daily_revenue` | int | 420 | DB | reset journalier in-game | +| `stats.current_queue_length` | int | 18 | DB/calcul | clamp ≥ 0 | +| `entry_log[].timestamp` | timestamp | - | DB | UTC | +| `entry_log[].visitor_count` | int | 5 | DB | batch | +| `entry_log[].revenue` | int | 50 | DB | batch | +| `iso_x` | int | 120 | DB/calcul | rendu | +| `iso_y` | int | 88 | DB/calcul | rendu | +| `z_index` | int | 12088 | calcul | profondeur | + +#### Caractéristiques Initiales (tableau détaillé) + +| Caractéristique | Valeur initiale | Unité | Notes | +|---|---:|---|---| +| Prix ticket (lvl1) | 10 | coins | base | +| Capacité max (lvl1) | 20 | visiteurs | base | +| Vitesse guichet (lvl1) | 2 | visiteurs/tick | file | +| Seuil queue longue | 25 | visiteurs | message + départs | + +#### Scores Initiaux (tableau détaillé) + +| Score | Valeur initiale | Plage | Impact | +|---|---:|---|---| +| Satisfaction d’entrée | 50 | 0..100 | queue longue la baisse | +| Taux départ file | 0% | 0..100% | impatience | + +### 2. Cycles de Vie et Apparition (tableau détaillé) + +| Phase | Déclencheur | Entrées | Sorties | Invariants | +|---|---|---|---|---| +| Apparition | création zoo | - | bâtiment présent | fixe | +| Fonctionnement | zoo ouvert | attractivité | entrées | capacité respectée | +| Saturation | zoo plein | - | entrées stoppées | alerte obligatoire | +| Upgrade | action joueur | coins | level ↑ | monotone | + +#### Conditions d'Apparition (tableau détaillé) + +| Condition | Seuil | Opérateur | Résultat | +|---|---:|---|---| +| Zoo créé | true | est | billeterie placée | + +#### Conditions de Disparition (tableau détaillé) + +| Condition | Seuil | Opérateur | Résultat | +|---|---:|---|---| +| - | - | - | bâtiment persistant | + +#### Hérédité (tableau détaillé) + +| Élément | Hérité | Règle | +|---|---|---| +| Niveau | Oui | persiste | +| Statistiques | Oui | logs conservés, pas d’analytics | + +### 3. Impacts Environnementaux + +#### Impact Température (tableau détaillé) + +| Condition | Effet billeterie | Notes | +|---|---|---| +| Canicule | flux -10% | visiteurs évitent attente au soleil | +| Froid extrême | flux -15% | sortie plus rapide | + +#### Impact Milieu (Biome) (tableau détaillé) + +| Biome | Effet | Notes | +|---|---|---| +| Proche océan (frais) | impatience - | queue tolérée | +| Boue autour entrée | impatience + | pénalise | + +#### Impact Saisons (tableau détaillé) + +| Saison | Effet | Notes | +|---|---|---| +| Été | demande +20% | vacances | +| Hiver | demande -30% | froid | + +#### Impact Heure / Jour-Nuit (tableau détaillé) + +| Période | Effet | Notes | +|---|---|---| +| Matin | pics d’entrée | 9h-12h | +| Soir | pics de sortie | 17h-19h | + +### 4. Impacts Biologiques et Sociaux + +#### Impact Reproduction (tableau détaillé) + +| Facteur | Effet sur taux | Condition | +|---|---|---| +| Bébés visibles | satisfaction entrée +5 | marketing “naissances” | + +#### Impact Mort (tableau détaillé) + +| Cas | Effet | Condition | +|---|---|---| +| Incident visible à l’entrée | flux -40% | pendant 1 jour in-game | + +#### Impact Nourriture (tableau détaillé) + +| Ressource | Effet | Condition | +|---|---|---| +| Stand boisson proche | impatience - | file longue | + +#### Impact Attractivité(Visiteurs (tableau détaillé) + +| Action/État | Gain | Rayon | Notes | +|---|---:|---:|---| +| Entrée fluide | +5 | 8 cases | file courte | +| File longue | -10 | 8 cases | visiteurs partent | + +#### Impact Attractivité Animaux) (tableau détaillé) + +| Action/État | Effet animaux | Condition | +|---|---|---| +| Foule bruyante | stress + | enclos proche entrée | + +#### Impact Valeur (tableau détaillé) + +| Facteur | Variation | Condition | +|---|---:|---| +| Upgrade billeterie | + | valeur zoo | capacité | + +### 5. Impacts Logistiques et Économiques + +#### Vitesse (Camion) (tableau détaillé) + +| Paramètre | Effet | Condition | +|---|---|---| +| Bus VIP | entrées batch | event `VIP_BUS` | + +#### Vitesse (Nurserie) (tableau détaillé) + +| Paramètre | Effet | Condition | +|---|---|---| +| Naissances annoncées | demande + | saison | + +#### Vitesse (Accueil) (tableau détaillé) + +| Paramètre | Effet | Condition | +|---|---|---| +| Nouveaux animaux placés près entrée | intérêt + | visiteurs | + +#### Vitesse (Recherche) (tableau détaillé) + +| Paramètre | Effet | Condition | +|---|---|---| +| Marketing recherche | demande + | upgrade futur | + +#### Vitesse (Labo) (tableau détaillé) + +| Paramètre | Effet | Condition | +|---|---|---| +| Offre rare | pics | annonce | + +#### Vitesse (Visite) (tableau détaillé) + +| Paramètre | Effet | Condition | +|---|---|---| +| Portiques auto | entrées/tick + | level élevé | + +#### Dépenses (Billeterie) (tableau détaillé) + +| Poste | Coût | Unité | Condition | +|---|---:|---|---| +| Impression tickets | 100 | $/semaine | lore | +| Maintenance portiques | 20 | coins/semaine | level ≥ 3 | + +#### Dépenses (Boutiques) (tableau détaillé) + +| Poste | Coût | Unité | Condition | +|---|---:|---|---| +| Signalétique | 10 | coins/semaine | esthétique | + +#### Dépenses (Visiteurs) (tableau détaillé) + +| Poste | Coût | Unité | Condition | +|---|---:|---|---| +| Perte opportunité | ticket non vendu | coins | queue trop longue | + +#### Dépenses (Employés) (tableau détaillé) + +| Poste | Coût | Unité | Condition | +|---|---:|---|---| +| Agent accueil | 1500 | $/mois | 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 | +|---|---:|---|---| +| Vitrine bébés | 50 | coins/semaine | option | + +#### Dépenses (Nourriture) (tableau détaillé) + +| Poste | Coût | Unité | Condition | +|---|---:|---|---| +| Eau file d’attente | 5 | coins/jour | été | + +#### Dépenses (Acceuil des animaux) (tableau détaillé) + +| Poste | Coût | Unité | Condition | +|---|---:|---|---| +| Signal “nouvel animal” | 5 | coins | panneau | + +#### Dépenses (Camion) (tableau détaillé) + +| Poste | Coût | Unité | Condition | +|---|---:|---|---| +| Bus touristes | 25 | coins/event | `VIP_BUS` | + +#### Trajet Visiteurs + +##### Trajet Visiteurs vers/depuis la ville (tableau détaillé) + +| Source | Destination | Déclencheur | Effet | +|---|---|---|---| +| Ville | Billeterie | demande calculée | spawn file | + +##### Trajet Visiteurs vers/depuis les animaux (tableau détaillé) + +| Source | Destination | Déclencheur | Effet | +|---|---|---|---| +| Billeterie | Enclos | plan visite | route via chemins | + +##### Trajet Visiteurs vers/depuis les boutiques (tableau détaillé) + +| Source | Destination | Déclencheur | Effet | +|---|---|---|---| +| Enclos | Boutique | faim/soif | détour | + +##### Trajet Visiteurs vers/depuis la billeterie (entrées/sorties du zoo) (tableau détaillé) + +| Source | Destination | Déclencheur | Effet | +|---|---|---|---| +| Zoo | Billeterie | fin visite | sortie | + +### 6. Événements + +#### Événements du Jeu (tableau détaillé) + +| Event | Déclencheur | Payload | Effet | +|---|---|---|---| +| `TICKET_SOLD` | entrée | price | coins + | +| `ZOO_FULL` | capacité | current/max | stop entrées | +| `QUEUE_LONG` | queue > seuil | length | départs + | +| `VIP_BUS` | event | count | entrées batch | + +#### Événements du Carte (tableau détaillé) + +| Event | Déclencheur | Effet | +|---|---|---| +| `FOCUS_TICKET_BOOTH` | clic notif | caméra | + +#### Événements du Zoo (tableau détaillé) + +| Event | Déclencheur | Effet | +|---|---|---| +| `VISITOR_SPAWNED_AT_ENTRY` | entrée | spawn point | + +#### Événements du Ville / Visiteur (tableau détaillé) + +| Event | Déclencheur | Effet | +|---|---|---| +| `CITY_FLOW_DISPATCHED` | calcul | demande | + +#### Événements du Visiteur (tableau détaillé) + +| Event | Déclencheur | Effet | +|---|---|---| +| `VISITOR_LEAVES_QUEUE` | impatience | départ | + +#### Événements du Joueur (tableau détaillé) + +| Event | Déclencheur | Effet | +|---|---|---| +| `PLAYER_UPGRADES_TICKET_BOOTH` | UI | stats maj | + +### 7. Progression + +#### Tableau des Upgrades (tableau détaillé) + +| Niveau | Coût | Effet | Débloque | +|---|---:|---|---| +| 3 | 400 | portiques visibles + vitesse guichet | anim porte | +| 5 | 1600 | file plus courte (vitesse) | satisfaction + | +| 7 | 6400 | capacité 300 + prix 35 | “grand hall” | + +### 8. Logique et Interfaces + +#### Pseudo-code Impacts (tableau détaillé) + +| Fonction | Entrées | Sorties | Notes | +|---|---|---|---| +| `getEntrySpeed` | level | int | visiteurs/tick | +| `computePotentialVisitors` | zoo, villes, saison | int | à la volée | +| `processEntry` | zoo, booth | int | encaisse + spawn | + +#### Messages d'Infos / Alerte (tableau détaillé) + +| ID | Niveau | Message | Condition | +|---|---|---|---| +| `ZOO_FULL` | Alerte | "Le zoo est complet." | capacité atteinte | +| `QUEUE_LONG` | Warning | "La file d'attente est trop longue." | queue > seuil | +| `VIP_BUS` | Info | "Un bus de touristes arrive." | event | + +## Annexes UX/UI + +### 1. Expérience Utilisateur (UX) + +#### Description UX (tableau détaillé) + +| Parcours | But | Friction | Réduction clics | +|---|---|---|---| +| Voir revenus | décider upgrade | stats dispersées | panneau unique billeterie | +| Réagir à saturation | éviter pertes | notif | clic notif → focus | + +#### Description UI (tableau détaillé) + +| Composant | Contenu | États | +|---|---|---| +| Panneau billeterie | prix/capacité/revenus | normal/full | +| File visuelle | sprites visiteurs | courte/longue | +| Badge bus VIP | icône bus | visible | + +#### Emplacement (tableau détaillé) + +| Zone UI | Position | Notes | +|---|---|---| +| Carte zoo | entrée | file visible | +| HUD | compteur coins | feedback pièces | + +#### Intégration (tableau détaillé) + +| Intégration | Contrat | Notes | +|---|---|---| +| `visiteur.md` | spawn/despawn | flux | +| `ville.md` | demande | distance | + +#### Navigation (tableau détaillé) + +| Action | Chemin | Résultat | +|---|---|---| +| Ouvrir stats | clic bâtiment | panneau | +| Upgrader | panneau → bouton | level ↑ | +| Focus | clic notif | caméra | + +#### Événements (tableau détaillé) + +| Event UI | Déclencheur | Effet | +|---|---|---| +| `CLICK_BILLETERIE` | clic | ouvre | +| `CLICK_UPGRADE_TICKET_BOOTH` | bouton | upgrade | + +#### Assets Skinables + +##### Musiques (tableau détaillé) + +| Asset | Usage | Durée | Notes | +|---|---|---:|---| +| `ticket_booth_crowd_loop.mp3` | proximité entrée | loop | discret | + +##### Sons (tableau détaillé) + +| Asset | Usage | Volume | +|---|---|---| +| `gate_open.mp3` | portiques | bas | +| `coin_jingle.mp3` | ticket vendu | bas | +| `ui_denied.mp3` | zoo plein | moyen | + +##### Graphiques (tableau détaillé) + +| Asset | Usage | Contraintes | +|---|---|---| +| `ticket_booth_ui_panel.png` | panneau | scalable | +| `queue_indicator.png` | badge | lisible | +| `vip_bus_icon.png` | bus | contraste | + +##### Images (tableau détaillé) + +| Asset | Usage | +|---|---| +| `billeterie_lvl1.png` | bâtiment | +| `billeterie_lvl7.png` | bâtiment | + +##### Vidéos (tableau détaillé) + +| Asset | Usage | Durée | +|---|---|---:| +| `ticket_gate_cycle.webm` | portiques | 1.0s | + +##### Animations (tableau détaillé) + +| Animation | Déclencheur | Notes | +|---|---|---| +| pièces qui volent | ticket vendu | 0.6s | +| bounce badge | queue longue | 0.4s | + +##### Couleurs (tableau détaillé) + +| Token | Valeur | Usage | +|---|---|---| +| `ticket_blue` | #1976D2 | signalétique | +| `ticket_gold` | #D4AF37 | revenus | +| `ticket_alert_red` | #D32F2F | saturation | + +##### Textes (tableau détaillé) + +| Clé | FR | EN | +|---|---|---| +| `ticket_booth.title` | Billeterie | Ticket booth | +| `ticket_booth.capacity` | Capacité | Capacity | +| `ticket_booth.queue_long` | File trop longue. | Queue too long. | + +##### Formes (tableau détaillé) + +| Élément | Forme | Notes | +|---|---|---| +| Panneau | rectangle arrondi | lisible | +| Badge | rond | constant | diff --git a/docs/specs/boutique.md b/docs/specs/boutique.md index 94e5743..6900b62 100644 --- a/docs/specs/boutique.md +++ b/docs/specs/boutique.md @@ -144,6 +144,25 @@ function processShop(shop, visitors): | `SHOP_FULL` | Warning | "Boutique pleine ! Des clients partent." | | `SHOP_PROMO` | Info | "Soldes lancées ! Affluence +20%." | +## Personnage contextuel (événements & interaction) +Voir `vendeur.md`. + +### Affichage +Le vendeur s’affiche lorsque : +- la boutique est **actionnée** (clic panneau stats, upgrade, skin de boutique) ; +- un **événement** de boutique survient (vente, surcharge, promo). + +### Déclencheurs (exemples) +| Event | Condition | Effet UI personnage | +|---|---|---| +| `OPEN_SHOP` | clic boutique | portrait + stats + CTA | +| `SALE_MADE` | vente | feedback “caisse” + pièce/FX | +| `SHOP_FULL` | capacité atteinte | bulle “Surcharge” + CTA “Améliorer / Ajouter boutique” | +| `SHOP_PROMO` | promo active | bulle “Promo” + détails (si module) | + +### Skins & thèmes +Uniforme et comptoir suivent `theme.md`, avec skins de boutique via `inventaire_skins.md`. + # Annexes UX/UI ## 0. Direction Artistique & Vue @@ -213,3 +232,483 @@ function processShop(shop, visitors): - **Couleurs** : Bleu (Blueprint). - **Textes** : "Construction". - **Formes** : Grille de placement. + +## Définition + +| Champ | Valeur | +|---|---| +| Concept | Bâtiment “boutique” : point de vente in-zoo (souvenirs/food/boissons) qui convertit les besoins des visiteurs en revenus. | +| Rôle | Augmenter la rétention et la satisfaction via la résolution des besoins (faim/soif/cadeau), et créer des micro-flux (file, service, rupture). | +| Portée | Une instance de bâtiment sur carte zoo, avec paramètres (capacité, vitesse service, catalogue, skin). | +| Contrainte | Pas d’analytics ; revenus calculés à la volée à partir des interactions visiteurs ; pas de fallback silencieux (rupture/plein => message + event). | + +## Fonctions (tableau détaillé) + +| Fonction | Déclencheur | Entrées | Sorties | Règles | Observabilité | +|---|---|---|---|---|---| +| Construire boutique | mode build | coord, type boutique | bâtiment créé | case vide requise | Event `BUILD_SHOP` | +| Ouvrir stats | clic bâtiment | `shop_id` | UI stats | revenus totaux + clients | Event `OPEN_SHOP` | +| Attirer visiteurs | besoin/curiosité | visitor, rayon | target set | poids pathfinding élevé si besoin > seuil | Event `VISITOR_TARGETS_SHOP` | +| Servir visiteur | arrivée en file | visitor, stock | revenue + satisfaction | service limité par capacité + vitesse | Event `SALE_MADE` | +| Gérer file | dépassement capacité | queue length | impatience | si queue > seuil -> départ + malus | Event `SHOP_FULL` | +| Adapter produits au climat | temp/saison | météo, saison | mod ventes | canicule: eau + ; froid: chocolat + | Event `SHOP_DEMAND_MOD_CHANGED` | +| Appliquer skin biome | skin, biome | ids | bonus | +10% ventes si match | Event `SHOP_THEME_MATCH_BONUS` | +| Réapprovisionner | tick économique | CA, ratio | stock + coût | coût = 10% du CA | Event `SHOP_RESTOCKED` | +| Rupture | stock=0 | - | fermeture temporaire | déclenche panneau “Rupture” | Event `SHOP_OUT_OF_STOCK` | + +## Icone de base + +| Élément | Spécification | +|---|---| +| Représentation | Boutique avec enseigne (cadeau/food) | +| Couleur dominante | Or (revenu) + couleur du type (rouge food, bleu boisson) | +| Variantes | `shop_gift_dir_{N,E,S,W}.png`, `shop_food_dir_{N,E,S,W}.png`, `shop_drink_dir_{N,E,S,W}.png` | +| États | `open`, `busy`, `full`, `out_of_stock`, `promo` | + +## Interactions (tableau détaillé) + +| Interaction | Type | Préconditions | Étapes UI | Résultat | Erreurs / Messages | +|---|---|---|---|---|---| +| Placer boutique | Action | case libre | sélectionner → placer | construction | `CELL_OCCUPIED` | +| Voir revenus | Consultation | boutique posée | clic | panneau stats | - | +| Upgrader | Action | coins ok | panneau → améliorer | level ↑ | `NOT_ENOUGH_COINS` | +| Voir file | Consultation | visiteurs proches | survol | tooltip file | - | +| Activer promo | Action (event) | condition event | clic toggle | affluence + | `PROMO_NOT_AVAILABLE` | + +## Annexes Techniques + +### 1. Données et États (tableau détaillé) + +| Donnée / État | Type | Exemple | Source | Contraintes | +|---|---|---|---|---| +| `id` | uuid_v4 | `uuid_v4` | DB | - | +| `type` | string | `shop` | DB | constant | +| `subtype` | string | `gift` | DB/config | `gift/food/drink` | +| `level` | int | 2 | DB | 1..7 | +| `position.x` | int | 10 | DB | grid | +| `position.y` | int | 12 | DB | grid | +| `stats.revenue_total` | int | 12500 | DB | cumul | +| `stats.visitors_served` | int | 840 | DB | cumul | +| `stock.units` | int | 100 | DB | >=0 | +| `popularity` | int | 10 | calcul/DB | 0..100 | +| `capacity` | int | 5 | config | visitors simultanés | +| `service_seconds_per_visitor` | float | 5.0 | config | 1..10 | +| `attractiveness` | int | 10 | config | poids target | +| `skin_id` | string | `shop_wood_forest` | DB | cosmétique | +| `iso_x` | int | 120 | DB/calcul | rendu | +| `iso_y` | int | 88 | DB/calcul | rendu | +| `z_index` | int | 12088 | calcul | profondeur | + +#### Caractéristiques Initiales (tableau détaillé) + +| Caractéristique | Valeur initiale | Unité | Notes | +|---|---:|---|---| +| Revenu / visiteur | 15 | coins | level 1 | +| Capacité | 5 | visiteurs | level 1 | +| Vitesse service | 5 | s/visiteur | level 1 | +| Rayon attraction | 2 | cases | level 1 | + +#### Scores Initiaux (tableau détaillé) + +| Score | Valeur initiale | Plage | Impact | +|---|---:|---|---| +| Stock | 100 | 0..∞ | rupture possible | +| Popularité | 10 | 0..100 | mod conversion | + +### 2. Cycles de Vie et Apparition (tableau détaillé) + +| Phase | Déclencheur | Entrées | Sorties | Invariants | +|---|---|---|---|---| +| Construction | joueur | coins + coord | bâtiment | case occupée | +| Service | visiteurs | besoins | revenus | capacité respectée | +| Réappro | tick | CA | stock + | coût 10% CA | +| Rupture | stock=0 | - | fermeture | observable | +| Upgrade | action | coins | level ↑ | monotone | + +#### Conditions d'Apparition (tableau détaillé) + +| Condition | Seuil | Opérateur | Résultat | +|---|---:|---|---| +| Construction | true | est | boutique posée | + +#### Conditions de Disparition (tableau détaillé) + +| Condition | Seuil | Opérateur | Résultat | +|---|---:|---|---| +| Destruction | true | est | remboursement 50% | + +#### Hérédité (tableau détaillé) + +| Élément | Hérité | Règle | +|---|---|---| +| Franchise | Oui | coût -10% si 5 identiques | +| Stats | Oui | cumul | + +### 3. Impacts Environnementaux + +#### Impact Température (tableau détaillé) + +| Condition | Effet boutique | Notes | +|---|---|---| +| > 30°C | eau +200% | canicule | +| < 5°C | chocolat +200% | froid | + +#### Impact Milieu (Biome) (tableau détaillé) + +| Biome | Effet | Notes | +|---|---|---| +| forêt + skin bois | ventes +10% | thème match | +| désert + skin oasis | ventes +10% | thème match | + +#### Impact Saisons (tableau détaillé) + +| Saison | Effet | Notes | +|---|---|---| +| Été | ventes boisson +20% | règle | +| Hiver | ventes cadeaux +10% | règle | + +#### Impact Heure / Jour-Nuit (tableau détaillé) + +| Période | Effet | Notes | +|---|---|---| +| 12h-14h | demande food ++ | pic | +| Nuit | fermé | 0 ventes | + +### 4. Impacts Biologiques et Sociaux + +#### Impact Reproduction (tableau détaillé) + +| Facteur | Effet sur taux | Condition | +|---|---|---| +| Naissance rare | ventes peluche x2 | “espèce du moment” | + +#### Impact Mort (tableau détaillé) + +| Cas | Effet | Condition | +|---|---|---| +| Mort récente proche | ventes -20% | ambiance | + +#### Impact Nourriture (tableau détaillé) + +| Ressource | Effet | Condition | +|---|---|---| +| Concurrence < 3 cases | ventes food -10% | partage | + +#### Impact Attractivité(Visiteurs (tableau détaillé) + +| Action/État | Gain | Rayon | Notes | +|---|---:|---:|---| +| Boutique level 7 | + | 10 cases | centre commercial | +| Rupture stock | - | 6 cases | frustration | + +#### Impact Attractivité Animaux) (tableau détaillé) + +| Action/État | Effet animaux | Condition | +|---|---|---| +| Odeurs food | stress + | espèces sensibles | + +#### Impact Valeur (tableau détaillé) + +| Facteur | Variation | Condition | +|---|---:|---| +| Revente | 50% + upgrades | destruction | + +### 5. Impacts Logistiques et Économiques + +#### Vitesse (Camion) (tableau détaillé) + +| Paramètre | Effet | Condition | +|---|---|---| +| Livraison stock | stock + | si feature livraison | + +#### Vitesse (Nurserie) (tableau détaillé) + +| Paramètre | Effet | Condition | +|---|---|---| +| Peluches bébé | ventes + | bébés visibles | + +#### Vitesse (Accueil) (tableau détaillé) + +| Paramètre | Effet | Condition | +|---|---|---| +| Nouvel animal rare | promo | event | + +#### Vitesse (Recherche) (tableau détaillé) + +| Paramètre | Effet | Condition | +|---|---|---| +| Tech caisse auto | service 1s | level 7 | + +#### Vitesse (Labo) (tableau détaillé) + +| Paramètre | Effet | Condition | +|---|---|---| +| Produit “science” | panier moyen + | zone labo | + +#### Vitesse (Visite) (tableau détaillé) + +| Paramètre | Effet | Condition | +|---|---|---| +| File d’attente | temps boutique + | capacité limitée | + +#### Dépenses (Billeterie) (tableau détaillé) + +| Poste | Coût | Unité | Condition | +|---|---:|---|---| +| - | 1 | coins | signalétique (conservée) | + +#### Dépenses (Boutiques) (tableau détaillé) + +| Poste | Coût | Unité | Condition | +|---|---:|---|---| +| Réappro | 10% CA | coins | automatique | + +#### Dépenses (Visiteurs) (tableau détaillé) + +| Poste | Coût | Unité | Condition | +|---|---:|---|---| +| Temps perdu file | satisfaction - | points | queue | + +#### Dépenses (Employés) (tableau détaillé) + +| Poste | Coût | Unité | Condition | +|---|---:|---|---| +| Caissier (lore) | 1800 | $/mois | level < 7 | + +#### 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 | +|---|---:|---|---| +| Peluche naissance | 2 | coins | production | + +#### Dépenses (Nourriture) (tableau détaillé) + +| Poste | Coût | Unité | Condition | +|---|---:|---|---| +| Matières food | 2 | coins/vente | marge | + +#### Dépenses (Acceuil des animaux) (tableau détaillé) + +| Poste | Coût | Unité | Condition | +|---|---:|---|---| +| Cadeau “nouvel arrivant” | 1 | coins | souvenir | + +#### Dépenses (Camion) (tableau détaillé) + +| Poste | Coût | Unité | Condition | +|---|---:|---|---| +| Livraison premium | 5 | coins | option | + +#### Trajet Visiteurs + +##### Trajet Visiteurs vers/depuis la ville (tableau détaillé) + +| Source | Destination | Déclencheur | Effet | +|---|---|---|---| +| Ville | Zoo | entrée | besoins init 0 | + +##### Trajet Visiteurs vers/depuis les animaux (tableau détaillé) + +| Source | Destination | Déclencheur | Effet | +|---|---|---|---| +| Enclos | Boutique | faim/soif > 80 | target | + +##### Trajet Visiteurs vers/depuis les boutiques (tableau détaillé) + +| Source | Destination | Déclencheur | Effet | +|---|---|---|---| +| Boutique | Enclos | besoins résolus | continue visite | + +##### Trajet Visiteurs vers/depuis la billeterie (entrées/sorties du zoo) (tableau détaillé) + +| Source | Destination | Déclencheur | Effet | +|---|---|---|---| +| Boutique | Sortie | budget 0 | départ | + +### 6. Événements + +#### Événements du Jeu (tableau détaillé) + +| Event | Déclencheur | Payload | Effet | +|---|---|---|---| +| `SALE_MADE` | service | revenue | coins + | +| `SHOP_FULL` | queue | length | départs | +| `SHOP_OUT_OF_STOCK` | stock | units | fermeture | +| `SHOP_RESTOCKED` | tick | cost | stock + | + +#### Événements du Carte (tableau détaillé) + +| Event | Déclencheur | Effet | +|---|---|---| +| `FOCUS_SHOP` | clic | caméra | + +#### Événements du Zoo (tableau détaillé) + +| Event | Déclencheur | Effet | +|---|---|---| +| `VISITOR_BUYS_ITEM` | transaction | satisfaction + | + +#### Événements du Ville / Visiteur (tableau détaillé) + +| Event | Déclencheur | Effet | +|---|---|---| +| `WEATHER_HEATWAVE` | météo | eau ++ | + +#### Événements du Visiteur (tableau détaillé) + +| Event | Déclencheur | Effet | +|---|---|---| +| `VISITOR_LEAVES_SHOP_QUEUE` | impatience | satisfaction - | + +#### Événements du Joueur (tableau détaillé) + +| Event | Déclencheur | Effet | +|---|---|---| +| `PLAYER_UPGRADES_SHOP` | UI | params + | + +### 7. Progression + +#### Tableau des Upgrades (tableau détaillé) + +| Niveau | Coût | Effet | Débloque | +|---|---:|---|---| +| 4 | 340 | capacité 18 + service plus rapide | file réduite | +| 7 | 1150 | 50 capacité + caisses auto | 1s/visiteur | + +### 8. Logique et Interfaces + +#### Pseudo-code Impacts (tableau détaillé) + +| Fonction | Entrées | Sorties | Notes | +|---|---|---|---| +| `computeSeasonDemandMod` | season, temp | float | eau/glaces/chocolat | +| `serveVisitor` | shop, visitor | revenue | résout besoins | +| `restockIfNeeded` | shop, CA | shop | coût 10% CA | + +#### Messages d'Infos / Alerte (tableau détaillé) + +| ID | Niveau | Message | Condition | +|---|---|---|---| +| `SHOP_FULL` | Warning | "Boutique pleine." | queue > cap | +| `SHOP_OUT_OF_STOCK` | Warning | "Rupture de stock." | stock=0 | +| `SALE_MADE` | Info | "Vente effectuée." | service | + +## Annexes UX/UI + +### 1. Expérience Utilisateur (UX) + +#### Description UX (tableau détaillé) + +| Parcours | But | Friction | Réduction clics | +|---|---|---|---| +| Construire | générer revenus | placement | mode construction direct | +| Lire stats | décider upgrade | menus | clic bâtiment | + +#### Description UI (tableau détaillé) + +| Composant | Contenu | États | +|---|---|---| +| Popup coins | +XX | burst | feedback | +| Panneau stats | total + served | open/closed | +| Badge rupture | icône | visible | + +#### Emplacement (tableau détaillé) + +| Zone UI | Position | Notes | +|---|---|---| +| Carte zoo | sur case | sélection base sprite | +| HUD | compteur | pièces volantes | + +#### Intégration (tableau détaillé) + +| Intégration | Contrat | Notes | +|---|---|---| +| `visiteur.md` | besoins | faim/soif | +| `chemin.md` | pathfinding | poids boutique | + +#### Navigation (tableau détaillé) + +| Action | Chemin | Résultat | +|---|---|---| +| Ouvrir stats | clic | panneau | +| Upgrader | panneau → CTA | level ↑ | + +#### Événements (tableau détaillé) + +| Event UI | Déclencheur | Effet | +|---|---|---| +| `OPEN_SHOP` | clic | panneau | +| `BUILD_SHOP` | build | placement | + +#### Assets Skinables + +##### Musiques (tableau détaillé) + +| Asset | Usage | Durée | Notes | +|---|---|---:|---| +| `shop_muzak_loop.mp3` | proximité boutique | loop | discret | + +##### Sons (tableau détaillé) + +| Asset | Usage | Volume | +|---|---|---| +| `cash_register.mp3` | vente | bas | +| `coin_jingle.mp3` | revenue | bas | +| `ui_open.mp3` | panneau | bas | + +##### Graphiques (tableau détaillé) + +| Asset | Usage | Contraintes | +|---|---|---| +| `shop_coin_popup.png` | popup | lisible | +| `shop_queue_badge.png` | queue | contraste | +| `shop_out_of_stock_badge.png` | rupture | rouge | + +##### Images (tableau détaillé) + +| Asset | Usage | +|---|---| +| `shop_blueprint.png` | construction | +| `shop_product_icons.png` | UI | + +##### Vidéos (tableau détaillé) + +| Asset | Usage | Durée | +|---|---|---:| +| `shop_sales_bars.webm` | stats | 1.0s | + +##### Animations (tableau détaillé) + +| Animation | Déclencheur | Notes | +|---|---|---| +| pièce monte | vente | 0.6s | +| porte ouvre/ferme | visiteur | 0.4s | + +##### Couleurs (tableau détaillé) + +| Token | Valeur | Usage | +|---|---|---| +| `shop_gold` | #FFD700 | revenus | +| `shop_profit_green` | #2E7D32 | stats | +| `shop_alert_red` | #D32F2F | rupture | + +##### Textes (tableau détaillé) + +| Clé | FR | EN | +|---|---|---| +| `shop.title` | Boutique | Shop | +| `shop.revenue` | Revenus | Revenue | +| `shop.out_of_stock` | Rupture de stock | Out of stock | + +##### Formes (tableau détaillé) + +| Élément | Forme | Notes | +|---|---|---| +| Popup | rectangle arrondi | lisible | +| Badge | rond | constant | diff --git a/docs/specs/camion.md b/docs/specs/camion.md index 2fe9ac1..781d7bd 100644 --- a/docs/specs/camion.md +++ b/docs/specs/camion.md @@ -231,3 +231,495 @@ function updateTruck(truck, deltaTime): - **Couleurs** : Rouge (Feux stop). - **Textes** : "Livraison effectuée". - **Formes** : Carré de stationnement. + +## Définition + +| Champ | Valeur | +|---|---| +| Concept | Unité de transport “Camion” : véhicule qui exécute des missions (achat/vente/transfert) entre sites (carte monde) et le zoo. | +| Rôle | Relier les transactions (enchères/achats/ventes) à une logistique observable (trajet, délais, incidents), et injecter le cargo dans `accueil_animaux` / `nurserie` selon le cas. | +| Portée | Entité persistante (par joueur/zoo) avec `level`, `status`, `cargo`, `target_site_id`. | +| Contrainte | ETA et trajectoire calculés à la volée, sans cache/mémorisation ; aucun fallback silencieux (cargo manquant => erreur + log). | + +## Fonctions (tableau détaillé) + +| Fonction | Déclencheur | Entrées | Sorties | Règles | Observabilité | +|---|---|---|---|---|---| +| Démarrer mission | achat/vente | `target_site_id`, cargo | status moving | refuse si déjà en mission | Event `TRUCK_DEPART` | +| Calculer durée | départ | distance, level | ETA | vitesse table par level + météo | Event `TRUCK_ETA_COMPUTED` | +| Déplacer sur carte | tick lazy | now, route | position | interpolation | Event `TRUCK_POSITION_UPDATED` | +| Appliquer stress cargo | tick | cargo, confort | fertilité/stress | perte fertilité/h selon level | Event `CARGO_STRESS_APPLIED` | +| Gérer incidents | tick | météo, entretien | delay | crevaison/panne explicités | Event `TRUCK_DELAYED` | +| Arriver au site | ETA atteint | - | status arrived | charge/décharge | Event `TRUCK_ARRIVED_SITE` | +| Retourner au zoo | fin opération | - | status moving_home | trajet retour | Event `TRUCK_RETURNING` | +| Décharger au zoo | arrivée | cargo | slot réception | adultes → `accueil_animaux`, œufs/bébés → `nurserie` (selon type) | Event `DELIVERY_COMPLETE` | +| Mini-jeu attente | clic camion | - | bonus léger | bonus borné, non obligatoire | Event `CLEAN_WINDSHIELD` | + +## Icone de base + +| Élément | Spécification | +|---|---| +| Représentation | Camion isométrique + flèche direction | +| Couleur dominante | Jaune/noir ou blanc | +| Variantes | `truck_lvl_{1..7}_dir_{N,E,S,W}.png` | +| États | `idle`, `moving`, `delayed`, `arrived`, `cargo_loaded` | + +## Interactions (tableau détaillé) + +| Interaction | Type | Préconditions | Étapes UI | Résultat | Erreurs / Messages | +|---|---|---|---|---|---| +| Envoyer en mission | Action | camion idle | achat → auto départ | mission lancée | `TRUCK_BUSY` | +| Suivre trajet | Consultation | mission active | clic icône | panel ETA | - | +| Ouvrir mini-jeu | Action | mission active | clic camion | modal mini-jeu | - | +| Voir arrivée | Consultation | mission finie | notif | focus cargo | - | + +## Personnages contextuels (événements & interaction) +Selon le contexte de la mission, le camion peut afficher un personnage contextuel : +- **Personnel d’accueil (déchargement au zoo)** : voir `personnel_accueil.md` (cargo adulte). +- **Nurse (déchargement vers nurserie)** : voir `nurse.md` (cargo œuf/bébé). +- **Laborantin (achat depuis le laboratoire)** : voir `laborantin.md` (refus/gating/validation). +- **Agent de sécurité (incident de trajet)** : voir `agent_securite.md` (retard/menace si la cause est “sécurité”). + +### Déclencheurs (exemples) +| Event | Condition | Personnage | Effet UI | +|---|---|---|---| +| `TRUCK_DEPART` | mission démarrée | (option UI) | état “en route” + destination | +| `TRUCK_DELAYED` | incident détecté | sécurité | bulle “Retard” + cause + CTA “Voir trajet” | +| `TRUCK_ARRIVE` / `DELIVERY_COMPLETE` | arrivée zoo | accueil ou nurse | bulle “Livraison effectuée” + deep-link vers `accueil_animaux`/`nurserie` selon cargo | +| `TRUCK_ARRIVED_SITE` | arrivée site | laborantin (si site labo) | bulle “Offre disponible” + CTA “Ouvrir labo” | + +### Skins & thèmes +Le rendu des personnages suit `theme.md` et `inventaire_skins.md` (uniformes + accessoires). Le camion lui-même reste skinable via `inventaire_skins.md`. + +## Annexes Techniques + +### 1. Données et États (tableau détaillé) + +| Donnée / État | Type | Exemple | Source | Contraintes | +|---|---|---|---|---| +| `id` | uuid_v4 | `uuid_v4` | DB | - | +| `owner_id` | uuid_v4 | `uuid_v4` | DB | - | +| `level` | int | 1 | DB | 1..7 | +| `status` | enum | `idle` | DB | `idle/moving_to_target/moving_home/delayed` | +| `cargo.type` | string \| null | `animal` | DB | null si vide | +| `cargo.id` | uuid_v4 \| null | `uuid_v4` | DB | - | +| `position.x` | float | 10.2 | calcul/DB | carte monde | +| `position.y` | float | 12.7 | calcul/DB | carte monde | +| `target_site_id` | uuid_v4 \| null | `uuid_v4` | DB | - | +| `iso_x` | int | 120 | DB/calcul | si rendu zoo | +| `iso_y` | int | 88 | DB/calcul | si rendu zoo | +| `z_index` | int | 12088 | calcul | profondeur | +| `maintenance.km_since_service` | float | 0 | DB | - | +| `timers.departed_at` | timestamp \| null | - | DB | UTC | +| `timers.eta_at` | timestamp \| null | - | calcul/DB | UTC | + +#### Caractéristiques Initiales (tableau détaillé) + +| Caractéristique | Valeur initiale | Unité | Notes | +|---|---:|---|---| +| Vitesse (lvl1) | 50 | km/h | simulé | +| Capacité | 1 | cargo | par camion | +| Confort | 0.0 | score | réduit stress | + +#### Scores Initiaux (tableau détaillé) + +| Score | Valeur initiale | Plage | Impact | +|---|---:|---|---| +| Kilométrage | 0 | 0..∞ | entretien | +| Retards cumulés | 0 | 0..∞ | info joueur | + +### 2. Cycles de Vie et Apparition (tableau détaillé) + +| Phase | Déclencheur | Entrées | Sorties | Invariants | +|---|---|---|---|---| +| Apparition | début jeu | - | camion idle | 1 camion min | +| Mission | achat/vente | cargo+site | moving | exclusif | +| Arrivée | ETA | - | arrived | décharge | +| Retour | fin op | - | moving_home | - | +| Idle | arrivée zoo | - | idle | cargo null | + +#### Conditions d'Apparition (tableau détaillé) + +| Condition | Seuil | Opérateur | Résultat | +|---|---:|---|---| +| Début partie | true | est | camion créé | + +#### Conditions de Disparition (tableau détaillé) + +| Condition | Seuil | Opérateur | Résultat | +|---|---:|---|---| +| - | - | - | camion persiste | + +#### Hérédité (tableau détaillé) + +| Élément | Hérité | Règle | +|---|---|---| +| Upgrades | Oui | persiste | +| Cargo | Non | mission-only | + +### 3. Impacts Environnementaux + +#### Impact Température (tableau détaillé) + +| Condition | Effet camion | Notes | +|---|---|---| +| > 40°C | vitesse -10% | surchauffe | +| < -10°C | démarrage +5s | gel | + +#### Impact Milieu (Biome) (tableau détaillé) + +| Biome | Effet camion | Notes | +|---|---|---| +| Sable | vitesse - | sans pneus | +| Terre | vitesse + | pneus adaptés | + +#### Impact Saisons (tableau détaillé) + +| Saison | Effet camion | Notes | +|---|---|---| +| Hiver | vitesse -20% | neige | +| Automne | vitesse -5% | boue | + +#### Impact Heure / Jour-Nuit (tableau détaillé) + +| Période | Effet camion | Notes | +|---|---|---| +| Nuit sans phares | vitesse -30% | prudence | +| Nuit avec phares | normal | level ≥ 2 | + +### 4. Impacts Biologiques et Sociaux + +#### Impact Reproduction (tableau détaillé) + +| Facteur | Effet sur taux | Condition | +|---|---|---| +| Stress transport | fertilité \(\downarrow\) | cargo animal | + +#### Impact Mort (tableau détaillé) + +| Cas | Effet | Condition | +|---|---|---| +| Trajet > 24h + confort bas | risque mort | cas extrême | + +#### Impact Nourriture (tableau détaillé) + +| Ressource | Effet | Condition | +|---|---|---| +| Carburant | coût/km | mission | + +#### Impact Attractivité(Visiteurs (tableau détaillé) + +| Action/État | Gain | Rayon | Notes | +|---|---:|---:|---| +| Skin camion | +1 | zoo | esthétique | + +#### Impact Attractivité Animaux) (tableau détaillé) + +| Action/État | Effet animaux | Condition | +|---|---|---| +| Klaxon | stress + | au passage | + +#### Impact Valeur (tableau détaillé) + +| Facteur | Variation | Condition | +|---|---:|---| +| Niveau camion | + | richesse (score) | + +### 5. Impacts Logistiques et Économiques + +#### Vitesse (Camion) (tableau détaillé) + +| Paramètre | Effet | Condition | +|---|---|---| +| Niveau | table vitesse | 1..7 | + +#### Vitesse (Nurserie) (tableau détaillé) + +| Paramètre | Effet | Condition | +|---|---|---| +| Livraison œuf/bébé | push vers nurserie | cargo type | + +#### Vitesse (Accueil) (tableau détaillé) + +| Paramètre | Effet | Condition | +|---|---|---| +| Livraison adulte | push vers accueil | cargo type | + +#### Vitesse (Recherche) (tableau détaillé) + +| Paramètre | Effet | Condition | +|---|---|---| +| - | - | - | + +#### Vitesse (Labo) (tableau détaillé) + +| Paramètre | Effet | Condition | +|---|---|---| +| Route labo | vitesse selon route | autoroute/piste | + +#### Vitesse (Visite) (tableau détaillé) + +| Paramètre | Effet | Condition | +|---|---|---| +| - | - | - | + +#### Dépenses (Billeterie) (tableau détaillé) + +| Poste | Coût | Unité | Condition | +|---|---:|---|---| +| - | 0 | - | - | + +#### Dépenses (Boutiques) (tableau détaillé) + +| Poste | Coût | Unité | Condition | +|---|---:|---|---| +| Entretien | 10 | coins / 1000 km | règle | + +#### Dépenses (Visiteurs) (tableau détaillé) + +| Poste | Coût | Unité | Condition | +|---|---:|---|---| +| - | 0 | - | - | + +#### Dépenses (Employés) (tableau détaillé) + +| Poste | Coût | Unité | Condition | +|---|---:|---|---| +| Chauffeur (abstrait) | 0 | - | inclus | + +#### 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 | +|---|---:|---|---| +| Carburant | variable | coins | distance | + +#### Trajet Visiteurs + +##### Trajet Visiteurs vers/depuis la ville (tableau détaillé) + +| Source | Destination | Déclencheur | Effet | +|---|---|---|---| +| - | - | - | - | + +##### Trajet Visiteurs vers/depuis les animaux (tableau détaillé) + +| Source | Destination | Déclencheur | Effet | +|---|---|---|---| +| - | - | - | - | + +##### Trajet Visiteurs vers/depuis les boutiques (tableau détaillé) + +| Source | Destination | Déclencheur | Effet | +|---|---|---|---| +| - | - | - | - | + +##### Trajet Visiteurs vers/depuis la billeterie (entrées/sorties du zoo) (tableau détaillé) + +| Source | Destination | Déclencheur | Effet | +|---|---|---|---| +| - | - | - | - | + +### 6. Événements + +#### Événements du Jeu (tableau détaillé) + +| Event | Déclencheur | Payload | Effet | +|---|---|---|---| +| `TRUCK_DEPART` | mission | target, cargo | moving | +| `TRUCK_DELAYED` | incident | reason, delta | ETA \(\uparrow\) | +| `TRUCK_ARRIVE` | retour zoo | cargo | décharge | + +#### Événements du Carte (tableau détaillé) + +| Event | Déclencheur | Effet | +|---|---|---| +| `TRACK_TRUCK` | clic | panel | + +#### Événements du Zoo (tableau détaillé) + +| Event | Déclencheur | Effet | +|---|---|---| +| `DELIVERY_COMPLETE` | arrivée | push accueil/nurserie | + +#### Événements du Ville / Visiteur (tableau détaillé) + +| Event | Déclencheur | Effet | +|---|---|---| +| - | - | - | + +#### Événements du Visiteur (tableau détaillé) + +| Event | Déclencheur | Effet | +|---|---|---| +| - | - | - | + +#### Événements du Joueur (tableau détaillé) + +| Event | Déclencheur | Effet | +|---|---|---| +| `PLAYER_OPENS_TRUCK_PANEL` | clic | UI | + +### 7. Progression + +#### Tableau des Upgrades (tableau détaillé) + +| Niveau | Coût | Effet | Débloque | +|---|---:|---|---| +| 1 | 100 | 50 km/h | base | +| 2 | 200 | 70 km/h + phares | nuit | +| 7 | 6400 | 200 km/h | rapide | + +### 8. Logique et Interfaces + +#### Pseudo-code Impacts (tableau détaillé) + +| Fonction | Entrées | Sorties | Notes | +|---|---|---|---| +| `computeTruckSpeed` | level, season, temp | float | table + mods | +| `computeETA` | distance, speed | timestamp | à la volée | +| `applyCargoStress` | cargo, comfort, dt | cargo | fertilité/stress | + +#### Messages d'Infos / Alerte (tableau détaillé) + +| ID | Niveau | Message | Condition | +|---|---|---|---| +| `TRUCK_ARRIVED` | Info | "Le camion est revenu au zoo." | arrivée | +| `TRUCK_DELAY` | Info | "Le camion a du retard." | incident | +| `TRUCK_BUSY` | Warning | "Camion déjà en mission." | lancement | + +## Annexes UX/UI + +### 1. Expérience Utilisateur (UX) + +#### Description UX (tableau détaillé) + +| Parcours | But | Friction | Réduction clics | +|---|---|---|---| +| Acheter sur carte | déclencher livraison | navigation | auto-focus camion | +| Suivre | connaître ETA | dispersion | panel clic icône | +| Mini-jeu | occuper attente | option | accessible en 1 clic | + +#### Description UI (tableau détaillé) + +| Composant | Contenu | États | +|---|---|---| +| Icône camion | position + badge | moving/delayed | +| Panel trajet | ETA + destination | open/closed | +| Modal mini-jeu | taches | progress | + +#### Emplacement (tableau détaillé) + +| Zone UI | Position | Notes | +|---|---|---| +| Carte monde | overlay | camion | +| Carte zoo | case camion | départ/arrivée | + +#### Intégration (tableau détaillé) + +| Intégration | Contrat | Notes | +|---|---|---| +| `accueil_animaux.md` | livraison adulte | dépôt | +| `nurserie.md` | livraison œuf/bébé | dépôt | +| `vente_animal.md` | logistique | mission | + +#### Navigation (tableau détaillé) + +| Action | Chemin | Résultat | +|---|---|---| +| Suivre | clic camion | panel | +| Jouer | clic camion → mini-jeu | modal | +| Voir arrivée | clic notif | focus | + +#### Événements (tableau détaillé) + +| Event UI | Déclencheur | Effet | +|---|---|---| +| `TRACK_TRUCK` | clic | panel | +| `CLEAN_WINDSHIELD` | clic | mini-jeu | + +#### Assets Skinables + +##### Musiques (tableau détaillé) + +| Asset | Usage | Durée | Notes | +|---|---|---:|---| +| `truck_radio_lofi.mp3` | mini-jeu | loop | doux | + +##### Sons (tableau détaillé) + +| Asset | Usage | Volume | +|---|---|---| +| `engine_start.mp3` | départ | moyen | +| `truck_stop.mp3` | arrivée | moyen | +| `wipe.mp3` | mini-jeu | bas | + +##### Graphiques (tableau détaillé) + +| Asset | Usage | Contraintes | +|---|---|---| +| `truck_route_dotted.png` | route | overlay | +| `truck_badge_delayed.png` | retard | lisible | + +##### Images (tableau détaillé) + +| Asset | Usage | +|---|---| +| `truck_map_icon.png` | carte | + +##### Vidéos (tableau détaillé) + +| Asset | Usage | Durée | +|---|---|---:| +| `truck_depart_zoom.webm` | départ | 1.5s | + +##### Animations (tableau détaillé) + +| Animation | Déclencheur | Notes | +|---|---|---| +| fumée échappement | moving | loop | +| rotation roues | moving | loop | + +##### Couleurs (tableau détaillé) + +| Token | Valeur | Usage | +|---|---|---| +| `truck_yellow` | #FBC02D | carrosserie | +| `truck_black` | #212121 | accents | + +##### Textes (tableau détaillé) + +| Clé | FR | EN | +|---|---|---| +| `truck.en_route` | En route vers {dest} | En route to {dest} | +| `truck.arrived` | Camion rentré | Truck arrived | + +##### Formes (tableau détaillé) + +| Élément | Forme | Notes | +|---|---|---| +| Badge | rond | statut | +| Flèche | triangle | direction | diff --git a/docs/specs/carte_generique.md b/docs/specs/carte_generique.md index 59d35b8..04b11af 100644 --- a/docs/specs/carte_generique.md +++ b/docs/specs/carte_generique.md @@ -138,3 +138,464 @@ function updateMap(map): - **Couleurs** : Fond neutre hors carte. - **Textes** : Coordonnées (Debug). - **Formes** : Rectangulaire. + +## Définition + +| Champ | Valeur | +|---|---| +| Concept | Abstraction “carte” : structure de grille + règles de navigation + horloge, déclinée en carte zoo et carte monde. | +| Rôle | Offrir un contrat commun de coordonnées, rendu isométrique, événements de déplacement/zoom, et cycle temps (jour/nuit, saisons). | +| Portée | Base pour `carte_zoo.md` et `carte_monde.md`, et pour les types `case_*`. | +| Contrainte | Aucun cache/mémorisation obligatoire : la carte fournit des fonctions de calcul à la volée (variants, z_index, routes). | + +## Fonctions (tableau détaillé) + +| Fonction | Déclencheur | Entrées | Sorties | Règles | Observabilité | +|---|---|---|---|---|---| +| Initialiser carte | création | type, seed | grid | dimensions fixées | Event `MAP_INIT` | +| Résoudre case | lookup | x,y | case | unicité coord | Event `MAP_CASE_RESOLVED` | +| Convertir coord → iso | rendu | x,y | iso_x/iso_y | formule iso stable | Event `MAP_COORD_CONVERTED` | +| Calculer z_index | rendu | x,y | int | priorité y puis x | Event `MAP_ZINDEX_COMPUTED` | +| Déclencher tick | loop | deltaTime | events | mise à jour entités | Event `MAP_TICK` | +| Déplacement caméra | input | pan/zoom | camera state | clamp | Event `MAP_MOVE` / `MAP_ZOOM` | + +## Icone de base + +| Élément | Spécification | +|---|---| +| Représentation | Grille + boussole | +| Couleur dominante | Neutre | +| Variantes | `icon_map_generic.png`, `icon_compass.png` | +| États | normal, loading, locked | + +## Interactions (tableau détaillé) + +| Interaction | Type | Préconditions | Étapes UI | Résultat | Erreurs / Messages | +|---|---|---|---|---|---| +| Pan | Navigation | carte autorise pan | drag | caméra bouge | - | +| Zoom | Navigation | - | pinch/wheel | caméra zoom | - | +| Sélection case | Consultation | case interactive | clic | panneau | `CASE_LOCKED` | + +## Personnage contextuel (événements & interaction) +Les cartes peuvent afficher un personnage contextuel quand un module de carte est actionné ou lorsqu’un événement impacte la navigation. + +### Références +- **Carte du zoo** : avatar du joueur actif comme contexte principal (`avatar_joueur.md`), plus visiteurs/staff selon événements (`carte_zoo.md`). +- **Carte du monde** : maire pour les événements de ville (`maire.md`, `ville.md`), joueurs/bots pour les interactions sociales (`joueur.md`, `bot.md`), visiteurs comme flux (`visiteur.md`). + +### Déclencheurs (génériques) +| Event / Action | Condition | Effet UI personnage | +|---|---|---| +| `MAP_LOADED` | carte prête | portrait/mascotte de contexte (selon type) | +| `MAP_MOVE` / `MAP_ZOOM` | navigation | feedback passif (pas de spam) | +| `CASE_LOCKED` | gating | message explicite (raison + action) | + +### Skins & thèmes +Le personnage contextuel suit `theme.md`. Les portraits/mini-avatars peuvent utiliser les skins via `inventaire_skins.md` si la mécanique est activée. + +## Annexes Techniques + +### 1. Données et États (tableau détaillé) + +| Donnée / État | Type | Exemple | Source | Contraintes | +|---|---|---|---|---| +| `id` | uuid_v4 | `uuid_v4` | DB | unique | +| `type` | enum | `zoo` | DB | `zoo/world` | +| `width` | int | 6 | DB | >0 | +| `height` | int | 5 | DB | >0 | +| `grid[x][y].case_ref` | uuid_v4 | `uuid_v4` | DB | référence | +| `time.day_phase` | enum | `day` | calcul | jour/nuit | +| `time.season` | enum | `spring` | calcul | saisons | +| `iso_x` | int | 0 | calcul | origine | +| `iso_y` | int | 0 | calcul | origine | + +#### Caractéristiques Initiales (tableau détaillé) + +| Caractéristique | Valeur initiale | Unité | Notes | +|---|---:|---|---| +| Densité occupée | 0 | % | init | +| DeltaTime | 1 | tick | logique | + +#### Scores Initiaux (tableau détaillé) + +| Score | Valeur initiale | Plage | Impact | +|---|---:|---|---| +| Exploration | 0 | 0..100 | carte monde | +| Aménagement | 0 | 0..100 | carte zoo | + +### 2. Cycles de Vie et Apparition (tableau détaillé) + +| Phase | Déclencheur | Entrées | Sorties | Invariants | +|---|---|---|---|---| +| Création | init jeu | seed | carte | stable | +| Utilisation | session | input | camera | clamp | +| Destruction | suppression compte | - | supprimée | - | + +#### Conditions d'Apparition (tableau détaillé) + +| Condition | Seuil | Opérateur | Résultat | +|---|---:|---|---| +| Initialisation | true | est | carte créée | + +#### Conditions de Disparition (tableau détaillé) + +| Condition | Seuil | Opérateur | Résultat | +|---|---:|---|---| +| Compte supprimé | true | est | carte supprimée | + +#### Hérédité (tableau détaillé) + +| Élément | Hérité | Règle | +|---|---|---| +| Configuration seed | Oui | rejouable | +| Variants render | Non | recalcul | + +### 3. Impacts Environnementaux + +#### Impact Température (tableau détaillé) + +| Condition | Effet carte | Notes | +|---|---|---| +| Météo globale | mod cases | propagée | + +#### Impact Milieu (Biome) (tableau détaillé) + +| Biome | Effet carte | Notes | +|---|---|---| +| Répartition | gen/procédural | cohérence | + +#### Impact Saisons (tableau détaillé) + +| Saison | Effet carte | Notes | +|---|---|---| +| Cycle | mod visuel | global | + +#### Impact Heure / Jour-Nuit (tableau détaillé) + +| Période | Effet carte | Notes | +|---|---|---| +| Nuit | assombrissement | global | + +### 4. Impacts Biologiques et Sociaux + +#### Impact Reproduction (tableau détaillé) + +| Facteur | Effet sur taux | Condition | +|---|---|---| +| Population globale | caps | simulation | + +#### Impact Mort (tableau détaillé) + +| Cas | Effet | Condition | +|---|---|---| +| Traces | journal | option | + +#### Impact Nourriture (tableau détaillé) + +| Ressource | Effet | Condition | +|---|---|---| +| Stocks | centralisation | option | + +#### Impact Attractivité(Visiteurs (tableau détaillé) + +| Action/État | Gain | Rayon | Notes | +|---|---:|---:|---| +| Score global | agrégation | monde | carte monde | + +#### Impact Attractivité Animaux) (tableau détaillé) + +| Action/État | Effet animaux | Condition | +|---|---|---| +| - | neutre | base | + +#### Impact Valeur (tableau détaillé) + +| Facteur | Variation | Condition | +|---|---:|---| +| Terrain | + | cases | + +### 5. Impacts Logistiques et Économiques + +#### Vitesse (Camion) (tableau détaillé) + +| Paramètre | Effet | Condition | +|---|---|---| +| deltaTime | avance mission | tick | + +#### Vitesse (Nurserie) (tableau détaillé) + +| Paramètre | Effet | Condition | +|---|---|---| +| timers | progress | tick | + +#### Vitesse (Accueil) (tableau détaillé) + +| Paramètre | Effet | Condition | +|---|---|---| +| timers | progress | tick | + +#### Vitesse (Recherche) (tableau détaillé) + +| Paramètre | Effet | Condition | +|---|---|---| +| projets | durations | tick | + +#### Vitesse (Labo) (tableau détaillé) + +| Paramètre | Effet | Condition | +|---|---|---| +| refresh offres | 24h | tick | + +#### Vitesse (Visite) (tableau détaillé) + +| Paramètre | Effet | Condition | +|---|---|---| +| pathfinding | recalcul | obstacles | + +#### Dépenses (Billeterie) (tableau détaillé) + +| Poste | Coût | Unité | Condition | +|---|---:|---|---| +| Affichage UI | 1 | coins | lore | + +#### 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 | +|---|---:|---|---| +| - | 1 | coins | lore | + +#### 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 | +|---|---|---|---| +| Entré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 | +|---|---|---|---| +| Zoo | Sortie | fermeture | despawn | + +### 6. Événements + +#### Événements du Jeu (tableau détaillé) + +| Event | Déclencheur | Payload | Effet | +|---|---|---|---| +| `MAP_TICK` | loop | dt | update | +| `MAP_LOADED` | init | type | ready | + +#### Événements du Carte (tableau détaillé) + +| Event | Déclencheur | Effet | +|---|---|---| +| `MAP_MOVE` | input | camera | + +#### Événements du Zoo (tableau détaillé) + +| Event | Déclencheur | Effet | +|---|---|---| +| `MAP_INIT` | create | grid | + +#### Événements du Ville / Visiteur (tableau détaillé) + +| Event | Déclencheur | Effet | +|---|---|---| +| `MAP_ZOOM` | input | camera | + +#### Événements du Visiteur (tableau détaillé) + +| Event | Déclencheur | Effet | +|---|---|---| +| `MAP_CASE_RESOLVED` | lookup | case | + +#### Événements du Joueur (tableau détaillé) + +| Event | Déclencheur | Effet | +|---|---|---| +| `MAP_COORD_CONVERTED` | render | iso | + +### 7. Progression + +#### Tableau des Upgrades (tableau détaillé) + +| Niveau | Coût | Effet | Débloque | +|---|---:|---|---| +| 1 | 100 | zoom + | map | + +### 8. Logique et Interfaces + +#### Pseudo-code Impacts (tableau détaillé) + +| Fonction | Entrées | Sorties | Notes | +|---|---|---|---| +| `updateMap` | map, dt | map | tick | +| `toIso` | x,y | iso | projection | + +#### Messages d'Infos / Alerte (tableau détaillé) + +| ID | Niveau | Message | Condition | +|---|---|---|---| +| `MAP_LOADED` | Info | "Carte chargée." | init | +| `CASE_LOCKED` | Warning | "Zone verrouillée." | gating | + +## Annexes UX/UI + +### 1. Expérience Utilisateur (UX) + +#### Description UX (tableau détaillé) + +| Parcours | But | Friction | Réduction clics | +|---|---|---|---| +| Explorer | comprendre espace | navigation | pan/zoom | +| Centrer | retrouver point | perte | bouton recentrer | + +#### Description UI (tableau détaillé) + +| Composant | Contenu | États | +|---|---|---| +| HUD carte | boutons | visible | +| Tooltip | coord/site | hover | + +#### Emplacement (tableau détaillé) + +| Zone UI | Position | Notes | +|---|---|---| +| Plein écran | centre | carte | + +#### Intégration (tableau détaillé) + +| Intégration | Contrat | Notes | +|---|---|---| +| `carte_zoo.md` | usage | build | +| `carte_monde.md` | usage | navigation | + +#### Navigation (tableau détaillé) + +| Action | Chemin | Résultat | +|---|---|---| +| Pan | drag | move | +| Zoom | pinch | scale | + +#### Événements (tableau détaillé) + +| Event UI | Déclencheur | Effet | +|---|---|---| +| `MAP_MOVE` | drag | camera | +| `MAP_ZOOM` | pinch | camera | + +#### Assets Skinables + +##### Musiques (tableau détaillé) + +| Asset | Usage | Durée | Notes | +|---|---|---:|---| +| `map_generic_loop.mp3` | carte | loop | neutre | + +##### Sons (tableau détaillé) + +| Asset | Usage | Volume | +|---|---|---| +| `hover_soft.mp3` | hover | bas | +| `ui_zoom.mp3` | zoom | bas | + +##### Graphiques (tableau détaillé) + +| Asset | Usage | Contraintes | +|---|---|---| +| `grid_lines.png` | overlay | subtil | +| `tooltip_bg.png` | tooltip | lisible | + +##### Images (tableau détaillé) + +| Asset | Usage | +|---|---| +| `skybox.png` | fond | + +##### Vidéos (tableau détaillé) + +| Asset | Usage | Durée | +|---|---|---:| +| `clouds_overlay.webm` | fond | loop | + +##### Animations (tableau détaillé) + +| Animation | Déclencheur | Notes | +|---|---|---| +| inertie pan | move | 0.2s | + +##### Couleurs (tableau détaillé) + +| Token | Valeur | Usage | +|---|---|---| +| `map_bg` | #202020 | hors carte | +| `map_highlight` | #FFFFFF | hover | + +##### Textes (tableau détaillé) + +| Clé | FR | EN | +|---|---|---| +| `map.coords` | Coordonnées | Coordinates | +| `map.loaded` | Carte chargée | Map loaded | + +##### Formes (tableau détaillé) + +| Élément | Forme | Notes | +|---|---|---| +| Tooltip | rectangle arrondi | lisible | diff --git a/docs/specs/carte_monde.md b/docs/specs/carte_monde.md index ded6c95..af6d3cf 100644 --- a/docs/specs/carte_monde.md +++ b/docs/specs/carte_monde.md @@ -184,3 +184,475 @@ function updateWorldMap(map, deltaTime): - **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 | diff --git a/docs/specs/carte_zoo.md b/docs/specs/carte_zoo.md index 1f1a05f..e5ed9b1 100644 --- a/docs/specs/carte_zoo.md +++ b/docs/specs/carte_zoo.md @@ -203,3 +203,498 @@ function initZooMap(): - **Couleurs** : Vert/Rouge (Alpha 0.5). - **Textes** : "Placer ici". - **Formes** : Carrés. + +## Définition + +| Champ | Valeur | +|---|---| +| Concept | “Carte du zoo” : grille isométrique principale de gestion (construction, placement animaux/bâtiments, chemins, déplacements visiteurs). | +| Rôle | Centraliser l’édition (build/paint), le rendu isométrique (tri z-index, occlusion), et la simulation locale (pathfinding, signaux terrain). | +| Portée | Une map par zoo (`owner_id`), composée de `cases[]` et d’entités rendues (bâtiments, animaux, visiteurs, décorations). | +| Contrainte | Pas de cache/mémorisation : états dérivés (z_index, variants auto-tiling, heatmap) calculés à la volée ; aucune interaction silencieuse (placement invalide => erreur + message). | + +## Fonctions (tableau détaillé) + +| Fonction | Déclencheur | Entrées | Sorties | Règles | Observabilité | +|---|---|---|---|---|---| +| Rendre grille iso | frame render | cases visibles | draw list | tri par `z_index` + occlusion | Event `ZOO_MAP_RENDERED` | +| Sélectionner une case | clic/tap | coord | panneau contexte | contenu dépend occupancy | Event `CLICK_CASE` | +| Entrer mode build | bouton UI | type item | overlay | indique cases valides | Event `ENTER_BUILD_MODE` | +| Placer entité | drop/tap place | entity, coord | occupancy update | invariants case/biome/enclos | Event `PLACE_ENTITY` | +| Paint multi-case | drag | brush, path | batch placements | pas de “continue” silencieux : stop sur case invalide + message | Event `PAINT_APPLIED` | +| Auto-tiling terrain/chemins | placement | voisins | variant keys | recalcul local voisinage | Event `AUTOTILE_UPDATED` | +| Calculer pathfinding visiteurs | besoin/objectif | graph | route | A* à la volée, coûts par tuile | Event `VISITOR_ROUTE_COMPUTED` | +| Mettre à jour signaux terrain | tick lazy | env | flags | givre/jaunissement selon compatibilité | Event `TERRAIN_SIGNAL_UPDATED` | +| Gérer zoom | input | zoom level | camera scale | clamp + snap | Event `ZOO_MAP_ZOOM` | + +## Icone de base + +| Élément | Spécification | +|---|---| +| Représentation | Icône carte pliée / grille losange | +| Couleur dominante | Vert (prairie), bleu (océan), gris (montagne) | +| Variantes | `icon_zoo_map.png`, `icon_grid_iso.png` | +| États | normal, build_mode, placement_invalid | + +## Interactions (tableau détaillé) + +| Interaction | Type | Préconditions | Étapes UI | Résultat | Erreurs / Messages | +|---|---|---|---|---|---| +| Clic case | Consultation | - | clic | panneau | - | +| Construire bâtiment | Action | item choisi | build → place | entité posée | `CELL_OCCUPIED`, `PLACEMENT_INVALID` | +| Placer animal | Action | animal prêt | drag → drop | animal enclos | `BIOME_INCOMPATIBLE` | +| Déplacer (réaménager) | Action | feature active | drag entité | relocalisation | `MOVE_BLOCKED` | +| Zoom | Navigation | - | pinch/wheel | vue ajustée | - | + +## Personnages contextuels (événements & interaction) +La carte du zoo est un module transversal : plusieurs personnages peuvent servir de contexte selon l’événement. + +### Personnage principal +- **Joueur actif (avatar)** : voir `avatar_joueur.md`. Visible en HUD et utilisé comme personnage contextuel des actions de construction/gestion. + +### Personnages secondaires (selon événement) +- **Visiteurs homme/femme** : voir `visiteur.md` (flux, pathfinding, congestion). +- **Staff** : `nourisseur.md`, `soigneur.md`, `agent_securite.md`, `personnel_accueil.md`, `nurse.md` (déplacements et actions visibles sur la carte). + +### Déclencheurs (exemples) +| Event / Action | Condition | Personnage | Effet UI | +|---|---|---|---| +| `CLICK_CASE` | clic case | avatar | panneau contexte + action principale | +| `ENTER_BUILD_MODE` | build activé | avatar | rappel des invariants (cases valides) | +| `PLACEMENT_INVALID` / `CELL_OCCUPIED` | placement refusé | avatar | message explicite + surbrillance cause | +| `VISITOR_ROUTE_COMPUTED` | recalcul route | visiteur | bulle info si congestion/obstacle | +| `DELIVERY_COMPLETE` | arrivée camion | accueil/nurse | bulle livraison + deep-link module | + +### Skins & thèmes +Rendu des personnages : `theme.md` + équipements `inventaire_skins.md` (avatar + uniformes + variantes visiteurs si activées). + +## Annexes Techniques + +### 1. Données et États (tableau détaillé) + +| Donnée / État | Type | Exemple | Source | Contraintes | +|---|---|---|---|---| +| `id` | uuid_v4 | `uuid_v4` | DB | - | +| `owner_id` | uuid_v4 | `uuid_v4` | DB | - | +| `width` | int | 5 | DB | init | +| `height` | int | 6 | DB | init | +| `cases[].id` | uuid_v4 | `uuid_v4` | DB | unique | +| `cases[].grid.x` | int | 2 | DB | 0..width-1 | +| `cases[].grid.y` | int | 4 | DB | 0..height-1 | +| `cases[].iso.iso_x` | int | 120 | calcul | rendu | +| `cases[].iso.iso_y` | int | 88 | calcul | rendu | +| `cases[].z_index` | int | 12088 | calcul | tri | +| `cases[].biome` | enum | `prairie` | DB | tiers | +| `cases[].terrain.ground_type` | enum | `herbe` | DB | - | +| `cases[].terrain.path_type` | enum | `gravier` | DB | auto-tiling | +| `cases[].occupancy.type` | enum | `building` | DB | un principal | +| `cases[].occupancy.entity_id` | uuid_v4 \| null | `uuid_v4` | DB | null si vide | +| `cases[].render.tile_variant` | string | `path_gravel_T` | calcul | key | +| `cases[].render.occluder` | boolean | true | config | - | +| `cases[].render.click_hitbox` | enum | `base_sprite` | config | accessibilité clic | +| `timestamps.updated_at` | timestamp | - | DB | UTC | + +#### Caractéristiques Initiales (tableau détaillé) + +| Caractéristique | Valeur initiale | Unité | Notes | +|---|---:|---|---| +| Taille | 30 | cases | ~5x6 | +| Biomes | 3 | count | tiers | +| Zoom min/max | 0.7 / 1.6 | scale | clamp | +| Coût marche herbe | 1.2 | coef | pathfinding | + +#### Scores Initiaux (tableau détaillé) + +| Score | Valeur initiale | Plage | Impact | +|---|---:|---|---| +| Score aménagement | 0 | 0..100 | utilisation espace | +| Propreté globale | 100 | 0..100 | satisfaction | + +### 2. Cycles de Vie et Apparition (tableau détaillé) + +| Phase | Déclencheur | Entrées | Sorties | Invariants | +|---|---|---|---|---| +| Création | compte | seed | cases init | contenu initial | +| Expansion | achat case | coord | width/height | adjacency | +| Réaménagement | action | entité | nouvelle position | pas de collision | +| Catastrophes | event | saison | flags case | observable | + +#### Conditions d'Apparition (tableau détaillé) + +| Condition | Seuil | Opérateur | Résultat | +|---|---:|---|---| +| Compte joueur | true | est | map créée | + +#### Conditions de Disparition (tableau détaillé) + +| Condition | Seuil | Opérateur | Résultat | +|---|---:|---|---| +| Suppression compte | true | est | map supprimée | + +#### Hérédité (tableau détaillé) + +| Élément | Hérité | Règle | +|---|---|---| +| Extensions achetées | Oui | conservées en prestige (soft reset) | +| Variants render | Non | recalcul à la volée | + +### 3. Impacts Environnementaux + +#### Impact Température (tableau détaillé) + +| Condition | Effet | Notes | +|---|---|---| +| Proche océan | -2°C | micro-climat | +| Montagne | -5°C | micro-climat | + +#### Impact Milieu (Biome) (tableau détaillé) + +| Biome | Effet | Notes | +|---|---|---| +| Prairie | herbe repousse | nourriture passive | +| Océan | humidité + | froid adjacent | +| Montagne | givre + | froid | + +#### Impact Saisons (tableau détaillé) + +| Saison | Effet | Notes | +|---|---|---| +| Hiver | neige/givre | décor + path cost | +| Automne | teintes orange | visuel | + +#### Impact Heure / Jour-Nuit (tableau détaillé) + +| Période | Effet | Notes | +|---|---|---| +| Nuit | lumières | lampadaires/bâtiments | + +### 4. Impacts Biologiques et Sociaux + +#### Impact Reproduction (tableau détaillé) + +| Facteur | Effet sur taux | Condition | +|---|---|---| +| Buissons “intimité” | +5% | autour enclos | + +#### Impact Mort (tableau détaillé) + +| Cas | Effet | Condition | +|---|---|---| +| Animal mort sur case | fertilité sol + | case verdit après TTL | + +#### Impact Nourriture (tableau détaillé) + +| Ressource | Effet | Condition | +|---|---|---| +| Herbe prairie vide | repousse | tick lent | + +#### Impact Attractivité(Visiteurs (tableau détaillé) + +| Action/État | Gain | Rayon | Notes | +|---|---:|---:|---| +| Décoration | +1 | 3 cases | beauté | + +#### Impact Attractivité Animaux) (tableau détaillé) + +| Action/État | Effet animaux | Condition | +|---|---|---| +| Foule proche | stress + | densité élevée | + +#### Impact Valeur (tableau détaillé) + +| Facteur | Variation | Condition | +|---|---:|---| +| Case achetée | + | foncier | valeur zoo | + +### 5. Impacts Logistiques et Économiques + +#### Vitesse (Camion) (tableau détaillé) + +| Paramètre | Effet | Condition | +|---|---|---| +| Accès camion | chemin connecté | case camion | + +#### Vitesse (Nurserie) (tableau détaillé) + +| Paramètre | Effet | Condition | +|---|---|---| +| Overlay placement | valid/invalid | mode sortie | + +#### Vitesse (Accueil) (tableau détaillé) + +| Paramètre | Effet | Condition | +|---|---|---| +| Mode placement | overlay | READY | + +#### Vitesse (Recherche) (tableau détaillé) + +| Paramètre | Effet | Condition | +|---|---|---| +| - | - | - | + +#### Vitesse (Labo) (tableau détaillé) + +| Paramètre | Effet | Condition | +|---|---|---| +| - | - | - | + +#### Vitesse (Visite) (tableau détaillé) + +| Paramètre | Effet | Condition | +|---|---|---| +| Chemins | +50% vitesse | path tiles | + +#### Dépenses (Billeterie) (tableau détaillé) + +| Poste | Coût | Unité | Condition | +|---|---:|---|---| +| Entretien espaces verts | 1 | coins/case/semaine | propreté | + +#### Dépenses (Boutiques) (tableau détaillé) + +| Poste | Coût | Unité | Condition | +|---|---:|---|---| +| Maintenance routes | 1 | coins/tuile/semaine | option | + +#### Dépenses (Visiteurs) (tableau détaillé) + +| Poste | Coût | Unité | Condition | +|---|---:|---|---| +| Saleté | temps staff | min | déchets | + +#### Dépenses (Employés) (tableau détaillé) + +| Poste | Coût | Unité | Condition | +|---|---:|---|---| +| Soigneur déplacement | temps | min | chemins | + +#### 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 | visuel couplé | + +#### Dépenses (Nourriture) (tableau détaillé) + +| Poste | Coût | Unité | Condition | +|---|---:|---|---| +| Stock global | variable | coins | achats | + +#### Dépenses (Acceuil des animaux) (tableau détaillé) + +| Poste | Coût | Unité | Condition | +|---|---:|---|---| +| Quarantaine | variable | coins | incidents | + +#### Dépenses (Camion) (tableau détaillé) + +| Poste | Coût | Unité | Condition | +|---|---:|---|---| +| Carburant | variable | coins | distance | + +#### Trajet Visiteurs + +##### Trajet Visiteurs vers/depuis la ville (tableau détaillé) + +| Source | Destination | Déclencheur | Effet | +|---|---|---|---| +| Billeterie | Ville | sortie | despawn | + +##### Trajet Visiteurs vers/depuis les animaux (tableau détaillé) + +| Source | Destination | Déclencheur | Effet | +|---|---|---|---| +| Billeterie | Enclos | plan visite | route | + +##### Trajet Visiteurs vers/depuis les boutiques (tableau détaillé) + +| Source | Destination | Déclencheur | Effet | +|---|---|---|---| +| Enclos | Boutique | besoin | détour | + +##### Trajet Visiteurs vers/depuis la billeterie (entrées/sorties du zoo) (tableau détaillé) + +| Source | Destination | Déclencheur | Effet | +|---|---|---|---| +| Enclos | Billeterie | fin visite | sortie | + +### 6. Événements + +#### Événements du Jeu (tableau détaillé) + +| Event | Déclencheur | Payload | Effet | +|---|---|---|---| +| `MAP_EXPAND` | achat | coord | size + | +| `AUTOTILE_UPDATED` | terrain | coord | variants | + +#### Événements du Carte (tableau détaillé) + +| Event | Déclencheur | Effet | +|---|---|---| +| `ZOO_MAP_ZOOM` | input | camera | + +#### Événements du Zoo (tableau détaillé) + +| Event | Déclencheur | Effet | +|---|---|---| +| `PLACE_ENTITY` | placement | occupancy | + +#### Événements du Ville / Visiteur (tableau détaillé) + +| Event | Déclencheur | Effet | +|---|---|---| +| `VISITOR_ROUTE_COMPUTED` | besoin | route | + +#### Événements du Visiteur (tableau détaillé) + +| Event | Déclencheur | Effet | +|---|---|---| +| `VISITOR_REROUTE` | obstacle | route | + +#### Événements du Joueur (tableau détaillé) + +| Event | Déclencheur | Effet | +|---|---|---| +| `ENTER_BUILD_MODE` | UI | overlay | + +### 7. Progression + +#### Tableau des Upgrades (tableau détaillé) + +| Niveau | Coût | Effet | Débloque | +|---|---:|---|---| +| 1 | 100 | +1 case | extension | + +### 8. Logique et Interfaces + +#### Pseudo-code Impacts (tableau détaillé) + +| Fonction | Entrées | Sorties | Notes | +|---|---|---|---| +| `getBiomeByColumn` | x, width | biome | tiers | +| `computeZIndex` | x,y | int | tri iso | +| `isPlacementValid` | entity, coord | bool | invariants | + +#### Messages d'Infos / Alerte (tableau détaillé) + +| ID | Niveau | Message | Condition | +|---|---|---|---| +| `MAP_EXPAND` | Info | "Le zoo s'agrandit." | achat | +| `PLACEMENT_INVALID` | Warning | "Placement invalide." | validation | +| `CELL_OCCUPIED` | Warning | "Case occupée." | collision | + +## Annexes UX/UI + +### 1. Expérience Utilisateur (UX) + +#### Description UX (tableau détaillé) + +| Parcours | But | Friction | Réduction clics | +|---|---|---|---| +| Construire | façonner zoo | erreurs placement | overlay OK/KO | +| Inspecter case | comprendre contenu | navigation | panneau contextuel | + +#### Description UI (tableau détaillé) + +| Composant | Contenu | États | +|---|---|---| +| Highlight case | outline | hover/selected | +| Bottom sheet | infos/actions | open/closed | +| Overlay build | vert/rouge | valid/invalid | + +#### Emplacement (tableau détaillé) + +| Zone UI | Position | Notes | +|---|---|---| +| Canvas monde | plein écran | caméra | +| HUD build | barre | outils | + +#### Intégration (tableau détaillé) + +| Intégration | Contrat | Notes | +|---|---|---| +| `case_zoo.md` | unité case | occupancy | +| `chemin.md` | auto-tiling | path | + +#### Navigation (tableau détaillé) + +| Action | Chemin | Résultat | +|---|---|---| +| Sélection | clic case | panneau | +| Build | bouton build | overlay | + +#### Événements (tableau détaillé) + +| Event UI | Déclencheur | Effet | +|---|---|---| +| `CLICK_CASE` | clic | panneau | +| `ENTER_BUILD_MODE` | clic | overlay | + +#### Assets Skinables + +##### Musiques (tableau détaillé) + +| Asset | Usage | Durée | Notes | +|---|---|---:|---| +| `zoo_map_ambience_loop.mp3` | carte zoo | loop | discret | + +##### Sons (tableau détaillé) + +| Asset | Usage | Volume | +|---|---|---| +| `click_tile.mp3` | sélection | bas | +| `grid_snap.mp3` | placement | bas | + +##### Graphiques (tableau détaillé) + +| Asset | Usage | Contraintes | +|---|---|---| +| `tile_highlight.png` | hover | overlay | +| `build_overlay.png` | build | alpha | + +##### Images (tableau détaillé) + +| Asset | Usage | +|---|---| +| `biome_prairie_tiles.png` | sol | +| `biome_mountain_tiles.png` | sol | + +##### Vidéos (tableau détaillé) + +| Asset | Usage | Durée | +|---|---|---:| +| `grid_holo.webm` | build | 1.0s | + +##### Animations (tableau détaillé) + +| Animation | Déclencheur | Notes | +|---|---|---| +| pulsation highlight | hover | 0.4s | +| snap | placement | 0.2s | + +##### Couleurs (tableau détaillé) + +| Token | Valeur | Usage | +|---|---|---| +| `build_ok_green` | #00FF00 | valid | +| `build_ko_red` | #FF0000 | invalid | + +##### Textes (tableau détaillé) + +| Clé | FR | EN | +|---|---|---| +| `zoo_map.place_here` | Placer ici | Place here | +| `zoo_map.invalid` | Placement invalide | Invalid placement | + +##### Formes (tableau détaillé) + +| Élément | Forme | Notes | +|---|---|---| +| Case | losange | iso | +| Panneau | rectangle arrondi | lisible | diff --git a/docs/specs/case_generique.md b/docs/specs/case_generique.md index d181dec..f4e94d4 100644 --- a/docs/specs/case_generique.md +++ b/docs/specs/case_generique.md @@ -103,3 +103,445 @@ def fertilize_case(case, player): - **Couleurs** : Marron foncé. - **Textes** : `TOOL_FERTILIZE` = "Engrais", `CASE_FERTILIZED` = "Sol fertilisé" - **Formes** : Curseur rond (outil), surbrillance tuile. + +## Définition + +| Champ | Valeur | +|---|---| +| Concept | Case générique : unité élémentaire \((x,y)\) d’une carte, portant biome, température, contenu, états de sol et paramètres de rendu isométrique. | +| Rôle | Supporter toutes les interactions bas niveau (occupation, états terrain, outils) et fournir un contrat unique pour les spécialisations (zoo/monde). | +| Portée | Toute grille (zoo/world) ; les entités référencent des cases via coordonnées ou `grid_id`. | +| Contrainte | Invariants stricts (content_type vs ref) ; pas de fallback silencieux ; dérivés (z_index, tile_variant) calculés à la volée. | + +## Fonctions (tableau détaillé) + +| Fonction | Déclencheur | Entrées | Sorties | Règles | Observabilité | +|---|---|---|---|---|---| +| Résoudre `grid_id` | création | x,y | string | format `${x}:${y}` | Event `GRID_ID_BUILT` | +| Mettre à jour contenu | placement | content_type/ref | case | cohérence obligatoire | Event `CASE_CONTENT_UPDATED` | +| Appliquer outil (fertilize) | action | player, cost | fertility=100 | fonds requis, sinon erreur | Event `FERTILIZE_SOIL` | +| Mettre à jour flags | tick | env + actions | state_flags | clamp + cohérence | Event `CASE_FLAGS_UPDATED` | +| Calculer température locale | tick | biome + offset + saison | float | additif | Event `CASE_TEMP_COMPUTED` | + +## Icone de base + +| Élément | Spécification | +|---|---| +| Représentation | Tuile + symbole biome | +| Couleur dominante | selon biome | +| Variantes | `icon_tile_generic.png`, `icon_tile_fertilized.png` | +| États | `dirty`, `fertilized`, `snowy`, `muddy` | + +## Interactions (tableau détaillé) + +| Interaction | Type | Préconditions | Étapes UI | Résultat | Erreurs / Messages | +|---|---|---|---|---|---| +| Fertiliser | Action | fonds ≥ 50 | outil → clic case | fertilité 100 | `NO_MONEY` | +| Lire état case | Consultation | - | survol | tooltip flags | - | + +## Annexes Techniques + +### 1. Données et États (tableau détaillé) + +| Donnée / État | Type | Exemple | Source | Contraintes | +|---|---|---|---|---| +| `x` | int | 10 | DB | coord | +| `y` | int | 12 | DB | coord | +| `grid_id` | string | `10:12` | calcul | stable | +| `owner_id` | uuid_v4 \| null | `uuid_v4` | DB | null pour monde | +| `biome_type` | enum | `prairie` | DB | - | +| `temperature_offset` | float | -2.0 | DB | additif | +| `content_type` | enum | `empty` | DB | voir enum | +| `content_ref` | uuid_v4 \| null | - | DB | null si empty | +| `fertility_level` | float | 100 | DB | 0..100 | +| `cleanliness_level` | float | 80 | DB | 0..100 | +| `state_flags[]` | enum[] | `dirty` | DB | sans doublons | +| `render.tile_variant` | string | `prairie_A` | calcul | auto-tiling | +| `render.hitbox` | enum | `tile` | config | access | +| `iso_x` | int | 120 | calcul | iso | +| `iso_y` | int | 88 | calcul | iso | +| `z_index` | int | 12088 | calcul | tri | + +#### Caractéristiques Initiales (tableau détaillé) + +| Caractéristique | Valeur initiale | Unité | Notes | +|---|---:|---|---| +| Fertilité | 0 | pts | init | +| Propreté | 100 | pts | init | +| Temp offset | 0.0 | °C | init | + +#### Scores Initiaux (tableau détaillé) + +| Score | Valeur initiale | Plage | Impact | +|---|---:|---|---| +| Occupation | 0 | 0..100 | densité | +| Dégradation | 0 | 0..100 | sol | + +### 2. Cycles de Vie et Apparition (tableau détaillé) + +| Phase | Déclencheur | Entrées | Sorties | Invariants | +|---|---|---|---|---| +| Création | gen map | biome | case | unicité | +| Mutation | actions | outils | flags | cohérence | + +#### Conditions d'Apparition (tableau détaillé) + +| Condition | Seuil | Opérateur | Résultat | +|---|---:|---|---| +| Génération | true | est | case créée | + +#### Conditions de Disparition (tableau détaillé) + +| Condition | Seuil | Opérateur | Résultat | +|---|---:|---|---| +| Suppression compte | true | est | supprimée | + +#### Hérédité (tableau détaillé) + +| Élément | Hérité | Règle | +|---|---|---| +| Coordonnées | Oui | stables | +| Flags | Oui | persistants DB | + +### 3. Impacts Environnementaux + +#### Impact Température (tableau détaillé) + +| Condition | Effet | Notes | +|---|---|---| +| Saison | temp \(\pm\) | global | + +#### Impact Milieu (Biome) (tableau détaillé) + +| Biome | Effet | Notes | +|---|---|---| +| jungle | humidité | visuel | + +#### Impact Saisons (tableau détaillé) + +| Saison | Effet | Notes | +|---|---|---| +| hiver | `snowy` | flag | + +#### Impact Heure / Jour-Nuit (tableau détaillé) + +| Période | Effet | Notes | +|---|---|---| +| nuit | luminosité - | rendu | + +### 4. Impacts Biologiques et Sociaux + +#### Impact Reproduction (tableau détaillé) + +| Facteur | Effet sur taux | Condition | +|---|---|---| +| fertilized | + | plantes | + +#### Impact Mort (tableau détaillé) + +| Cas | Effet | Condition | +|---|---|---| +| flooded | danger | event | + +#### Impact Nourriture (tableau détaillé) + +| Ressource | Effet | Condition | +|---|---|---| +| herbe | nourriture | prairie | + +#### Impact Attractivité(Visiteurs (tableau détaillé) + +| Action/État | Gain | Rayon | Notes | +|---|---:|---:|---| +| propre | + | local | ambiance | + +#### Impact Attractivité Animaux) (tableau détaillé) + +| Action/État | Effet animaux | Condition | +|---|---|---| +| sale | stress + | proximité | + +#### Impact Valeur (tableau détaillé) + +| Facteur | Variation | Condition | +|---|---:|---| +| tile premium | + | flag | + +### 5. Impacts Logistiques et Économiques + +#### Vitesse (Camion) (tableau détaillé) + +| Paramètre | Effet | Condition | +|---|---|---| +| movement_cost | vitesse - | >1 | + +#### Vitesse (Nurserie) (tableau détaillé) + +| Paramètre | Effet | Condition | +|---|---|---| +| - | neutre | base | + +#### Vitesse (Accueil) (tableau détaillé) + +| Paramètre | Effet | Condition | +|---|---|---| +| - | neutre | base | + +#### Vitesse (Recherche) (tableau détaillé) + +| Paramètre | Effet | Condition | +|---|---|---| +| - | neutre | base | + +#### Vitesse (Labo) (tableau détaillé) + +| Paramètre | Effet | Condition | +|---|---|---| +| - | neutre | base | + +#### Vitesse (Visite) (tableau détaillé) + +| Paramètre | Effet | Condition | +|---|---|---| +| walkable | route | bool | + +#### Dépenses (Billeterie) (tableau détaillé) + +| Poste | Coût | Unité | Condition | +|---|---:|---|---| +| fertilize | 50 | coins | outil | + +#### Dépenses (Boutiques) (tableau détaillé) + +| Poste | Coût | Unité | Condition | +|---|---:|---|---| +| nettoyage | 5 | coins | option | + +#### Dépenses (Visiteurs) (tableau détaillé) + +| Poste | Coût | Unité | Condition | +|---|---:|---|---| +| saleté | temps | min | déchets | + +#### Dépenses (Employés) (tableau détaillé) + +| Poste | Coût | Unité | Condition | +|---|---:|---|---| +| intervention | temps | min | staff | + +#### 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 | +|---|---:|---|---| +| - | 1 | coins | lore | + +#### 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 | +|---|---|---|---| +| entrée | enclos | visite | route | + +##### Trajet Visiteurs vers/depuis les boutiques (tableau détaillé) + +| Source | Destination | Déclencheur | Effet | +|---|---|---|---| +| enclos | boutique | faim | achats | + +##### Trajet Visiteurs vers/depuis la billeterie (entrées/sorties du zoo) (tableau détaillé) + +| Source | Destination | Déclencheur | Effet | +|---|---|---|---| +| zoo | sortie | fin | despawn | + +### 6. Événements + +#### Événements du Jeu (tableau détaillé) + +| Event | Déclencheur | Payload | Effet | +|---|---|---|---| +| `CASE_FERTILIZED` | outil | grid_id | flag + | +| `CASE_CONTENT_UPDATED` | placement | content | cohérence | + +#### Événements du Carte (tableau détaillé) + +| Event | Déclencheur | Effet | +|---|---|---| +| `CASE_TEMP_COMPUTED` | tick | temp | + +#### Événements du Zoo (tableau détaillé) + +| Event | Déclencheur | Effet | +|---|---|---| +| `CASE_FLAGS_UPDATED` | tick | flags | + +#### Événements du Ville / Visiteur (tableau détaillé) + +| Event | Déclencheur | Effet | +|---|---|---| +| `GRID_ID_BUILT` | init | id | + +#### Événements du Visiteur (tableau détaillé) + +| Event | Déclencheur | Effet | +|---|---|---| +| `CASE_HOVERED` | UI | tooltip | + +#### Événements du Joueur (tableau détaillé) + +| Event | Déclencheur | Effet | +|---|---|---| +| `PLAYER_FERTILIZES` | clic | sol | + +### 7. Progression + +#### Tableau des Upgrades (tableau détaillé) + +| Niveau | Coût | Effet | Débloque | +|---|---:|---|---| +| Outil engrais | 50 | fertilité 100 | action | + +### 8. Logique et Interfaces + +#### Pseudo-code Impacts (tableau détaillé) + +| Fonction | Entrées | Sorties | Notes | +|---|---|---|---| +| `fertilize_case` | case, player | result | fonds | +| `getLocalTemp` | case, season | float | additif | + +#### Messages d'Infos / Alerte (tableau détaillé) + +| ID | Niveau | Message | Condition | +|---|---|---|---| +| `CASE_FERTILIZED` | Info | "Sol fertilisé." | succès | +| `NO_MONEY` | Warn | "Fonds insuffisants." | coût | + +## Annexes UX/UI + +### 1. Expérience Utilisateur (UX) + +#### Description UX (tableau détaillé) + +| Parcours | But | Friction | Réduction clics | +|---|---|---|---| +| Utiliser outil | améliorer case | menus | outil direct | + +#### Description UI (tableau détaillé) + +| Composant | Contenu | États | +|---|---|---| +| Curseur outil | sac engrais | actif | +| Feedback case | particules | succès | + +#### Emplacement (tableau détaillé) + +| Zone UI | Position | Notes | +|---|---|---| +| Menu outils | HUD | accès | + +#### Intégration (tableau détaillé) + +| Intégration | Contrat | Notes | +|---|---|---| +| `case_zoo.md` | spécialisation | zoo | + +#### Navigation (tableau détaillé) + +| Action | Chemin | Résultat | +|---|---|---| +| Fertiliser | outil → clic | succès | + +#### Événements (tableau détaillé) + +| Event UI | Déclencheur | Effet | +|---|---|---| +| `FERTILIZE_SOIL` | clic | action | + +#### Assets Skinables + +##### Musiques (tableau détaillé) + +| Asset | Usage | Durée | Notes | +|---|---|---:|---| +| `ambience_garden_soft.mp3` | outil | loop | discret | + +##### Sons (tableau détaillé) + +| Asset | Usage | Volume | +|---|---|---| +| `scatter.mp3` | engrais | bas | + +##### Graphiques (tableau détaillé) + +| Asset | Usage | Contraintes | +|---|---|---| +| `fertilize_particles.png` | FX | overlay | + +##### Images (tableau détaillé) + +| Asset | Usage | +|---|---| +| `soil_rich.png` | tuile | + +##### Vidéos (tableau détaillé) + +| Asset | Usage | Durée | +|---|---|---:| +| `fertilize_fx.webm` | feedback | 0.8s | + +##### Animations (tableau détaillé) + +| Animation | Déclencheur | Notes | +|---|---|---| +| poussière | action | 0.6s | + +##### Couleurs (tableau détaillé) + +| Token | Valeur | Usage | +|---|---|---| +| `soil_brown` | #4E342E | sol | + +##### Textes (tableau détaillé) + +| Clé | FR | EN | +|---|---|---| +| `tool.fertilize` | Engrais | Fertilize | +| `case.fertilized` | Sol fertilisé | Soil fertilized | + +##### Formes (tableau détaillé) + +| Élément | Forme | Notes | +|---|---|---| +| Curseur | rond | outil | diff --git a/docs/specs/case_monde.md b/docs/specs/case_monde.md index 2a88d81..6624235 100644 --- a/docs/specs/case_monde.md +++ b/docs/specs/case_monde.md @@ -126,3 +126,428 @@ function getTravelCost(case): - **Couleurs** : Blanc (Alpha). - **Textes** : Coordonnées X,Y. - **Formes** : Carré/Hexagone. + +## Définition + +| Champ | Valeur | +|---|---| +| Concept | Case “monde” : tuile de la grille globale supportant sites fixes (zoo/ville/labo) et widgets fonctionnels (compteurs, upgrade carte). | +| Rôle | Assurer une base de navigation camion (node du graphe), afficher des informations au survol, et porter des modificateurs de traversée (biome). | +| Portée | Carte du monde, immuable structurellement (les cases persistent), contenu majoritairement fixe. | +| Contrainte | Routes et coûts de déplacement calculés à la volée (pas de cache/mémorisation) ; aucun péage/incidence silencieux (message + event). | + +## Fonctions (tableau détaillé) + +| Fonction | Déclencheur | Entrées | Sorties | Règles | Observabilité | +|---|---|---|---|---|---| +| Survol case monde | hover | x,y | tooltip | affiche coord + type | Event `HOVER_WORLD_CASE` | +| Résoudre contenu | rendu | case | marker | type site/compteur | Event `WORLD_CASE_RENDERED` | +| Calculer coût traversée | path camion | biome | cost | multiplicateur biome | Event `WORLD_TRAVEL_COST_COMPUTED` | +| Marquer route visible | trafic | count | route flag | si trafic > seuil | Event `WORLD_ROUTE_MARKED` | + +## Icone de base + +| Élément | Spécification | +|---|---| +| Représentation | Tuile + pin | +| Couleur dominante | selon biome | +| Variantes | `icon_world_tile.png`, `icon_world_pin.png` | +| États | normal, highlighted, route | + +## Interactions (tableau détaillé) + +| Interaction | Type | Préconditions | Étapes UI | Résultat | Erreurs / Messages | +|---|---|---|---|---|---| +| Hover | Consultation | - | survol | tooltip | - | +| Clic site | Navigation | case contient site | clic | ouvre panneau | `ZONE_NOT_EXPLORED` | + +## Annexes Techniques + +### 1. Données et États (tableau détaillé) + +| Donnée / État | Type | Exemple | Source | Contraintes | +|---|---|---|---|---| +| `content.site_id` | uuid_v4 \| null | `uuid_v4` | DB | null si vide | +| `content.site_type` | enum \| null | `city` | DB | `zoo/city/lab` | +| `content.counter_type` | enum \| null | `animals_for_sale` | DB | compteur | +| `traffic.trucks_passed` | int | 0 | DB | cumul | +| `travel_cost_multiplier` | float | 1.0 | config | >=1.0 | + +#### Caractéristiques Initiales (tableau détaillé) + +| Caractéristique | Valeur initiale | Unité | Notes | +|---|---:|---|---| +| Trafic | 0 | count | init | +| Péage | 0 | % | par défaut | + +#### Scores Initiaux (tableau détaillé) + +| Score | Valeur initiale | Plage | Impact | +|---|---:|---|---| +| Valeur de passage | 0 | 0..100 | influence routes | + +### 2. Cycles de Vie et Apparition (tableau détaillé) + +| Phase | Déclencheur | Entrées | Sorties | Invariants | +|---|---|---|---|---| +| Génération | monde | seed | cases | immuables | +| Marquage routes | trafic | count | flag | observable | + +#### Conditions d'Apparition (tableau détaillé) + +| Condition | Seuil | Opérateur | Résultat | +|---|---:|---|---| +| Génération monde | true | est | case existe | + +#### 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 | +|---|---|---| +| Routes visibles | Oui | persist reset | + +### 3. Impacts Environnementaux + +#### Impact Température (tableau détaillé) + +| Condition | Effet | Notes | +|---|---|---| +| Orage | vitesse camion - | météo | + +#### Impact Milieu (Biome) (tableau détaillé) + +| Biome | Effet | Notes | +|---|---|---| +| montagne | cost + | traversée | + +#### Impact Saisons (tableau détaillé) + +| Saison | Effet | Notes | +|---|---|---| +| hiver | neige | visuel | + +#### Impact Heure / Jour-Nuit (tableau détaillé) + +| Période | Effet | Notes | +|---|---|---| +| nuit | luminosité - | rendu | + +### 4. Impacts Biologiques et Sociaux + +#### Impact Reproduction (tableau détaillé) + +| Facteur | Effet sur taux | Condition | +|---|---|---| +| faune décor | 0 | visuel | + +#### Impact Mort (tableau détaillé) + +| Cas | Effet | Condition | +|---|---|---| +| cycle naturel | 0 | décor | + +#### Impact Nourriture (tableau détaillé) + +| Ressource | Effet | Condition | +|---|---|---| +| baies | décor | région | + +#### Impact Attractivité(Visiteurs (tableau détaillé) + +| Action/État | Gain | Rayon | Notes | +|---|---:|---:|---| +| proche ville | valeur passage + | monde | trafic | + +#### Impact Attractivité Animaux) (tableau détaillé) + +| Action/État | Effet animaux | Condition | +|---|---|---| +| - | neutre | - | + +#### Impact Valeur (tableau détaillé) + +| Facteur | Variation | Condition | +|---|---:|---| +| lore terrain | + | descriptif | + +### 5. Impacts Logistiques et Économiques + +#### Vitesse (Camion) (tableau détaillé) + +| Paramètre | Effet | Condition | +|---|---|---| +| frottement | vitesse - | sable | + +#### Vitesse (Nurserie) (tableau détaillé) + +| Paramètre | Effet | Condition | +|---|---|---| +| - | neutre | - | + +#### Vitesse (Accueil) (tableau détaillé) + +| Paramètre | Effet | Condition | +|---|---|---| +| - | neutre | - | + +#### Vitesse (Recherche) (tableau détaillé) + +| Paramètre | Effet | Condition | +|---|---|---| +| route pavée | +10% | upgrade | + +#### Vitesse (Labo) (tableau détaillé) + +| Paramètre | Effet | Condition | +|---|---|---| +| - | neutre | - | + +#### Vitesse (Visite) (tableau détaillé) + +| Paramètre | Effet | Condition | +|---|---|---| +| flux migratoire | visuel | overlay | + +#### Dépenses (Billeterie) (tableau détaillé) + +| Poste | Coût | Unité | Condition | +|---|---:|---|---| +| péage | 1 | % | zones | + +#### 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 | +|---|---:|---|---| +| usure | 1 | coins | lore | + +#### 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 | animaux | visite | - | + +##### Trajet Visiteurs vers/depuis les boutiques (tableau détaillé) + +| Source | Destination | Déclencheur | Effet | +|---|---|---|---| +| zoo | boutiques | besoins | - | + +##### Trajet Visiteurs vers/depuis la billeterie (entrées/sorties du zoo) (tableau détaillé) + +| Source | Destination | Déclencheur | Effet | +|---|---|---|---| +| zoo | sortie | fin | - | + +### 6. Événements + +#### Événements du Jeu (tableau détaillé) + +| Event | Déclencheur | Payload | Effet | +|---|---|---|---| +| `ZONE_DISCOVERED` | reveal | coord | visible | +| `WORLD_ROUTE_MARKED` | trafic | count | route | + +#### Événements du Carte (tableau détaillé) + +| Event | Déclencheur | Effet | +|---|---|---| +| `HOVER_WORLD_CASE` | hover | tooltip | + +#### Événements du Zoo (tableau détaillé) + +| Event | Déclencheur | Effet | +|---|---|---| +| `WORLD_CASE_RENDERED` | render | marker | + +#### Événements du Ville / Visiteur (tableau détaillé) + +| Event | Déclencheur | Effet | +|---|---|---| +| `WORLD_TRAVEL_COST_COMPUTED` | route | cost | + +#### Événements du Visiteur (tableau détaillé) + +| Event | Déclencheur | Effet | +|---|---|---| +| `ZONE_NOT_EXPLORED` | click | denied | + +#### Événements du Joueur (tableau détaillé) + +| Event | Déclencheur | Effet | +|---|---|---| +| `PLAYER_CLICKS_SITE` | click | open | + +### 7. Progression + +#### Tableau des Upgrades (tableau détaillé) + +| Niveau | Coût | Effet | Débloque | +|---|---:|---|---| +| 1 | 1000 | route pavée +10% | speed | + +### 8. Logique et Interfaces + +#### Pseudo-code Impacts (tableau détaillé) + +| Fonction | Entrées | Sorties | Notes | +|---|---|---|---| +| `getTravelCost` | case | float | multiplicateur | + +#### Messages d'Infos / Alerte (tableau détaillé) + +| ID | Niveau | Message | Condition | +|---|---|---|---| +| `ZONE_DISCOVERED` | Info | "Nouvelle zone découverte." | reveal | +| `ZONE_NOT_EXPLORED` | Warning | "Zone non explorée." | fog | + +## Annexes UX/UI + +### 1. Expérience Utilisateur (UX) + +#### Description UX (tableau détaillé) + +| Parcours | But | Friction | Réduction clics | +|---|---|---|---| +| Explorer | trouver sites | info | tooltip sur hover | + +#### Description UI (tableau détaillé) + +| Composant | Contenu | États | +|---|---|---| +| Highlight | outline | hover | +| Tooltip | coord/type | visible | + +#### Emplacement (tableau détaillé) + +| Zone UI | Position | Notes | +|---|---|---| +| Carte monde | cases | iso | + +#### Intégration (tableau détaillé) + +| Intégration | Contrat | Notes | +|---|---|---| +| `carte_monde.md` | usage | world | + +#### Navigation (tableau détaillé) + +| Action | Chemin | Résultat | +|---|---|---| +| Hover | souris | tooltip | + +#### Événements (tableau détaillé) + +| Event UI | Déclencheur | Effet | +|---|---|---| +| `HOVER_WORLD_CASE` | hover | tooltip | + +#### Assets Skinables + +##### Musiques (tableau détaillé) + +| Asset | Usage | Durée | Notes | +|---|---|---:|---| +| `world_exploration_loop.mp3` | monde | loop | discret | + +##### Sons (tableau détaillé) + +| Asset | Usage | Volume | +|---|---|---| +| `hover_soft.mp3` | hover | bas | + +##### Graphiques (tableau détaillé) + +| Asset | Usage | Contraintes | +|---|---|---| +| `world_tile_highlight.png` | outline | alpha | + +##### Images (tableau détaillé) + +| Asset | Usage | +|---|---| +| `biome_texture.png` | fond | + +##### Vidéos (tableau détaillé) + +| Asset | Usage | Durée | +|---|---|---:| +| `shine_hover.webm` | hover | 0.6s | + +##### Animations (tableau détaillé) + +| Animation | Déclencheur | Notes | +|---|---|---| +| glow | hover | léger | + +##### Couleurs (tableau détaillé) + +| Token | Valeur | Usage | +|---|---|---| +| `hover_white` | #FFFFFF | outline | + +##### Textes (tableau détaillé) + +| Clé | FR | EN | +|---|---|---| +| `world.coords` | Coordonnées X,Y | Coordinates X,Y | + +##### Formes (tableau détaillé) + +| Élément | Forme | Notes | +|---|---|---| +| Tuile | losange | iso | diff --git a/docs/specs/case_zoo.md b/docs/specs/case_zoo.md index 05595f5..259cab9 100644 --- a/docs/specs/case_zoo.md +++ b/docs/specs/case_zoo.md @@ -165,3 +165,454 @@ function checkAnimalDisappearance(case): - **Couleurs** : Blanc. - **Textes** : "Case [X,Y]". - **Formes** : Carré. + +## Définition + +| Champ | Valeur | +|---|---| +| Concept | Case “zoo” : spécialisation de `case_generique` avec contraintes d’occupation, métriques de visite, et signaux qualité/propreté. | +| Rôle | Supporter le gameplay de placement (animal/bâtiment), le pathfinding (walkable/cost), et la logique “animal observé” (last_visit_time). | +| Portée | Une tuile de la carte du zoo, identifiée par coordonnées, rendue en isométrie. | +| Contrainte | Mesures dérivées (heatmap, quality_score) calculées à la volée ; pas de fallback : si `content_type` incohérent => log + erreur. | + +## Fonctions (tableau détaillé) + +| Fonction | Déclencheur | Entrées | Sorties | Règles | Observabilité | +|---|---|---|---|---|---| +| Sélectionner case | clic | x,y | menu contexte | actions selon contenu | Event `SELECT_ZOO_CASE` | +| Résoudre walkable | update terrain | content_type | `pathing.walkable` | bâtiment/animal => false (sauf exceptions) | Event `PATHING_UPDATED` | +| Mettre à jour last_visit_time | visiteur observe | visitor_id | timestamp | observe != traverse | Event `CASE_VISITED` | +| Accumuler heatmap | passage | dt | heatmap_score | 0..100 | Event `HEATMAP_UPDATED` | +| Dégrader propreté | déchets | visitor behavior | cleanliness ↓ | clamp 0..100 | Event `CASE_DIRTY` | +| Mettre à jour qualité | compat animal/terrain | biome/temp | quality_score | signaux visuels | Event `CASE_QUALITY_UPDATED` | + +## Icone de base + +| Élément | Spécification | +|---|---| +| Représentation | Tuile losange + marqueur | +| Couleur dominante | dépend biome/terrain | +| Variantes | `icon_tile.png`, `icon_tile_dirty.png` | +| États | `dirty`, `fertilized`, `frozen`, `muddy` | + +## Interactions (tableau détaillé) + +| Interaction | Type | Préconditions | Étapes UI | Résultat | Erreurs / Messages | +|---|---|---|---|---|---| +| Construire ici | Action | case vide | menu → item → place | occupancy building | `CELL_OCCUPIED` | +| Placer animal | Action | enclos compatible | drag/drop | occupancy animal | `BIOME_INCOMPATIBLE` | +| Nettoyer | Action | sale | outil nettoyage | cleanliness ↑ | `NO_STAFF` | + +## Personnage contextuel (événements & interaction) +La case est actionnée via la sélection sur la carte du zoo. Le personnage contextuel attendu est le **joueur actif** (avatar) : voir `avatar_joueur.md`. + +### Déclencheurs (exemples) +| Event / Message | Condition | Effet UI personnage | +|---|---|---| +| `SELECT_ZOO_CASE` | clic case | avatar présent dans le panneau contexte | +| `CELL_OCCUPIED` / `BIOME_INCOMPATIBLE` | action refusée | avatar affiche la cause et l’action suivante possible | +| `CASE_DIRTY` | case sale | avatar propose CTA “Nettoyer” (si action permise) | + +### Skins & thèmes +Le rendu du portrait/overlay suit `theme.md` et `inventaire_skins.md`. + +## Annexes Techniques + +### 1. Données et États (tableau détaillé) + +| Donnée / État | Type | Exemple | Source | Contraintes | +|---|---|---|---|---| +| `last_visit_time` | timestamp \| null | - | DB | UTC | +| `visit_count_total` | int | 120 | DB | cumul | +| `visit_count_day` | int | 12 | DB | reset day | +| `heatmap_score` | float | 35.5 | calcul | 0..100 | +| `quality_score` | float | 92.0 | calcul | 0..100 | +| `pathing.walkable` | boolean | true | calcul | dépend contenu | +| `pathing.movement_cost` | float | 1.2 | config | >=1.0 | +| `zoo_specific_flags[]` | enum[] | `near_entry` | DB | - | + +#### Caractéristiques Initiales (tableau détaillé) + +| Caractéristique | Valeur initiale | Unité | Notes | +|---|---:|---|---| +| Propreté | 100 | pts | init | +| Fertilité | 0 | pts | init | +| Coût marche herbe | 1.2 | coef | default | + +#### Scores Initiaux (tableau détaillé) + +| Score | Valeur initiale | Plage | Impact | +|---|---:|---|---| +| Passages | 0 | 0..∞ | heatmap | +| Qualité | 100 | 0..100 | rendu | + +### 2. Cycles de Vie et Apparition (tableau détaillé) + +| Phase | Déclencheur | Entrées | Sorties | Invariants | +|---|---|---|---|---| +| Création | génération map | biome | case | existe toujours | +| Occupation | placement | entity | occupancy | un principal | +| Nettoyage | action | outil | propreté ↑ | clamp | + +#### Conditions d'Apparition (tableau détaillé) + +| Condition | Seuil | Opérateur | Résultat | +|---|---:|---|---| +| Génération zoo | true | est | case créée | + +#### Conditions de Disparition (tableau détaillé) + +| Condition | Seuil | Opérateur | Résultat | +|---|---:|---|---| +| - | - | - | case persiste | + +#### Hérédité (tableau détaillé) + +| Élément | Hérité | Règle | +|---|---|---| +| Sol fertilisé | Oui | garde bonus soft reset | +| Heatmap | Non | recalcul | + +### 3. Impacts Environnementaux + +#### Impact Température (tableau détaillé) + +| Condition | Effet case | Notes | +|---|---|---| +| < 0°C | flag `frozen` | givre | + +#### Impact Milieu (Biome) (tableau détaillé) + +| Biome | Effet | Notes | +|---|---|---| +| prairie | herbe repousse | nourriture | + +#### Impact Saisons (tableau détaillé) + +| Saison | Effet | Notes | +|---|---|---| +| hiver | `snowy` | visuel | + +#### Impact Heure / Jour-Nuit (tableau détaillé) + +| Période | Effet | Notes | +|---|---|---| +| nuit | ombres tournent | rendu | + +### 4. Impacts Biologiques et Sociaux + +#### Impact Reproduction (tableau détaillé) + +| Facteur | Effet sur taux | Condition | +|---|---|---| +| buissons | +5% | proximité enclos | + +#### Impact Mort (tableau détaillé) + +| Cas | Effet | Condition | +|---|---|---| +| odeur | stress + | 24h in-game | + +#### Impact Nourriture (tableau détaillé) + +| Ressource | Effet | Condition | +|---|---|---| +| pâturage | herbe→terre | animal broute | + +#### Impact Attractivité(Visiteurs (tableau détaillé) + +| Action/État | Gain | Rayon | Notes | +|---|---:|---:|---| +| point de vue | + | 4 cases | hauteur | + +#### Impact Attractivité Animaux) (tableau détaillé) + +| Action/État | Effet animaux | Condition | +|---|---|---| +| foule | stress + | densité | + +#### Impact Valeur (tableau détaillé) + +| Facteur | Variation | Condition | +|---|---:|---| +| near_entry | + | premium spot | + +### 5. Impacts Logistiques et Économiques + +#### Vitesse (Camion) (tableau détaillé) + +| Paramètre | Effet | Condition | +|---|---|---| +| revêtement | vitesse ± | chemin/pavés | + +#### Vitesse (Nurserie) (tableau détaillé) + +| Paramètre | Effet | Condition | +|---|---|---| +| placement mode | overlay | sortie bébé | + +#### Vitesse (Accueil) (tableau détaillé) + +| Paramètre | Effet | Condition | +|---|---|---| +| placement mode | overlay | sortie animal | + +#### Vitesse (Recherche) (tableau détaillé) + +| Paramètre | Effet | Condition | +|---|---|---| +| - | neutre | - | + +#### Vitesse (Labo) (tableau détaillé) + +| Paramètre | Effet | Condition | +|---|---|---| +| - | neutre | - | + +#### Vitesse (Visite) (tableau détaillé) + +| Paramètre | Effet | Condition | +|---|---|---| +| cost | route | A* | + +#### Dépenses (Billeterie) (tableau détaillé) + +| Poste | Coût | Unité | Condition | +|---|---:|---|---| +| nettoyage | 5 | coins | si sale | + +#### Dépenses (Boutiques) (tableau détaillé) + +| Poste | Coût | Unité | Condition | +|---|---:|---|---| +| maintenance sol | 1 | coin/case | option | + +#### Dépenses (Visiteurs) (tableau détaillé) + +| Poste | Coût | Unité | Condition | +|---|---:|---|---| +| déchets | temps | min | propreté | + +#### Dépenses (Employés) (tableau détaillé) + +| Poste | Coût | Unité | Condition | +|---|---:|---|---| +| passage staff | temps | min | path | + +#### Dépenses (Boutiques) (tableau détaillé) + +| Poste | Coût | Unité | Condition | +|---|---:|---|---| +| section dupliquée | 1 | coin | conservée | + +#### Dépenses (Nurseries) (tableau détaillé) + +| Poste | Coût | Unité | Condition | +|---|---:|---|---| +| hygiène | 1 | coin | lore | + +#### Dépenses (Nourriture) (tableau détaillé) + +| Poste | Coût | Unité | Condition | +|---|---:|---|---| +| pâturage | 0 | - | herbe | + +#### Dépenses (Acceuil des animaux) (tableau détaillé) + +| Poste | Coût | Unité | Condition | +|---|---:|---|---| +| quarantaine | 1 | coin | lore | + +#### Dépenses (Camion) (tableau détaillé) + +| Poste | Coût | Unité | Condition | +|---|---:|---|---| +| usure | 1 | coin | lore | + +#### Trajet Visiteurs + +##### Trajet Visiteurs vers/depuis la ville (tableau détaillé) + +| Source | Destination | Déclencheur | Effet | +|---|---|---|---| +| entrée | allées | ticket | spawn | + +##### Trajet Visiteurs vers/depuis les animaux (tableau détaillé) + +| Source | Destination | Déclencheur | Effet | +|---|---|---|---| +| allée | enclos | curiosité | observe | + +##### Trajet Visiteurs vers/depuis les boutiques (tableau détaillé) + +| Source | Destination | Déclencheur | Effet | +|---|---|---|---| +| enclos | boutique | faim | achat | + +##### Trajet Visiteurs vers/depuis la billeterie (entrées/sorties du zoo) (tableau détaillé) + +| Source | Destination | Déclencheur | Effet | +|---|---|---|---| +| allées | sortie | budget 0 | despawn | + +### 6. Événements + +#### Événements du Jeu (tableau détaillé) + +| Event | Déclencheur | Payload | Effet | +|---|---|---|---| +| `CASE_DIRTY` | déchet | coord | flag | +| `PATH_BLOCKED` | obstacle | coord | reroute | + +#### Événements du Carte (tableau détaillé) + +| Event | Déclencheur | Effet | +|---|---|---| +| `PATHING_UPDATED` | terrain | coûts | + +#### Événements du Zoo (tableau détaillé) + +| Event | Déclencheur | Effet | +|---|---|---| +| `CASE_QUALITY_UPDATED` | compat | rendu | + +#### Événements du Ville / Visiteur (tableau détaillé) + +| Event | Déclencheur | Effet | +|---|---|---| +| `CASE_VISITED` | observe | last_visit_time | + +#### Événements du Visiteur (tableau détaillé) + +| Event | Déclencheur | Effet | +|---|---|---| +| `VISITOR_REROUTE` | blocage | route | + +#### Événements du Joueur (tableau détaillé) + +| Event | Déclencheur | Effet | +|---|---|---| +| `PLAYER_CLEANS_TILE` | outil | propreté + | + +### 7. Progression + +#### Tableau des Upgrades (tableau détaillé) + +| Niveau | Coût | Effet | Débloque | +|---|---:|---|---| +| Pavés | 250 | cost marche 1.0 | route | + +### 8. Logique et Interfaces + +#### Pseudo-code Impacts (tableau détaillé) + +| Fonction | Entrées | Sorties | Notes | +|---|---|---|---| +| `checkAnimalDisappearance` | case, now | bool | visite | +| `computeMovementCost` | terrain | float | >=1.0 | + +#### Messages d'Infos / Alerte (tableau détaillé) + +| ID | Niveau | Message | Condition | +|---|---|---|---| +| `CASE_DIRTY` | Info | "Une case est sale." | déchet | +| `PATH_BLOCKED` | Warning | "Chemin bloqué." | reroute | +| `ANIMAL_NOT_VISITED` | Warning | "Animal non observé." | timeout | + +## Annexes UX/UI + +### 1. Expérience Utilisateur (UX) + +#### Description UX (tableau détaillé) + +| Parcours | But | Friction | Réduction clics | +|---|---|---|---| +| Ouvrir menu case | agir vite | contexte | menu auto-adapté | +| Nettoyer | propreté | outil | raccourci dans menu | + +#### Description UI (tableau détaillé) + +| Composant | Contenu | États | +|---|---|---| +| Menu contextuel | actions | selon contenu | +| Highlight | outline | hover/selected | + +#### Emplacement (tableau détaillé) + +| Zone UI | Position | Notes | +|---|---|---| +| Tuile | monde | iso | + +#### Intégration (tableau détaillé) + +| Intégration | Contrat | Notes | +|---|---|---| +| `carte_zoo.md` | sélection | panneau | + +#### Navigation (tableau détaillé) + +| Action | Chemin | Résultat | +|---|---|---| +| Sélection | clic | menu | + +#### Événements (tableau détaillé) + +| Event UI | Déclencheur | Effet | +|---|---|---| +| `SELECT_ZOO_CASE` | clic | open | + +#### Assets Skinables + +##### Musiques (tableau détaillé) + +| Asset | Usage | Durée | Notes | +|---|---|---:|---| +| `select_tile_click.mp3` | sélection | 0.2s | discret | + +##### Sons (tableau détaillé) + +| Asset | Usage | Volume | +|---|---|---| +| `select_soft.mp3` | clic | bas | + +##### Graphiques (tableau détaillé) + +| Asset | Usage | Contraintes | +|---|---|---| +| `tile_outline.png` | highlight | overlay | + +##### Images (tableau détaillé) + +| Asset | Usage | +|---|---| +| `context_menu_icon.png` | menu | + +##### Vidéos (tableau détaillé) + +| Asset | Usage | Durée | +|---|---|---:| +| `tile_select.webm` | feedback | 0.5s | + +##### Animations (tableau détaillé) + +| Animation | Déclencheur | Notes | +|---|---|---| +| bounce contenu | sélection | léger | + +##### Couleurs (tableau détaillé) + +| Token | Valeur | Usage | +|---|---|---| +| `tile_white` | #FFFFFF | outline | + +##### Textes (tableau détaillé) + +| Clé | FR | EN | +|---|---|---| +| `tile.coords` | Case {x},{y} | Tile {x},{y} | + +##### Formes (tableau détaillé) + +| Élément | Forme | Notes | +|---|---|---| +| Tuile | losange | iso | diff --git a/docs/specs/centre_recherche.md b/docs/specs/centre_recherche.md index 7010593..40588d1 100644 --- a/docs/specs/centre_recherche.md +++ b/docs/specs/centre_recherche.md @@ -233,6 +233,25 @@ function updateResearch(center): | Consommer RP | Action | RP ≥ coût | Arbre/Carte monde → déverrouiller | unlock | `INSUFFICIENT_RESEARCH_POINTS` | | Affecter chercheurs | Action | slots < 3 | Panel centre → slots | production + | `RESEARCH_CENTER_FULL` | +## Personnage contextuel (événements & interaction) +Voir `chercheur.md`. + +### Affichage +Le chercheur s’affiche lorsque : +- le module est **actionné** (ouverture du centre, affectation, collecte, upgrade) ; +- un **événement** de recherche survient (gain RP, percée, déverrouillage). + +### Déclencheurs (exemples) +| Event | Condition | Effet UI personnage | +|---|---|---| +| `OPEN_RESEARCH` | ouverture panel | portrait + production/h + slots | +| `RESEARCH_TICK` / `RESEARCH_UNIT_GAINED` | tick | bulles science + feedback UI | +| `RESEARCH_BOOST` | percée | bulle “Percée” + détails | +| `INSUFFICIENT_RESEARCH_POINTS` | dépense refusée | bulle cause + CTA “Collecter / Attendre” | + +### Skins & thèmes +Uniforme et accessoires suivent `theme.md` ; variantes via `inventaire_skins.md` si skins de staff. + ## Annexes Techniques ### 1. Données et États (tableau détaillé) diff --git a/docs/specs/chemin.md b/docs/specs/chemin.md index 1f210ea..936f97d 100644 --- a/docs/specs/chemin.md +++ b/docs/specs/chemin.md @@ -53,3 +53,475 @@ Les chemins sont des cases aménagées permettant aux visiteurs et au staff de s ## 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 | diff --git a/docs/specs/guichetiere.md b/docs/specs/guichetiere.md new file mode 100644 index 0000000..1108d8f --- /dev/null +++ b/docs/specs/guichetiere.md @@ -0,0 +1,57 @@ +# Guichetière (Billetterie) + +## 1. Définition +Personnage de service associé à la billetterie. Il matérialise la vente de tickets (file, contrôle capacité) et sert de personnage contextuel lors des événements d’entrée/saturation/VIP. + +## 2. Fonctions +* **Traitement file** : Représente le débit du guichet (entrées par tick). +* **Gestion saturation** : Signale `ZOO_FULL`, `QUEUE_LONG`. +* **Accueil visiteurs** : Déclenche des feedbacks visuels cohérents avec le thème. + +## 3. Icone +* **Représentation :** Ticket + tampon. +* **Couleur dominante :** Rouge (ticket) + or (pièces). + +## 4. Interactions +* **Clic billetterie** : ouvre le panneau stats (prix, capacité, file). +* **Clic sur alerte** : deep-link vers la billetterie et met en avant la cause (capacité, file). + +## 5. Annexes Techniques + +### Données (JSON) +```json +{ + "employee_id": "ticket_clerk_01", + "type": "guichetiere", + "name": "Nina", + "salary": 0, + "hire_cost": 0, + "assigned_building": "ticket_booth_uuid", + "state": "enum (IDLE, SELLING, VIP_PROCESS, OVERLOADED)", + "iso_x": "integer", + "iso_y": "integer", + "z_index": "integer" +} +``` + +### Règles Métier +* Le personnage est lié à la `billeterie.md` (bâtiment fixe). +* Les événements `ZOO_FULL` et `QUEUE_LONG` déclenchent une UI explicite (pas de fallback). + +# 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. + +## Affichage contextuel (modules) +- **Billetterie** (`billeterie.md`) : clic panneau, saturation, file longue, arrivée bus VIP. +- **Chemins** (`chemin.md`) : si la suppression de chemins casse l’accès entrée (erreur `CANNOT_REMOVE_BLOCKING`), la guichetière peut être le personnage contextuel du problème “entrée inaccessible”. + +## Skins & thèmes +* Uniforme/guichet dépend du thème (`theme.md`). +* Accessoires (casquette, badge, ticket) via `skin.md` / `inventaire_skins.md` si activé. diff --git a/docs/specs/inventaire_bebe_animaux.md b/docs/specs/inventaire_bebe_animaux.md index 69b5738..5bbdf6a 100644 --- a/docs/specs/inventaire_bebe_animaux.md +++ b/docs/specs/inventaire_bebe_animaux.md @@ -120,3 +120,483 @@ function getBabyBonus(baby): - **Couleurs** : Identiques Adulte. - **Textes** : "Bébé". - **Formes** : Rond. + +## Définition + +| Champ | Valeur | +|---|---| +| Concept | Inventaire/registre des variantes “bébé” par espèce (mapping adulte → bébé), et vue de gestion des bébés possédés (nurserie + zoo). | +| Rôle | Permettre l’identification visuelle, l’accès rapide aux fiches bébés, et l’affichage des signaux de risque (froid, faim, biome) sans masquer l’état. | +| Portée | Catalogue (par type d’animal) + instances (bébés présents) dans un zoo. | +| Contrainte | Aucun compteur de vues/revenus par bébé (pas d’analytics) ; calculs et filtres à la volée, sans cache/mémorisation. | + +## Fonctions (tableau détaillé) + +| Fonction | Déclencheur | Entrées | Sorties | Règles | Observabilité | +|---|---|---|---|---|---| +| Résoudre variante bébé | rendu / fiche | `species_id` | `baby_sprite_set_id` | 1 adulte → 1 bébé, stable | Log si sprite manquant | +| Lister bébés possédés | ouverture inventaire | `zoo_id` | liste | tri stable (danger > croissance > rareté) | Event `OPEN_BABY_INVENTORY` | +| Filtrer “en danger” | toggle UI | états (temp, faim, santé) | sous-liste | critères explicites (seuils) | Event `FILTER_BABY_DANGER` | +| Afficher potentiel génétique | fiche bébé | genetics | étoiles grises | informatif, non “best-effort” | Event `BABY_GENETIC_VIEWED` | +| Deep-link vers bébé | notif/slot | `animal_id` | navigation | ouvre nurserie/zoom case | Event `NAVIGATE_TO_BABY` | +| Calculer bonus mignonnerie | tick logique | nb bébés distincts | mod boutique | bonus borné, condition “simultané” | Event `CUTE_BONUS_APPLIED` | + +## Icone de base + +| Élément | Spécification | +|---|---| +| Représentation | Icône tétine/biberon + badge “B” | +| Couleur dominante | Pastel (selon thème) | +| Variantes | `icon_baby.png`, `icon_bottle.png`, `icon_pacifier.png` | +| États | `danger_cold` (flocon), `danger_hunger` (biberon), `sleeping` (zzz) | + +## Interactions (tableau détaillé) + +| Interaction | Type | Préconditions | Étapes UI | Résultat | Erreurs / Messages | +|---|---|---|---|---|---| +| Ouvrir inventaire bébés | Consultation | - | menu inventaire → bébés | liste affichée | - | +| Ouvrir fiche bébé | Consultation | bébé listé | clic ligne | panneau détail | `BABY_NOT_FOUND` | +| Filtrer “en danger” | Consultation | - | toggle | liste filtrée | - | +| Aller au bébé | Navigation | position/slot connu | bouton “Voir” | zoom + focus | `LOCATION_UNAVAILABLE` | +| Comparer adulte/bébé | Consultation | espèce connue | onglet | mapping visible | - | + +## Personnage contextuel (événements & interaction) +Voir `nurse.md`. + +### Affichage +La nurse s’affiche lorsque : +- le module est **actionné** (ouverture inventaire, filtre danger, navigation “Voir bébé”) ; +- un **événement** de bébé survient (naissance, danger, passage adulte). + +### Déclencheurs (exemples) +| Event | Condition | Effet UI personnage | +|---|---|---| +| `OPEN_BABY_INVENTORY` | ouverture | portrait nurse + rappel des priorités “danger” | +| `FILTER_BABY_DANGER` | toggle | bulle “Liste filtrée” + critères | +| `BABY_BORN` | naissance | bulle “Nouveau bébé” + CTA “Voir” | +| `BABY_DANGER` / `BABY_CRITICAL` | danger | bulle “Urgence” + CTA deep-link | +| `BABY_BECAME_ADULT` | transition | bulle “Devenu adulte” + CTA “Voir adulte” | + +### Skins & thèmes +Palette et accessoires suivent `theme.md` ; la nurse peut être skinnable via `inventaire_skins.md` (si des skins de staff existent). + +## Annexes Techniques + +### 1. Données et États (tableau détaillé) + +| Donnée / État | Type | Exemple | Source | Contraintes | +|---|---|---|---|---| +| `catalog.species_id` | string | `PANDA` | DB | enum | +| `catalog.baby_sprite_set_id` | string | `PANDA_BABY_SET` | assets | requis | +| `catalog.scale_factor` | float | 0.5 | config | 0.3..0.7 | +| `catalog.name_key` | string | `baby.PANDA` | i18n | FR/EN | +| `catalog.badges` | string[] | `["B"]` | config | - | +| `instance.animal_id` | uuid_v4 | `uuid_v4` | DB | - | +| `instance.nurserie_id` | uuid_v4 \| null | `uuid_v4` | DB | - | +| `instance.iso_x` | int \| null | 120 | DB | null si nurserie | +| `instance.iso_y` | int \| null | 88 | DB | null si nurserie | +| `instance.growth_progress` | float | 42.0 | DB | 0..100 | +| `instance.danger_flags` | string[] | `["COLD","HUNGER"]` | calcul | à la volée | +| `timestamps.updated_at` | timestamp | - | DB | UTC | + +#### Caractéristiques Initiales (tableau détaillé) + +| Caractéristique | Valeur initiale | Unité | Notes | +|---|---:|---|---| +| Compteur bébés | 0 | count | par zoo | +| Score maternité | 0 | points | indicateur interne | +| Bonus mignonnerie | 0 | % | dépend diversité | + +#### Scores Initiaux (tableau détaillé) + +| Score | Valeur initiale | Plage | Impact | +|---|---:|---|---| +| Diversité bébés | 0 | 0..∞ | bonus boutique “peluches” | +| Taux bébés en danger | 0% | 0..100% | gestion, pas d’analytics | + +### 2. Cycles de Vie et Apparition (tableau détaillé) + +| Phase | Déclencheur | Entrées | Sorties | Invariants | +|---|---|---|---|---| +| Apparition | naissance/achat œuf | espèce | bébé | mapping stable | +| Suivi | ouverture inventaire | zoo_id | liste | tri stable | +| Disparition | croissance/mort | animal | retiré de la vue bébés | historique conservé | + +#### Conditions d'Apparition (tableau détaillé) + +| Condition | Seuil | Opérateur | Résultat | +|---|---:|---|---| +| Naissance | true | est | bébé apparaît | +| Achat œuf | true | est | futur bébé (à éclosion) | + +#### Conditions de Disparition (tableau détaillé) + +| Condition | Seuil | Opérateur | Résultat | +|---|---:|---|---| +| Croissance | 100 | >= | bascule “adulte” | +| Mort | 0 santé | <= | retiré | + +#### Hérédité (tableau détaillé) + +| Élément | Hérité | Règle | +|---|---|---| +| Lien parents | Oui | fiche bébé → parents | +| Potentiel | Oui | affichage étoiles grises | + +### 3. Impacts Environnementaux + +#### Impact Température (tableau détaillé) + +| Condition | Effet inventaire | Notes | +|---|---|---| +| Froid/chaud | flag + icône flocon/soleil | clignote si critique | + +#### Impact Milieu (Biome) (tableau détaillé) + +| Biome | Effet inventaire | Notes | +|---|---|---| +| Incompatible | filtre “en danger” | signal fort | + +#### Impact Saisons (tableau détaillé) + +| Saison | Effet inventaire | Notes | +|---|---|---| +| Printemps | mise en avant naissances | tri optionnel | + +#### Impact Heure / Jour-Nuit (tableau détaillé) + +| Période | Effet inventaire | Notes | +|---|---|---| +| Nuit | état “Dort” | zzz | + +### 4. Impacts Biologiques et Sociaux + +#### Impact Reproduction (tableau détaillé) + +| Facteur | Effet sur taux | Condition | +|---|---|---| +| Bébé | 0 | non reproductible | + +#### Impact Mort (tableau détaillé) + +| Cas | Effet | Condition | +|---|---|---| +| Historique | tag “mort en bas âge” | informatif | + +#### Impact Nourriture (tableau détaillé) + +| Ressource | Effet | Condition | +|---|---|---| +| Faim | icône biberon | seuil faim | + +#### Impact Attractivité(Visiteurs (tableau détaillé) + +| Action/État | Gain | Rayon | Notes | +|---|---:|---:|---| +| Diversité bébés ≥ 10 | + | - | bonus boutique peluches | + +#### Impact Attractivité Animaux) (tableau détaillé) + +| Action/État | Effet animaux | Condition | +|---|---|---| +| - | - | - | + +#### Impact Valeur (tableau détaillé) + +| Facteur | Variation | Condition | +|---|---:|---| +| Potentiel | affichage estimé | basé génétique | + +### 5. Impacts Logistiques et Économiques + +#### Vitesse (Camion) (tableau détaillé) + +| Paramètre | Effet | Condition | +|---|---|---| +| - | - | - | + +#### Vitesse (Nurserie) (tableau détaillé) + +| Paramètre | Effet | Condition | +|---|---|---| +| Croissance | barre temps réel | refresh à la volée | + +#### Vitesse (Accueil) (tableau détaillé) + +| Paramètre | Effet | Condition | +|---|---|---| +| - | - | - | + +#### Vitesse (Recherche) (tableau détaillé) + +| Paramètre | Effet | Condition | +|---|---|---| +| - | - | - | + +#### Vitesse (Labo) (tableau détaillé) + +| Paramètre | Effet | Condition | +|---|---|---| +| - | - | - | + +#### Vitesse (Visite) (tableau détaillé) + +| Paramètre | Effet | Condition | +|---|---|---| +| Vedette | indicateur | bébé le plus consulté en jeu, sans analytics | + +#### Dépenses (Billeterie) (tableau détaillé) + +| Poste | Coût | Unité | Condition | +|---|---:|---|---| +| - | 0 | - | - | + +#### Dépenses (Boutiques) (tableau détaillé) + +| Poste | Coût | Unité | Condition | +|---|---:|---|---| +| Peluches | +5% ventes | % | diversité bébés ≥ 10 | + +#### Dépenses (Visiteurs) (tableau détaillé) + +| Poste | Coût | Unité | Condition | +|---|---:|---|---| +| Soins | estimation | coins | selon bébés malades | + +#### Dépenses (Employés) (tableau détaillé) + +| Poste | Coût | Unité | Condition | +|---|---:|---|---| +| Interventions | + | min | bébés en danger | + +#### 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 | +|---|---:|---|---| +| Slots | variable | coins | niveau | + +#### Dépenses (Nourriture) (tableau détaillé) + +| Poste | Coût | Unité | Condition | +|---|---:|---|---| +| Rations bébé | + | coins | métabolisme | + +#### 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 | +|---|---|---|---| +| - | - | - | - | + +##### Trajet Visiteurs vers/depuis les animaux (tableau détaillé) + +| Source | Destination | Déclencheur | Effet | +|---|---|---|---| +| Entrée | Bébé vedette | signal “mignonnerie” | route | + +##### Trajet Visiteurs vers/depuis les boutiques (tableau détaillé) + +| Source | Destination | Déclencheur | Effet | +|---|---|---|---| +| Bébé vedette | Boutique peluches | bonus actif | achat | + +##### Trajet Visiteurs vers/depuis la billeterie (entrées/sorties du zoo) (tableau détaillé) + +| Source | Destination | Déclencheur | Effet | +|---|---|---|---| +| - | - | - | - | + +### 6. Événements + +#### Événements du Jeu (tableau détaillé) + +| Event | Déclencheur | Payload | Effet | +|---|---|---|---| +| `OPEN_BABY_INVENTORY` | menu | - | UI | +| `FILTER_BABY_DANGER` | toggle | flags | UI | +| `NAVIGATE_TO_BABY` | clic | `animal_id` | zoom | + +#### Événements du Carte (tableau détaillé) + +| Event | Déclencheur | Effet | +|---|---|---| +| `BABY_MARKER_SHOW` | map open | marker | + +#### Événements du Zoo (tableau détaillé) + +| Event | Déclencheur | Effet | +|---|---|---| +| `CLICK_BABY` | clic | panneau | + +#### Événements du Ville / Visiteur (tableau détaillé) + +| Event | Déclencheur | Effet | +|---|---|---| +| - | - | - | + +#### Événements du Visiteur (tableau détaillé) + +| Event | Déclencheur | Effet | +|---|---|---| +| - | - | - | + +#### Événements du Joueur (tableau détaillé) + +| Event | Déclencheur | Effet | +|---|---|---| +| `PLAYER_OPENS_BABY_INVENTORY` | menu | UI | + +### 7. Progression + +#### Tableau des Upgrades (tableau détaillé) + +| Niveau | Coût | Effet | Débloque | +|---|---:|---|---| +| Nurserie 1 | 0 | slots base | gestion | +| Nurserie 3 | 400 | vitrine | nouveaux signaux | + +### 8. Logique et Interfaces + +#### Pseudo-code Impacts (tableau détaillé) + +| Fonction | Entrées | Sorties | Notes | +|---|---|---|---| +| `getBabyBonus` | baby | float | attractivité | +| `computeDangerFlags` | baby, env | string[] | à la volée | + +#### Messages d'Infos / Alerte (tableau détaillé) + +| ID | Niveau | Message | Condition | +|---|---|---|---| +| `BABY_BORN` | Info | "Un nouveau bébé est né." | naissance | +| `BABY_DANGER` | Warning | "Un bébé est en danger." | flags | + +## Annexes UX/UI + +### 1. Expérience Utilisateur (UX) + +#### Description UX (tableau détaillé) + +| Parcours | But | Friction | Réduction clics | +|---|---|---|---| +| Trouver bébés | suivi | dispersion | filtre danger + tri | +| Ouvrir fiche | actions | navigation | clic ligne + bouton voir | + +#### Description UI (tableau détaillé) + +| Composant | Contenu | États | +|---|---|---| +| Liste bébés | lignes + icônes | normal/danger | +| Badges danger | flocon/biberon/zzz | clignotant critique | +| Panneau détail | génétique + croissance | actions | + +#### Emplacement (tableau détaillé) + +| Zone UI | Position | Notes | +|---|---|---| +| Inventaire | menu | registre | +| Nurserie | slots | deep-link | + +#### Intégration (tableau détaillé) + +| Intégration | Contrat | Notes | +|---|---|---| +| `bebe_animal.md` | états bébé | flags | +| `nurserie.md` | slots | navigation | + +#### Navigation (tableau détaillé) + +| Action | Chemin | Résultat | +|---|---|---| +| Ouvrir | menu → bébés | liste | +| Filtrer danger | toggle | tri | +| Voir bébé | bouton | zoom | + +#### Événements (tableau détaillé) + +| Event UI | Déclencheur | Effet | +|---|---|---| +| `OPEN_BABY_INVENTORY` | menu | UI | +| `CLICK_BABY_ROW` | clic | panneau | + +#### Assets Skinables + +##### Musiques (tableau détaillé) + +| Asset | Usage | Durée | Notes | +|---|---|---:|---| +| `baby_inventory_loop.mp3` | inventaire | loop | doux | + +##### Sons (tableau détaillé) + +| Asset | Usage | Volume | +|---|---|---| +| `ui_toggle.mp3` | filtre | bas | +| `baby_chirp_01.mp3` | survol | bas | + +##### Graphiques (tableau détaillé) + +| Asset | Usage | Contraintes | +|---|---|---| +| `baby_badge_b.png` | badge | lisible | +| `baby_flag_cold.png` | flocon | contraste | +| `baby_flag_hunger.png` | biberon | contraste | + +##### Images (tableau détaillé) + +| Asset | Usage | +|---|---| +| `baby_list_bg.png` | fond liste | + +##### Vidéos (tableau détaillé) + +| Asset | Usage | Durée | +|---|---|---:| +| `baby_steps.webm` | décoratif | 1.5s | + +##### Animations (tableau détaillé) + +| Animation | Déclencheur | Notes | +|---|---|---| +| clignotement danger | critique | 0.6s | +| bounce badge | apparition | 0.4s | + +##### Couleurs (tableau détaillé) + +| Token | Valeur | Usage | +|---|---|---| +| `baby_pastel` | #A7D8FF | UI | +| `baby_danger` | #D32F2F | alerte | + +##### Textes (tableau détaillé) + +| Clé | FR | EN | +|---|---|---| +| `baby.inventory.title` | Bébés | Babies | +| `baby.inventory.danger` | En danger | In danger | + +##### Formes (tableau détaillé) + +| Élément | Forme | Notes | +|---|---|---| +| Ligne | rectangle arrondi | lisible | +| Badge | rond | constant | diff --git a/docs/specs/inventaire_skins.md b/docs/specs/inventaire_skins.md index 678616a..1960753 100644 --- a/docs/specs/inventaire_skins.md +++ b/docs/specs/inventaire_skins.md @@ -59,3 +59,473 @@ Interface de gestion permettant au joueur de visualiser, trier et équiper les * **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. + +## Définition + +| Champ | Valeur | +|---|---| +| Concept | Inventaire “Skins” : vue de possession + équipement de cosmétiques (avatar et zoo). | +| Rôle | Donner un accès rapide à l’équipement, au filtrage, et à la prévisualisation sans étapes inutiles. | +| Portée | UI profil/boutique ; impact avatar, bâtiments, décorations. | +| Contrainte | Pas de cache/mémorisation : état “équipé” lu comme source de vérité ; pas d’analytics ; aucune suppression/vente implicite. | + +## Fonctions (tableau détaillé) + +| Fonction | Déclencheur | Entrées | Sorties | Règles | Observabilité | +|---|---|---|---|---|---| +| Ouvrir inventaire | menu | `player_id` | page/grille | affiche items possédés + grisés | Event `OPEN_SKIN_INVENTORY` | +| Filtrer | UI | catégorie/thème/rareté | liste filtrée | filtres combinables | Event `FILTER_SKINS` | +| Trier | UI | critère | liste triée | stable | Event `SORT_SKINS` | +| Prévisualiser | clic item | `item_id` | preview | paper doll / rendu zoo | Event `PREVIEW_SKIN` | +| Équiper | clic “Équiper” | `item_id`, slot | `is_equipped=true` | un item équipé par slot | Event `EQUIP_SKIN` | +| Déséquiper | clic “Retirer” | slot | `is_equipped=false` | revient au skin de base explicite | Event `UNEQUIP_SKIN` | +| Synchroniser après achat | achat | receipt | inventaire maj | immédiat, sans cache | Event `SKIN_ACQUIRED` | + +## Icone de base + +| Élément | Spécification | +|---|---| +| Représentation | Cintre / coffre | +| Couleur dominante | Marron + or | +| Variantes | `icon_skin_hanger.png`, `icon_skin_chest.png` | +| États | normal, selected, disabled (non possédé) | + +## Interactions (tableau détaillé) + +| Interaction | Type | Préconditions | Étapes UI | Résultat | Erreurs / Messages | +|---|---|---|---|---|---| +| Ouvrir | Navigation | - | profil → skins | grille | - | +| Équiper item | Action | possédé | clic item → équiper | appliqué | `SKIN_NOT_OWNED` | +| Prévisualiser | Consultation | - | clic item | preview | - | +| Filtrer | Consultation | - | toggles | liste | - | +| Drag & drop | Action | option active | drag → drop | équipe | `DROP_INVALID` | + +## Personnage contextuel (événements & interaction) +Le module “Inventaire Skins” affiche le **joueur actif** via son avatar (voir `avatar_joueur.md`) comme personnage contextuel. + +### Affichage +L’avatar s’affiche lorsque : +- le module est **actionné** (ouverture inventaire, sélection d’un item, équipement/déséquipement) ; +- un **événement** lié aux skins survient (acquisition, équipement réussi/échoué). + +### Déclencheurs (exemples) +| Event | Condition | Effet UI personnage | +|---|---|---| +| `OPEN_SKIN_INVENTORY` | ouverture | avatar/paper doll visible, cohérent avec l’équipement courant | +| `PREVIEW_SKIN` | clic item | l’avatar adopte la prévisualisation (paper doll) | +| `EQUIP_SKIN` / `UNEQUIP_SKIN` | action | feedback visuel sur l’avatar + message | +| `SKIN_ACQUIRED` | achat/gain | bulle “Nouveau skin” + CTA “Équiper” | + +### Skins & thèmes +Le module applique `theme.md` et l’équipement de `inventaire_skins.md` sur l’avatar, sans inférer silencieusement un skin “par défaut”. + +## Annexes Techniques + +### 1. Données et États (tableau détaillé) + +| Donnée / État | Type | Exemple | Source | Contraintes | +|---|---|---|---|---| +| `inventory_id` | string | `inv_skins_` | DB | stable | +| `items[].item_id` | string | `skin_hat_01` | DB | id unique | +| `items[].acquired_at` | timestamp | - | DB | UTC | +| `items[].is_equipped` | boolean | true | DB | par slot | +| `items[].slot` | string | `HAT` | DB | enum | +| `items[].theme` | string | `JUNGLE` | config | enum | +| `items[].rarity` | string | `RARE` | config | enum | +| `capacity` | string \| int | `unlimited` | config | pas de limite par défaut | + +#### Caractéristiques Initiales (tableau détaillé) + +| Caractéristique | Valeur initiale | Unité | Notes | +|---|---:|---|---| +| Capacité | illimitée | - | règle existante | +| Slots avatar | 6 | count | ex: hat, top, bottom, shoes, accessory, back | +| Slots zoo | 8 | count | ex: sol, clôture, portes, UI, etc. | + +#### Scores Initiaux (tableau détaillé) + +| Score | Valeur initiale | Plage | Impact | +|---|---:|---|---| +| Skins possédés | 0 | 0..∞ | collection | +| Skins équipés | 0 | 0..slots | rendu | + +### 2. Cycles de Vie et Apparition (tableau détaillé) + +| Phase | Déclencheur | Entrées | Sorties | Invariants | +|---|---|---|---|---| +| Acquisition | achat/gain | item_id | inventaire +1 | pas de doublon | +| Équipement | action | slot | is_equipped | exclusivité slot | +| Déséquipement | action | slot | base | base explicite | + +#### Conditions d'Apparition (tableau détaillé) + +| Condition | Seuil | Opérateur | Résultat | +|---|---:|---|---| +| Achat skin | true | est | item ajouté | + +#### Conditions de Disparition (tableau détaillé) + +| Condition | Seuil | Opérateur | Résultat | +|---|---:|---|---| +| - | - | - | pas de suppression | + +#### Hérédité (tableau détaillé) + +| Élément | Hérité | Règle | +|---|---|---| +| Inventaire | Oui | persiste compte | +| Équipement | Oui | persiste par profil | + +### 3. Impacts Environnementaux + +#### Impact Température (tableau détaillé) + +| Condition | Effet | Notes | +|---|---|---| +| - | aucun | cosmétique | + +#### Impact Milieu (Biome) (tableau détaillé) + +| Biome | Effet | Notes | +|---|---|---| +| - | aucun | - | + +#### Impact Saisons (tableau détaillé) + +| Saison | Effet | Notes | +|---|---|---| +| Saison active | skins saisonniers visibles | gating | + +#### Impact Heure / Jour-Nuit (tableau détaillé) + +| Période | Effet | Notes | +|---|---|---| +| - | aucun | - | + +### 4. Impacts Biologiques et Sociaux + +#### Impact Reproduction (tableau détaillé) + +| Facteur | Effet sur taux | Condition | +|---|---|---| +| - | aucun | - | + +#### Impact Mort (tableau détaillé) + +| Cas | Effet | Condition | +|---|---|---| +| - | aucun | - | + +#### Impact Nourriture (tableau détaillé) + +| Ressource | Effet | Condition | +|---|---|---| +| - | aucun | - | + +#### Impact Attractivité(Visiteurs (tableau détaillé) + +| Action/État | Gain | Rayon | Notes | +|---|---:|---:|---| +| Skins zoo | + | zoo | esthétique | + +#### Impact Attractivité Animaux) (tableau détaillé) + +| Action/État | Effet animaux | Condition | +|---|---|---| +| - | - | - | + +#### Impact Valeur (tableau détaillé) + +| Facteur | Variation | Condition | +|---|---:|---| +| Collection | + | complétude | + +### 5. Impacts Logistiques et Économiques + +#### Vitesse (Camion) (tableau détaillé) + +| Paramètre | Effet | Condition | +|---|---|---| +| - | - | - | + +#### Vitesse (Nurserie) (tableau détaillé) + +| Paramètre | Effet | Condition | +|---|---|---| +| - | - | - | + +#### Vitesse (Accueil) (tableau détaillé) + +| Paramètre | Effet | Condition | +|---|---|---| +| - | - | - | + +#### Vitesse (Recherche) (tableau détaillé) + +| Paramètre | Effet | Condition | +|---|---|---| +| - | - | - | + +#### Vitesse (Labo) (tableau détaillé) + +| Paramètre | Effet | Condition | +|---|---|---| +| - | - | - | + +#### Vitesse (Visite) (tableau détaillé) + +| Paramètre | Effet | Condition | +|---|---|---| +| - | - | - | + +#### Dépenses (Billeterie) (tableau détaillé) + +| Poste | Coût | Unité | Condition | +|---|---:|---|---| +| - | 0 | - | - | + +#### Dépenses (Boutiques) (tableau détaillé) + +| Poste | Coût | Unité | Condition | +|---|---:|---|---| +| - | 0 | - | - | + +#### Dépenses (Visiteurs) (tableau détaillé) + +| Poste | Coût | Unité | Condition | +|---|---:|---|---| +| - | 0 | - | - | + +#### Dépenses (Employés) (tableau détaillé) + +| Poste | Coût | Unité | Condition | +|---|---:|---|---| +| - | 0 | - | - | + +#### 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 | +|---|---|---|---| +| - | - | - | - | + +##### Trajet Visiteurs vers/depuis les animaux (tableau détaillé) + +| Source | Destination | Déclencheur | Effet | +|---|---|---|---| +| - | - | - | - | + +##### Trajet Visiteurs vers/depuis les boutiques (tableau détaillé) + +| Source | Destination | Déclencheur | Effet | +|---|---|---|---| +| - | - | - | - | + +##### Trajet Visiteurs vers/depuis la billeterie (entrées/sorties du zoo) (tableau détaillé) + +| Source | Destination | Déclencheur | Effet | +|---|---|---|---| +| - | - | - | - | + +### 6. Événements + +#### Événements du Jeu (tableau détaillé) + +| Event | Déclencheur | Payload | Effet | +|---|---|---|---| +| `OPEN_SKIN_INVENTORY` | menu | - | UI | +| `EQUIP_SKIN` | clic | item_id, slot | équipé | +| `UNEQUIP_SKIN` | clic | slot | base | + +#### Événements du Carte (tableau détaillé) + +| Event | Déclencheur | Effet | +|---|---|---| +| - | - | - | + +#### Événements du Zoo (tableau détaillé) + +| Event | Déclencheur | Effet | +|---|---|---| +| - | - | - | + +#### Événements du Ville / Visiteur (tableau détaillé) + +| Event | Déclencheur | Effet | +|---|---|---| +| - | - | - | + +#### Événements du Visiteur (tableau détaillé) + +| Event | Déclencheur | Effet | +|---|---|---| +| - | - | - | + +#### Événements du Joueur (tableau détaillé) + +| Event | Déclencheur | Effet | +|---|---|---| +| `FILTER_SKINS` | toggle | UI | + +### 7. Progression + +#### Tableau des Upgrades (tableau détaillé) + +| Niveau | Coût | Effet | Débloque | +|---|---:|---|---| +| 1 | 0 | inventaire dispo | - | + +### 8. Logique et Interfaces + +#### Pseudo-code Impacts (tableau détaillé) + +| Fonction | Entrées | Sorties | Notes | +|---|---|---|---| +| `equipSkin` | item, slot | state | exclusif slot | +| `filterSkins` | list, filters | list | combinable | + +#### Messages d'Infos / Alerte (tableau détaillé) + +| ID | Niveau | Message | Condition | +|---|---|---|---| +| `SKIN_NOT_OWNED` | Warning | "Skin non possédé." | équiper | +| `SKIN_EQUIPPED` | Info | "Skin équipé." | succès | + +## Annexes UX/UI + +### 1. Expérience Utilisateur (UX) + +#### Description UX (tableau détaillé) + +| Parcours | But | Friction | Réduction clics | +|---|---|---|---| +| Équiper avatar | personnaliser | navigation | paper doll + bouton direct | +| Équiper zoo | thème | sélection | filtres | + +#### Description UI (tableau détaillé) + +| Composant | Contenu | États | +|---|---|---| +| Grille | items | owned/missing | +| Paper doll | preview | slot highlight | +| Bouton équiper | CTA | enabled/disabled | + +#### Emplacement (tableau détaillé) + +| Zone UI | Position | Notes | +|---|---|---| +| Profil | onglet skins | - | +| Boutique | lien | - | + +#### Intégration (tableau détaillé) + +| Intégration | Contrat | Notes | +|---|---|---| +| `skin.md` | definition item | ids cohérents | +| `avatar_joueur.md` | rendu avatar | slots | + +#### Navigation (tableau détaillé) + +| Action | Chemin | Résultat | +|---|---|---| +| Ouvrir | profil → skins | grille | +| Équiper | item → CTA | appliqué | + +#### Événements (tableau détaillé) + +| Event UI | Déclencheur | Effet | +|---|---|---| +| `OPEN_SKIN_INVENTORY` | menu | UI | +| `CLICK_EQUIP` | CTA | équipe | + +#### Assets Skinables + +##### Musiques (tableau détaillé) + +| Asset | Usage | Durée | Notes | +|---|---|---:|---| +| `skins_inventory_loop.mp3` | inventaire | loop | neutre | + +##### Sons (tableau détaillé) + +| Asset | Usage | Volume | +|---|---|---| +| `ui_equip.mp3` | équiper | bas | +| `ui_unequip.mp3` | retirer | bas | + +##### Graphiques (tableau détaillé) + +| Asset | Usage | Contraintes | +|---|---|---| +| `paper_doll_frame.png` | preview | scalable | +| `skin_item_tile.png` | tuile | grille | + +##### Images (tableau détaillé) + +| Asset | Usage | +|---|---| +| `skin_missing_overlay.png` | grisé | + +##### Vidéos (tableau détaillé) + +| Asset | Usage | Durée | +|---|---|---:| +| `equip_fx.webm` | feedback | 0.6s | + +##### Animations (tableau détaillé) + +| Animation | Déclencheur | Notes | +|---|---|---| +| glow item | hover | 0.2s | +| bounce CTA | success | 0.3s | + +##### Couleurs (tableau détaillé) + +| Token | Valeur | Usage | +|---|---|---| +| `skins_gold` | #D4AF37 | rareté | +| `skins_brown` | #6D4C41 | fond | + +##### Textes (tableau détaillé) + +| Clé | FR | EN | +|---|---|---| +| `skins.title` | Skins | Skins | +| `skins.equip` | Équiper | Equip | + +##### Formes (tableau détaillé) + +| Élément | Forme | Notes | +|---|---|---| +| Tuiles | rectangles arrondis | lisibles | diff --git a/docs/specs/joueur.md b/docs/specs/joueur.md index e9d2f8b..7927150 100644 --- a/docs/specs/joueur.md +++ b/docs/specs/joueur.md @@ -3,6 +3,17 @@ ## Définition L'utilisateur humain. +## Variantes de représentation +### Joueur actif +Le joueur actif est représenté par : +- **un profil** (pseudo, progression, paramètres) ; +- **un avatar personnalisable** (genre, skins, titres) : voir `avatar_joueur.md` et `inventaire_skins.md`. + +### Autres joueurs +Les autres joueurs (humains) peuvent être représentés dans des modules sociaux (carte monde, visite, classements) par : +- un **portrait/mini-avatar** cohérent avec leurs skins (si le profil requis n’est pas accessible, afficher un état verrouillé explicite, pas de dégradation silencieuse) ; +- un **pseudo** et des indicateurs de progression (niveau, réputation) selon les règles du module. + ## Propriétés - **Compte** : Authentifié par clé privée (pas de mot de passe). - **Ressources** : Pièces, Unités de recherche. diff --git a/docs/specs/laborantin.md b/docs/specs/laborantin.md new file mode 100644 index 0000000..c9f9734 --- /dev/null +++ b/docs/specs/laborantin.md @@ -0,0 +1,51 @@ +# Laborantin (Laboratoire — carte monde) + +## 1. Définition +Personnage de service associé au site “Laboratoire” sur la carte du monde. Il présente les offres rares, les services d’analyse/synthèse et sert de personnage contextuel lors des événements du laboratoire. + +## 2. Fonctions +* **Accueil labo** : Introduit les onglets “Offres” et “Services” et le gating (niveau/réputation). +* **Analyse** : Affiche l’état d’une analyse génétique (en cours/terminée/échec) avec cause explicite. +* **Synthèse** : Affiche l’état d’une synthèse (succès/échec) et la traçabilité (seed, fiabilité, rareté). +* **Alerte sécurité** : Personnage contextuel d’un `LAB_SECURITY_ALERT`. + +## 3. Icone +* **Représentation :** Éprouvette + brin ADN. +* **Couleur dominante :** Cyan néon / indigo (hérite du site labo). + +## 4. Interactions +* **Ouverture labo** : clic sur POI laboratoire. +* **Achat offre** : drag offre → camion (le laborantin valide l’achat et affiche le reçu). +* **Consultation rapport** : clic “Voir rapport”. + +## 5. Annexes Techniques + +### Données (JSON) +```json +{ + "npc_id": "lab_tech_01", + "type": "laborantin", + "name": "Iris", + "assigned_site": "lab_site_uuid", + "state": "enum (IDLE, PRESENTING, ANALYZING, SYNTHESIZING, ALERT)", + "theme_variant": "string" +} +``` + +### Règles Métier +* Le laborantin est **lié** au `laboratoire.md` (site carte monde). +* Les erreurs doivent être explicitement remontées : `LAB_LOCKED_REPUTATION`, `ANALYSIS_FAILED`, `LAB_SECURITY_ALERT`, etc. + +# Annexes UX/UI + +## 0. Direction Artistique & Vue +* **Style** : Néon / techno, cohérent avec `laboratoire.md`. +* **Rendu** : Portrait + bulles d’état dans la modal labo ; pas nécessairement un sprite sur la carte monde. + +## Affichage contextuel (modules) +- **Laboratoire** (`laboratoire.md`) : nouvelles offres, analyse terminée, synthèse terminée, alerte sécurité, fermeture temporaire. +- **Camion** (`camion.md`) : au moment de l’achat (drag) si le labo refuse (gating/stock/fonds). + +## Skins & thèmes +* Palette et décor dérivent du thème (`theme.md`), avec variante “tech” du site. +* Accessoires (lunettes, badge, gants) via skins (`inventaire_skins.md`) si activé. diff --git a/docs/specs/laboratoire.md b/docs/specs/laboratoire.md index 1b6f4e2..0b6f0ea 100644 --- a/docs/specs/laboratoire.md +++ b/docs/specs/laboratoire.md @@ -20,6 +20,27 @@ Microscope stylisé bleu néon sur fond sombre, évoquant la haute technologie. | Joueur | Glisser-Déposer | Offre (Animal) vers Camion | Achète l'animal et lance le transport vers le zoo. | | Joueur | Sélectionner | Animal du Zoo | Lance une analyse génétique (si le labo est débloqué). | +## Personnage contextuel (événements & interaction) +Voir `laborantin.md`. + +### Affichage +Le laborantin s’affiche lorsque : +- le module est **actionné** (ouverture du labo, survol/prévisualisation d’une offre, achat, lancement d’analyse/synthèse) ; +- un **événement** du laboratoire survient (nouvelles offres, analyse/synthèse terminée, alerte sécurité, fermeture temporaire). + +### Déclencheurs (événements) +| Event | Condition | Effet UI personnage | +|---|---|---| +| `OPEN_LAB_SITE` | clic POI | portrait + état (ouvert/fermé) + onglets | +| `LAB_OFFERS_GENERATED` | refresh TTL | bulle “Nouvelles offres” + CTA “Voir offres” | +| `LAB_OFFER_PURCHASED` | achat validé | reçu + rappel livraison camion | +| `LAB_ANALYSIS_COMPLETED` | analyse terminée | CTA “Voir rapport” | +| `LAB_SYNTHESIS_DONE` | synthèse terminée | résultat + CTA “Voir spécimen” | +| `LAB_SECURITY_ALERT` | incident | bulle alerte + CTA “Voir état” | + +### Skins & thèmes +Palette et accessoires suivent `theme.md` (variante “tech”) et `inventaire_skins.md` si activé. + ## Annexes Techniques ### 1. Données et États @@ -383,3 +404,481 @@ Microscope stylisé bleu néon sur fond sombre, évoquant la haute technologie. | Forme | Usage | Style Bordure | |---|---|---| | Hexagone | Icônes, Boutons | Solid 2px | + +## Définition + +| Champ | Valeur | +|---|---| +| Concept | Site “Laboratoire” (carte monde) : POI de recherche, offres rares, analyses génétiques et synthèse/clonage (fonctionnalité avancée). | +| Rôle | Fournir un point d’accès à des animaux/offres exclusives et à des services de science (analyse traits cachés, création), avec gating réputation/niveau. | +| Portée | Site externe (world map) + interface de services ; interactions avec `camion` (transport) et `centre_recherche` (recherche). | +| Contrainte | Pas de cache/mémorisation : offres et résultats calculés à la volée (seed explicitée) ; pas de fallback silencieux sur échec (erreur + log + message). | + +## Fonctions (tableau détaillé) + +| Fonction | Déclencheur | Entrées | Sorties | Règles | Observabilité | +|---|---|---|---|---|---| +| Ouvrir labo | clic POI | `site_id` | modal | liste offres + services | Event `OPEN_LAB_SITE` | +| Générer offres | refresh/expiration | `lab_level`, seed | offres | TTL 24h, remplacement complet | Event `LAB_OFFERS_GENERATED` | +| Acheter une offre | drag vers camion | `offer_id`, funds | cargo camion | transaction atomique | Event `LAB_OFFER_PURCHASED` | +| Analyse génétique | sélectionner animal | `animal_id`, fee | rapport | révèle traits selon fiabilité | Event `LAB_ANALYSIS_COMPLETED` | +| Synthèse/clonage | action | fragments, fee, time | nouvel animal | fiabilité vs rareté => succès/échec | Event `LAB_SYNTHESIS_DONE` | +| Fermer temporairement | incident | sécurité < seuil | site fermé | cooldown 24h/48h | Event `LAB_CLOSED_TEMP` | +| Visite publique | jour | module visite | attractivité + | visiteurs/flux | Event `LAB_PUBLIC_VISIT` | + +## Icone de base + +| Élément | Spécification | +|---|---| +| Représentation | Microscope néon + brin ADN | +| Couleur dominante | Cyan néon (#00FFFF) + indigo (#202040) | +| Variantes | `icon_lab.png`, `icon_lab_microscope.png` | +| États | `open`, `closed`, `new_offers`, `security_alert` | + +## Interactions (tableau détaillé) + +| Interaction | Type | Préconditions | Étapes UI | Résultat | Erreurs / Messages | +|---|---|---|---|---|---| +| Consulter offres | Consultation | réputation ok | clic labo | modal offres | `LAB_LOCKED_REPUTATION` | +| Acheter | Action | fonds ok + camion idle | drag offre → camion | mission camion | `NOT_ENOUGH_COINS`, `TRUCK_BUSY` | +| Lancer analyse | Action | animal sélectionné | choisir animal → payer | rapport | `ANALYSIS_FAILED` | +| Lancer synthèse | Action | fragments | synthétiser → confirmer | file synthèse | `NOT_ENOUGH_FRAGMENTS` | + +## Annexes Techniques + +### 1. Données et États (tableau détaillé) + +| Donnée / État | Type | Exemple | Source | Contraintes | +|---|---|---|---|---| +| `site_id` | uuid_v4 | `uuid_v4` | DB | - | +| `site_type` | string | `lab_site` | DB | constant | +| `lab_level` | int | 1 | DB | 1..3 (ex) | +| `requires.reputation_min` | int | 500 | config | gating | +| `offers[].offer_id` | uuid_v4 | `uuid_v4` | DB | unique | +| `offers[].expires_at` | timestamp | - | DB | UTC | +| `offers[].item_type` | string | `egg` | DB | `egg/baby/animal` | +| `offers[].species_id` | string | `MAMMOTH` | DB | enum | +| `offers[].price.coins` | int | 20000 | DB | >=0 | +| `scores.reliability` | float | 0.9 | config | 0..1 | +| `scores.prestige` | int | 10 | config | 0..100 | +| `state.is_open` | boolean | true | DB | fermeture temp | +| `state.closed_until` | timestamp \| null | - | DB | UTC | +| `rng.seed` | string | `lab_offer_seed` | DB | auditable | + +#### Caractéristiques Initiales (tableau détaillé) + +| Caractéristique | Valeur initiale | Unité | Notes | +|---|---:|---|---| +| Niveau tech | 1 | int | offres | +| Slots offres | 3 | count | simultané | +| Réputation requise | 500 | pts | gating | + +#### Scores Initiaux (tableau détaillé) + +| Score | Valeur initiale | Plage | Impact | +|---|---:|---|---| +| Fiabilité | 90% | 0..100% | succès | +| Prestige | 10 | 0..100 | rareté | + +### 2. Cycles de Vie et Apparition (tableau détaillé) + +| Phase | Déclencheur | Entrées | Sorties | Invariants | +|---|---|---|---|---| +| Découverte | exploration | zone | POI visible | persiste | +| Interactif | niveau joueur | >=5 | UI active | gating réputation | +| Refresh offres | 24h | seed | nouveaux items | TTL | +| Fermeture | incident | sécurité | closed_until | observable | + +#### Conditions d'Apparition (tableau détaillé) + +| Condition | Seuil | Opérateur | Résultat | +|---|---:|---|---| +| Exploration carte | zone “Ville/Industrie” | est | POI découvert | +| Niveau joueur | 5 | >= | interactif | + +#### Conditions de Disparition (tableau détaillé) + +| Condition | Seuil | Opérateur | Résultat | +|---|---:|---|---| +| Faillite labo | événement | est | fermeture 24h | + +#### Hérédité (tableau détaillé) + +| Élément | Hérité | Règle | +|---|---|---| +| Traits clonés | Oui | 99% + instabilité 1% | +| Analyses | Oui | rapports conservés | + +### 3. Impacts Environnementaux + +#### Impact Température (tableau détaillé) + +| Condition | Effet labo | Notes | +|---|---|---| +| < 0°C | durée synthèse +20% | machines | +| > 35°C | coût énergie +15% | surchauffe | +| 20°C | vitesse +5% | optimal | + +#### Impact Milieu (Biome) (tableau détaillé) + +| Biome | Effet | Notes | +|---|---|---| +| Urbain | aucun | nominal | +| Toundra | maintenance +10% | chauffage | +| Désert | maintenance +20% | clim | + +#### Impact Saisons (tableau détaillé) + +| Saison | Effet | Notes | +|---|---|---| +| Hiver | rareté froid +10% | offers | +| Été | rareté chaud +10% | offers | +| Printemps | offres +1 | bébés | +| Automne | coût analyse -10% | maladies | + +#### Impact Heure / Jour-Nuit (tableau détaillé) + +| Période | Effet | Notes | +|---|---|---| +| Jour | ouvert au public | enseignes | +| Nuit | recherche intensive | offres “sombres” | + +### 4. Impacts Biologiques et Sociaux + +#### Impact Reproduction (tableau détaillé) + +| Facteur | Effet sur taux | Condition | +|---|---|---| +| Fertilité assistée | +20% | recherche débloquée | +| Clonage | reproduction naturelle 0 | espèce éteinte | + +#### Impact Mort (tableau détaillé) + +| Cas | Effet | Condition | +|---|---|---| +| Échec synthèse | perte fragments | instant | +| Accident | fermeture 48h | décontamination | + +#### Impact Nourriture (tableau détaillé) + +| Ressource | Effet | Condition | +|---|---|---| +| Nutriments synthétiques | santé +50 (clone) | indispensable clones | + +#### Impact Attractivité(Visiteurs (tableau détaillé) + +| Action/État | Gain | Rayon | Notes | +|---|---:|---:|---| +| Découverte espèce éteinte | +500 (global) | monde | buzz in-game | +| Visite labo | +20 | 10m | module | + +#### Impact Attractivité Animaux) (tableau détaillé) + +| Action/État | Effet animaux | Condition | +|---|---|---| +| Prélèvement ADN | stress +10 | toutes espèces | + +#### Impact Valeur (tableau détaillé) + +| Facteur | Variation | Condition | +|---|---:|---| +| Traits légendaires | +200% | rareté génétique | +| Instable | -50% | défaut clonage | + +### 5. Impacts Logistiques et Économiques + +#### Vitesse (Camion) (tableau détaillé) + +| Paramètre | Effet | Condition | +|---|---|---| +| Autoroute | 110 km/h | vers labo | +| Piste | 30 km/h | accès difficile | + +#### Vitesse (Nurserie) (tableau détaillé) + +| Paramètre | Effet | Condition | +|---|---|---| +| Incubation œuf rare | 72h base | -10%/lvl incubateur | + +#### Vitesse (Accueil) (tableau détaillé) + +| Paramètre | Effet | Condition | +|---|---|---| +| Flux visite | 5/min | capacité 50 | + +#### Vitesse (Recherche) (tableau détaillé) + +| Paramètre | Effet | Condition | +|---|---|---| +| Séquençage | 2 jours | accélération payante | + +#### Vitesse (Labo) (tableau détaillé) + +| Paramètre | Effet | Condition | +|---|---|---| +| Tests | 1h..4h | fiabilité | + +#### Vitesse (Visite) (tableau détaillé) + +| Paramètre | Effet | Condition | +|---|---|---| +| Guide | +10 min | module | + +#### Dépenses (Billeterie) (tableau détaillé) + +| Poste | Coût | Unité | Condition | +|---|---:|---|---| +| Guichet spécial | 500 | $/semaine | visite | + +#### Dépenses (Boutiques) (tableau détaillé) + +| Poste | Coût | Unité | Condition | +|---|---:|---|---| +| Kit chimiste | 20 | $ | marge 40% | + +#### Dépenses (Visiteurs) (tableau détaillé) + +| Poste | Coût | Unité | Condition | +|---|---:|---|---| +| Don recherche | 10 | $ | 1/20 | + +#### Dépenses (Employés) (tableau détaillé) + +| Poste | Coût | Unité | Condition | +|---|---:|---|---| +| Généticien | 3000 | $/mois | prime | + +#### 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 | +|---|---:|---|---| +| Suivi clonage | 500 | $/jour | matériel | + +#### Dépenses (Nourriture) (tableau détaillé) + +| Poste | Coût | Unité | Condition | +|---|---:|---|---| +| Gel nutritif | 100 | $/kg | fournisseur | + +#### Dépenses (Acceuil des animaux) (tableau détaillé) + +| Poste | Coût | Unité | Condition | +|---|---:|---|---| +| Enclos stérile | 10000 | $ | entretien | + +#### Dépenses (Camion) (tableau détaillé) + +| Poste | Coût | Unité | Condition | +|---|---:|---|---| +| Trajet 50km | 50 | $ | usure 2% | + +#### Trajet Visiteurs + +##### Trajet Visiteurs vers/depuis la ville (tableau détaillé) + +| Source | Destination | Déclencheur | Effet | +|---|---|---|---| +| Ville | Labo | navette | afflux | + +##### Trajet Visiteurs vers/depuis les animaux (tableau détaillé) + +| Source | Destination | Déclencheur | Effet | +|---|---|---|---| +| Hall | Tunnel vitré | curiosité | passage | + +##### Trajet Visiteurs vers/depuis les boutiques (tableau détaillé) + +| Source | Destination | Déclencheur | Effet | +|---|---|---|---| +| Sortie labo | Boutique | passage obligé | conversion | + +##### Trajet Visiteurs vers/depuis la billeterie (entrées/sorties du zoo) (tableau détaillé) + +| Source | Destination | Déclencheur | Effet | +|---|---|---|---| +| Entrée VIP | Labo | ticket | attente 0 | + +### 6. Événements + +#### Événements du Jeu (tableau détaillé) + +| Event | Déclencheur | Payload | Effet | +|---|---|---|---| +| `LAB_OFFERS_GENERATED` | refresh | seed | nouvelles offres | +| `LAB_ANALYSIS_COMPLETED` | fin | report_id | rapport | +| `LAB_SYNTHESIS_DONE` | fin | success | nouvel animal/échec | +| `LAB_SECURITY_ALERT` | sécurité | - | fermeture | + +#### Événements du Carte (tableau détaillé) + +| Event | Déclencheur | Effet | +|---|---|---| +| `LAB_POI_DISCOVERED` | exploration | marker | + +#### Événements du Zoo (tableau détaillé) + +| Event | Déclencheur | Effet | +|---|---|---| +| `TRUCK_DELIVERS_LAB_CARGO` | retour | dépôt accueil/nurserie | + +#### Événements du Ville / Visiteur (tableau détaillé) + +| Event | Déclencheur | Effet | +|---|---|---| +| `ANTI_CLONE_PROTEST` | aléatoire | affluence - | + +#### Événements du Visiteur (tableau détaillé) + +| Event | Déclencheur | Effet | +|---|---|---| +| `VISITOR_SEES_CLONE` | visite | satisfaction + | + +#### Événements du Joueur (tableau détaillé) + +| Event | Déclencheur | Effet | +|---|---|---| +| `PLAYER_FUNDS_RESEARCH` | action | xp science + | + +### 7. Progression + +#### Tableau des Upgrades (tableau détaillé) + +| Niveau | Coût | Effet | Débloque | +|---|---:|---|---| +| 1 | 50000 | analyses simples | offres standard | +| 2 | 150000 | séquençage | offres rares | +| 3 | 500000 | clonage | légendaire | + +### 8. Logique et Interfaces + +#### Pseudo-code Impacts (tableau détaillé) + +| Fonction | Entrées | Sorties | Notes | +|---|---|---|---| +| `computeCloningSuccess` | reliability, rarity | bool | formule | +| `generateLabOffer` | level, seed | offer | auditable | +| `canAccessLab` | reputation, level | bool | gating | + +#### Messages d'Infos / Alerte (tableau détaillé) + +| ID | Niveau | Message | Condition | +|---|---|---|---| +| `LAB_TITLE` | Info | "Laboratoire de Génétique." | ouverture | +| `LAB_LOCKED_REPUTATION` | Warning | "Réputation insuffisante." | gating | +| `LAB_SECURITY_ALERT` | Error | "Alerte de sécurité au laboratoire." | fuite/intrusion | + +## Annexes UX/UI + +### 1. Expérience Utilisateur (UX) + +#### Description UX (tableau détaillé) + +| Parcours | But | Friction | Réduction clics | +|---|---|---|---| +| Voir nouvelle offre | découvrir | notif | clic notif → focus POI | +| Acheter | obtenir rare | transport | drag → camion | +| Analyser | révéler traits | coût | CTA direct dans fiche | + +#### Description UI (tableau détaillé) + +| Composant | Contenu | États | +|---|---|---| +| Modal labo | onglets offres/services | open/closed | +| Cartes offre | prix + rareté | locked/available | +| Bouton synthèse | fragments requis | enabled/disabled | + +#### Emplacement (tableau détaillé) + +| Zone UI | Position | Notes | +|---|---|---| +| Carte monde | POI | halo | +| Modal | centre | 80% largeur | + +#### Intégration (tableau détaillé) + +| Intégration | Contrat | Notes | +|---|---|---| +| `camion.md` | transport | drag offre | +| `accueil_animaux.md` | dépôt | adultes | +| `nurserie.md` | dépôt | œufs/bébés | + +#### Navigation (tableau détaillé) + +| Action | Chemin | Résultat | +|---|---|---| +| Ouvrir | clic POI | modal | +| Acheter | drag offre → camion | mission | +| Fermer | bouton X | retour carte | + +#### Événements (tableau détaillé) + +| Event UI | Déclencheur | Effet | +|---|---|---| +| `OPEN_LAB_SITE` | clic | modal | +| `CLICK_BUY_OFFER` | drag | achat | + +#### Assets Skinables + +##### Musiques (tableau détaillé) + +| Asset | Usage | Durée | Notes | +|---|---|---:|---| +| `lab_ambient.mp3` | modal | loop | néon | + +##### Sons (tableau détaillé) + +| Asset | Usage | Volume | +|---|---|---| +| `dna_scan.mp3` | analyse ok | moyen | +| `buy_success.mp3` | achat | moyen | + +##### Graphiques (tableau détaillé) + +| Asset | Usage | Contraintes | +|---|---|---| +| `dna_strand.png` | UI | décor | +| `icon_lab.png` | POI | lisible | + +##### Images (tableau détaillé) + +| Asset | Usage | +|---|---| +| `bg_lab_interior.jpg` | fond | + +##### Vidéos (tableau détaillé) + +| Asset | Usage | Durée | +|---|---|---:| +| `cloning_process.mp4` | succès | 5.0s | + +##### Animations (tableau détaillé) + +| Animation | Déclencheur | Notes | +|---|---|---| +| `pulse_neon` | bordures | 2000ms | + +##### Couleurs (tableau détaillé) + +| Token | Valeur | Usage | +|---|---|---| +| `lab_cyan` | #00FFFF | accents | +| `lab_indigo` | #202040 | fond | + +##### Textes (tableau détaillé) + +| Clé | FR | EN | +|---|---|---| +| `LAB_TITLE` | Laboratoire de Génétique | Genetics Lab | +| `BTN_SYNTHESIZE` | Synthétiser | Synthesize | + +##### Formes (tableau détaillé) + +| Élément | Forme | Notes | +|---|---|---| +| Boutons | hexagone | bordure 2px | diff --git a/docs/specs/maire.md b/docs/specs/maire.md new file mode 100644 index 0000000..48c1685 --- /dev/null +++ b/docs/specs/maire.md @@ -0,0 +1,49 @@ +# Maire (Ville) + +## 1. Définition +Personnage représentant la ville sur la carte du monde. Il sert d’interface narrative-fonctionnelle pour les événements de ville (festival, grève, bonus économique) qui impactent le flux de visiteurs et le budget moyen. + +## 2. Fonctions +* **Annonce événements** : Présente les événements de ville et leurs impacts chiffrés. +* **Relation ville-zoo** : Expose l’état de relation/jumelage (si présent dans `ville.md`). +* **Point d’entrée UI** : Personnage contextuel quand le joueur sélectionne une ville ou quand un événement `CITY_EVENT` survient. + +## 3. Icone +* **Représentation :** Écharpe tricolore / blason. +* **Couleur dominante :** Bleu (institution) + accents thème. + +## 4. Interactions +* **Clic ville** : ouvre le panneau ville (population, richesse, événements). +* **Clic alerte** : deep-link vers la ville concernée depuis une notification. + +## 5. Annexes Techniques + +### Données (JSON) +```json +{ + "npc_id": "mayor_01", + "type": "maire", + "city_id": "uuid", + "name": "M. Dubois", + "state": "enum (IDLE, ANNOUNCING, NEGOTIATING)", + "current_event": "string | null" +} +``` + +### Règles Métier +* Les impacts annoncés par le maire doivent être **indexés** par la ville (population, richesse, distance, événement actif) conformément aux formules de `ville.md`. +* Pas de promesse “best effort” : si un événement est actif, il est listé, daté et son effet est explicite. + +# Annexes UX/UI + +## 0. Direction Artistique & Vue +* **Vue** : Carte monde (UI panneau + portrait). +* **Style** : Cohérent avec le thème (costume, écharpe, badge). + +## Affichage contextuel (modules) +- **Ville** (`ville.md`) : sélection de ville, événements, variations de flux visiteurs. +- **Attractivité sur ville** (`attractivite_zoo_sur_ville.md`) : explication des variations de flux (si le module expose une UI). + +## Skins & thèmes +* Variantes par thème (costume, palette) via `theme.md`. +* Accessoires via `inventaire_skins.md` si des skins “carte monde / ville” existent. diff --git a/docs/specs/menu_achats.md b/docs/specs/menu_achats.md index d1a673c..01dfe6b 100644 --- a/docs/specs/menu_achats.md +++ b/docs/specs/menu_achats.md @@ -63,3 +63,472 @@ Interface centralisée dédiée aux transactions utilisant la monnaie premium (p * **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. + +## Définition + +| Champ | Valeur | +|---|---| +| Concept | Menu “Achats” : hub UI des transactions (employés, consommables, cosmétiques, upgrades). | +| Rôle | Réduire les clics d’achat via catégories/onglets, et garantir des transactions atomiques (débit + attribution). | +| Portée | UI globale (HUD) ; impacte inventaires, bâtiments, personnel, monnaies. | +| Contrainte | Aucun tracking/analytics ; pas de cache/mémorisation côté app : catalogue et soldes sont lus comme état courant à l’ouverture. | + +## Fonctions (tableau détaillé) + +| Fonction | Déclencheur | Entrées | Sorties | Règles | Observabilité | +|---|---|---|---|---|---| +| Ouvrir menu achats | clic HUD | `player_id` | modal hub | focus dernière catégorie (état UI local) | Event `OPEN_SHOP_HUB` | +| Charger catalogue | ouverture | `shop_version` | catégories + items | filtrer par niveau, conditions | Event `SHOP_CATALOG_LOADED` | +| Filtrer catégorie | clic onglet | `category_id` | liste items | tri stable, recherche | Event `SHOP_CATEGORY_SELECTED` | +| Prévisualiser item | clic item | `item_id` | panneau détail | affiche prix, effets, prérequis | Event `SHOP_ITEM_PREVIEWED` | +| Acheter item | clic “Acheter” | `item_id`, quantité | débit + attribution | transaction atomique ; pas d’achat si fonds insuffisants | Event `SHOP_PURCHASED` | +| Confirmer achat coûteux | seuil | `price` | modal confirm | requis si > 1000 coins | Event `SHOP_CONFIRM_SHOWN` | +| Achat en quantité | clic x1/x10 | quantité | panier/achat | clamp par stock/solde | Event `SHOP_QUANTITY_CHANGED` | + +## Icone de base + +| Élément | Spécification | +|---|---| +| Représentation | Caisse / panier | +| Couleur dominante | Vert + or | +| Variantes | `icon_shop_cash.png`, `icon_shop_cart.png` | +| États | normal, hover, disabled (fonds) | + +## Interactions (tableau détaillé) + +| Interaction | Type | Préconditions | Étapes UI | Résultat | Erreurs / Messages | +|---|---|---|---|---|---| +| Accès hub | Navigation | - | clic HUD | ouvre hub | - | +| Changer onglet | Navigation | - | clic onglet | liste update | - | +| Achat simple | Action | fonds ok | clic acheter | item attribué | `NOT_ENOUGH_COINS` | +| Achat coûteux | Action | fonds ok | acheter → confirm | item attribué | `CANCELLED` | +| Achat x10 | Action | fonds/stock ok | select x10 → acheter | 10 items | `LIMIT_REACHED` | + +## Personnage contextuel (événements & interaction) +Deux personnages contextuels peuvent être affichés selon la section : +- **Vendeur “achat en pièces”** : voir `vendeur_pieces.md` (section “Pièces”, conversion/pack). +- **Vendeur (boutique)** : voir `vendeur.md` (prévisualisation/achat d’items boutique/cosmétiques si le hub les expose). + +### Déclencheurs (exemples) +| Section | Event / Action | Effet UI personnage | +|---|---|---| +| Hub | `OPEN_SHOP_HUB` | personnage visible dans l’en-tête du hub (thématisé) | +| Hub | `SHOP_ITEM_PREVIEWED` | bulle “Détails item” + CTA “Acheter” | +| Hub | `SHOP_CONFIRM_SHOWN` | confirmation contextualisée (prix, quantité) | +| Pièces | ouverture section | vendeur pièces présente les packs + limites | +| Pièces | achat pack | reçu + solde mis à jour ; erreur explicite si paiement impossible | + +### Skins & thèmes +Le rendu suit `theme.md` et les skins de la UI/boutique si disponibles via `inventaire_skins.md`. + +## Annexes Techniques + +### 1. Données et États (tableau détaillé) + +| Donnée / État | Type | Exemple | Source | Contraintes | +|---|---|---|---|---| +| `shop_categories[].id` | string | `employees` | config/DB | stable | +| `shop_categories[].label_key` | string | `shop.cat.employees` | i18n | FR/EN | +| `shop_categories[].items[]` | string[] | `["healer_01"]` | config/DB | ids | +| `items[item_id].price.coins` | int | 250 | config | >=0 | +| `items[item_id].price.gems` | int | 0 | config | >=0 | +| `items[item_id].requires.zoo_level` | int | 3 | config | gating | +| `items[item_id].stock_daily` | int \| null | 10 | config | null = illimité | +| `currency_balance.coins` | int | 1500 | DB | source de vérité | +| `currency_balance.gems` | int | 50 | DB | source de vérité | +| `ui.last_category_id` | string | `employees` | client | état UI | + +#### Caractéristiques Initiales (tableau détaillé) + +| Caractéristique | Valeur initiale | Unité | Notes | +|---|---:|---|---| +| Seuil confirmation | 1000 | coins | règle existante | +| Quantités rapides | 1,10 | unités | boutons | +| Catégorie par défaut | `employees` | id | configurable | + +#### Scores Initiaux (tableau détaillé) + +| Score | Valeur initiale | Plage | Impact | +|---|---:|---|---| +| Achats du jour | 0 | 0..∞ | historique local, pas d’analytics | +| Dépenses du jour | 0 | 0..∞ | transparence UI | + +### 2. Cycles de Vie et Apparition (tableau détaillé) + +| Phase | Déclencheur | Entrées | Sorties | Invariants | +|---|---|---|---|---| +| Apparition | jeu lancé | config | hub dispo | bouton HUD | +| Navigation | clic onglets | category_id | liste | tri stable | +| Transaction | achat | item+prix | débit+attribution | atomicité | + +#### Conditions d'Apparition (tableau détaillé) + +| Condition | Seuil | Opérateur | Résultat | +|---|---:|---|---| +| Compte créé | true | est | hub visible | + +#### Conditions de Disparition (tableau détaillé) + +| Condition | Seuil | Opérateur | Résultat | +|---|---:|---|---| +| Mode tutorial verrou | true | est | hub masqué temporairement | + +#### Hérédité (tableau détaillé) + +| Élément | Hérité | Règle | +|---|---|---| +| Soldes | Oui | persistants DB | +| Achats | Oui | items attribués | + +### 3. Impacts Environnementaux + +#### Impact Température (tableau détaillé) + +| Condition | Effet shop | Notes | +|---|---|---| +| - | aucun | UI | + +#### Impact Milieu (Biome) (tableau détaillé) + +| Biome | Effet shop | Notes | +|---|---|---| +| - | aucun | UI | + +#### Impact Saisons (tableau détaillé) + +| Saison | Effet shop | Notes | +|---|---|---| +| Saison active | items saisonniers visibles | gating explicite | + +#### Impact Heure / Jour-Nuit (tableau détaillé) + +| Période | Effet shop | Notes | +|---|---|---| +| - | aucun | - | + +### 4. Impacts Biologiques et Sociaux + +#### Impact Reproduction (tableau détaillé) + +| Facteur | Effet sur taux | Condition | +|---|---|---| +| - | aucun | shop n’impacte pas directement | + +#### Impact Mort (tableau détaillé) + +| Cas | Effet | Condition | +|---|---|---| +| - | aucun | - | + +#### Impact Nourriture (tableau détaillé) + +| Ressource | Effet | Condition | +|---|---|---| +| Achat nourriture spéciale | stock + | transaction ok | + +#### Impact Attractivité(Visiteurs (tableau détaillé) + +| Action/État | Gain | Rayon | Notes | +|---|---:|---:|---| +| - | 0 | 0 | UI | + +#### Impact Attractivité Animaux) (tableau détaillé) + +| Action/État | Effet animaux | Condition | +|---|---|---| +| - | - | - | + +#### Impact Valeur (tableau détaillé) + +| Facteur | Variation | Condition | +|---|---:|---| +| Skins/thèmes achetés | + | valeur perçue | cosmétique | + +### 5. Impacts Logistiques et Économiques + +#### Vitesse (Camion) (tableau détaillé) + +| Paramètre | Effet | Condition | +|---|---|---| +| - | - | - | + +#### Vitesse (Nurserie) (tableau détaillé) + +| Paramètre | Effet | Condition | +|---|---|---| +| Achat upgrade nurserie | level ↑ | transaction ok | + +#### Vitesse (Accueil) (tableau détaillé) + +| Paramètre | Effet | Condition | +|---|---|---| +| Achat accueil | capacité ↑ | transaction ok | + +#### Vitesse (Recherche) (tableau détaillé) + +| Paramètre | Effet | Condition | +|---|---|---| +| Achat recherche | vitesse ↑ | transaction ok | + +#### Vitesse (Labo) (tableau détaillé) + +| Paramètre | Effet | Condition | +|---|---|---| +| Achat labo | capacité ↑ | transaction ok | + +#### Vitesse (Visite) (tableau détaillé) + +| Paramètre | Effet | Condition | +|---|---|---| +| Achat décor | attractivité ↑ | transaction ok | + +#### Dépenses (Billeterie) (tableau détaillé) + +| Poste | Coût | Unité | Condition | +|---|---:|---|---| +| - | 0 | - | - | + +#### Dépenses (Boutiques) (tableau détaillé) + +| Poste | Coût | Unité | Condition | +|---|---:|---|---| +| - | 0 | - | - | + +#### Dépenses (Visiteurs) (tableau détaillé) + +| Poste | Coût | Unité | Condition | +|---|---:|---|---| +| - | 0 | - | - | + +#### Dépenses (Employés) (tableau détaillé) + +| Poste | Coût | Unité | Condition | +|---|---:|---|---| +| Recrutement | variable | coins | item employé | + +#### 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 | +|---|---:|---|---| +| Upgrade | variable | coins | achat | + +#### Dépenses (Nourriture) (tableau détaillé) + +| Poste | Coût | Unité | Condition | +|---|---:|---|---| +| Consommables | variable | coins | achat | + +#### Dépenses (Acceuil des animaux) (tableau détaillé) + +| Poste | Coût | Unité | Condition | +|---|---:|---|---| +| Achat capacité | variable | coins | achat | + +#### Dépenses (Camion) (tableau détaillé) + +| Poste | Coût | Unité | Condition | +|---|---:|---|---| +| Achat upgrade | variable | coins | achat | + +#### Trajet Visiteurs + +##### Trajet Visiteurs vers/depuis la ville (tableau détaillé) + +| Source | Destination | Déclencheur | Effet | +|---|---|---|---| +| - | - | - | - | + +##### Trajet Visiteurs vers/depuis les animaux (tableau détaillé) + +| Source | Destination | Déclencheur | Effet | +|---|---|---|---| +| - | - | - | - | + +##### Trajet Visiteurs vers/depuis les boutiques (tableau détaillé) + +| Source | Destination | Déclencheur | Effet | +|---|---|---|---| +| - | - | - | - | + +##### Trajet Visiteurs vers/depuis la billeterie (entrées/sorties du zoo) (tableau détaillé) + +| Source | Destination | Déclencheur | Effet | +|---|---|---|---| +| - | - | - | - | + +### 6. Événements + +#### Événements du Jeu (tableau détaillé) + +| Event | Déclencheur | Payload | Effet | +|---|---|---|---| +| `OPEN_SHOP_HUB` | clic | - | ouvre | +| `SHOP_CATALOG_LOADED` | open | version | liste | +| `SHOP_PURCHASED` | achat | item_id, qty | attribue | + +#### Événements du Carte (tableau détaillé) + +| Event | Déclencheur | Effet | +|---|---|---| +| - | - | - | + +#### Événements du Zoo (tableau détaillé) + +| Event | Déclencheur | Effet | +|---|---|---| +| - | - | - | + +#### Événements du Ville / Visiteur (tableau détaillé) + +| Event | Déclencheur | Effet | +|---|---|---| +| - | - | - | + +#### Événements du Visiteur (tableau détaillé) + +| Event | Déclencheur | Effet | +|---|---|---| +| - | - | - | + +#### Événements du Joueur (tableau détaillé) + +| Event | Déclencheur | Effet | +|---|---|---| +| `SHOP_CATEGORY_SELECTED` | onglet | UI | + +### 7. Progression + +#### Tableau des Upgrades (tableau détaillé) + +| Niveau | Coût | Effet | Débloque | +|---|---:|---|---| +| Hub 1 | 0 | catégories base | - | + +### 8. Logique et Interfaces + +#### Pseudo-code Impacts (tableau détaillé) + +| Fonction | Entrées | Sorties | Notes | +|---|---|---|---| +| `canPurchase` | balance, price | bool | fonds + gating | +| `purchaseItem` | item_id, qty | receipt | atomique | + +#### Messages d'Infos / Alerte (tableau détaillé) + +| ID | Niveau | Message | Condition | +|---|---|---|---| +| `NOT_ENOUGH_COINS` | Warning | "Fonds insuffisants." | achat | +| `SHOP_PURCHASED` | Info | "Achat effectué." | succès | + +## Annexes UX/UI + +### 1. Expérience Utilisateur (UX) + +#### Description UX (tableau détaillé) + +| Parcours | But | Friction | Réduction clics | +|---|---|---|---| +| Acheter employé | renforcer zoo | navigation | hub + onglet + CTA | +| Acheter consommable | soigner/booster | quantité | x1/x10 direct | + +#### Description UI (tableau détaillé) + +| Composant | Contenu | États | +|---|---|---| +| Onglets | catégories | actif/inactif | +| Carte item | icône, prix, CTA | disabled si fonds | +| Modal confirm | item + prix | ok/cancel | + +#### Emplacement (tableau détaillé) + +| Zone UI | Position | Notes | +|---|---|---| +| HUD | bouton | accès direct | +| Modal | centre | hub | + +#### Intégration (tableau détaillé) + +| Intégration | Contrat | Notes | +|---|---|---| +| `boutique.md` | boutique interne | cohérence | +| `inventaire_skins.md` | cosmétiques | attribution | + +#### Navigation (tableau détaillé) + +| Action | Chemin | Résultat | +|---|---|---| +| Ouvrir | HUD → menu | hub | +| Acheter | item → CTA | attribution | + +#### Événements (tableau détaillé) + +| Event UI | Déclencheur | Effet | +|---|---|---| +| `OPEN_SHOP_HUB` | clic | modal | +| `CLICK_BUY_ITEM` | CTA | achat | + +#### Assets Skinables + +##### Musiques (tableau détaillé) + +| Asset | Usage | Durée | Notes | +|---|---|---:|---| +| `shop_hub_loop.mp3` | menu achats | loop | neutre | + +##### Sons (tableau détaillé) + +| Asset | Usage | Volume | +|---|---|---| +| `ui_purchase_success.mp3` | succès | moyen | +| `ui_purchase_fail.mp3` | échec | moyen | + +##### Graphiques (tableau détaillé) + +| Asset | Usage | Contraintes | +|---|---|---| +| `shop_item_card.png` | carte item | scalable | +| `shop_coin_fly_fx.png` | feedback achat | overlay | + +##### Images (tableau détaillé) + +| Asset | Usage | +|---|---| +| `shop_banner.png` | header | + +##### Vidéos (tableau détaillé) + +| Asset | Usage | Durée | +|---|---|---:| +| `coin_fly.webm` | feedback | 0.8s | + +##### Animations (tableau détaillé) + +| Animation | Déclencheur | Notes | +|---|---|---| +| pièces qui volent | achat | 0.8s | + +##### Couleurs (tableau détaillé) + +| Token | Valeur | Usage | +|---|---|---| +| `shop_green` | #2E7D32 | CTA | +| `shop_gold` | #D4AF37 | prix | + +##### Textes (tableau détaillé) + +| Clé | FR | EN | +|---|---|---| +| `shop.title` | Achats | Shop | +| `shop.buy` | Acheter | Buy | + +##### Formes (tableau détaillé) + +| Élément | Forme | Notes | +|---|---|---| +| Cartes | rectangles arrondis | lisible | diff --git a/docs/specs/nourisseur.md b/docs/specs/nourisseur.md index e4ed9cb..85a5f92 100644 --- a/docs/specs/nourisseur.md +++ b/docs/specs/nourisseur.md @@ -46,6 +46,16 @@ Employé chargé de l'approvisionnement en nourriture des enclos. Il remplit les * **Animation :** Verse de la nourriture dans l'auge. * **Alerte :** Icône "Faim" rouge clignotante si le nourisseur est débordé. +## Affichage contextuel (modules) +Le nourisseur sert de personnage contextuel lorsque des événements de nourriture surviennent sur la carte du zoo. + +### Déclencheurs (exemples) +| Event | Condition | Effet UI personnage | +|---|---|---| +| `FEED_LOW` | auge < seuil | bulle “Mangeoire vide” + CTA “Voir enclos” | +| `FOOD_STOCK_EMPTY` | stock global = 0 | bulle “Stock vide” + deep-link `menu_achats.md` | +| `FEEDER_OVERLOADED` | trop de tâches | bulle “Débordé” + CTA recruter/ajuster priorités | + # Annexes UX/UI diff --git a/docs/specs/nurse.md b/docs/specs/nurse.md new file mode 100644 index 0000000..b73bf78 --- /dev/null +++ b/docs/specs/nurse.md @@ -0,0 +1,75 @@ +# Nurse (Nurserie) + +## 1. Définition +Employée spécialisée dans la gestion de la nurserie : incubation, soins de base aux bébés, assistance au joueur lors des événements d’éclosion et d’urgence. Achetable avec des pièces (même logique que les autres employés). + +## 2. Fonctions +* **Triage nurserie :** Priorise les slots (œuf prêt, bébé critique, croissance). +* **Soins pédiatriques :** Applique des soins de stabilisation (réduit la vitesse de dégradation quand un bébé est en danger), en complément du `soigneur` (qui gère la santé globale). +* **Régulation :** Contribue à la régulation de température de la nurserie (effet borné, dépend du niveau de nurserie). +* **Assistance UI :** Sert de personnage contextuel quand la nurserie est actionnée ou qu’un événement nurserie survient. + +## 3. Icone +* **Représentation :** Biberon + petit badge croix (pédiatrie). +* **Couleur dominante :** Pastel + blanc. + +## 4. Interactions +* **Recrutement :** Menu “Employés” (ou Menu Achats → Personnel). +* **Assignation :** Assignable à une `nurserie` spécifique ou à une zone (si plusieurs nurseries existent). +* **Priorités :** “Œufs prêts” > “Bébés critiques” > “Croissance” > “Maintenance”. + +## 5. Annexes Techniques + +### Données (JSON) +```json +{ + "employee_id": "nurse_01", + "type": "nurse", + "name": "Aline", + "created_at": "timestamp", + "salary": 45, + "hire_cost": 450, + "assigned_building": "nurserie_uuid | null", + "stats": { + "speed": 1.0, + "stabilization": 0.7, + "temp_help": 1 + }, + "state": "enum (IDLE, MOVING, STABILIZING, CHECKING_SLOTS, BREAK)", + "iso_x": "integer", + "iso_y": "integer", + "z_index": "integer" +} +``` + +### Règles Métier +* La nurse ne remplace pas le `soigneur` : elle **n’agit** que sur les bébés et la nurserie (périmètre borné). +* Si aucun chemin n’existe vers la nurserie, l’action est refusée avec message explicite (pas de fallback silencieux). + +# 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. + +## Affichage contextuel (modules) +Le personnage “Nurse” s’affiche dans les modules suivants : +- **Nurserie** (`nurserie.md`) : ouverture, éclosion prête, nurserie pleine, urgence bébé. +- **Inventaire bébés** (`inventaire_bebe_animaux.md`) : filtre “en danger”, deep-link, actions “voir”. +- **Fiche bébé** (`bebe_animal.md`) : état critique, sortie prématurée (confirmation), soins. + +### Déclencheurs (exemples) +| Module | Event / Action | Effet UI | +|---|---|---| +| Nurserie | `OPEN_NURSERIE` | La nurse apparaît en vignette/portrait dans le panneau. | +| Nurserie | `EGG_HATCHED` / slot prêt | Bulle : “Éclosion prête” + CTA deep-link slot. | +| Nurserie | `NURSERIE_FULL` | Bulle : cause (slots pleins) + CTA “Voir slots”. | +| Bébé | `BABY_CRITICAL` | Bulle : raison (froid/faim/santé) + CTA “Voir bébé”. | + +## Skins & thèmes +* Uniforme et palette dérivent du thème (`theme.md`). +* Accessoires (stéthoscope, badge, serre-tête) via skins (`skin.md`, `inventaire_skins.md`). diff --git a/docs/specs/nurserie.md b/docs/specs/nurserie.md index 68d2cca..e64bed4 100644 --- a/docs/specs/nurserie.md +++ b/docs/specs/nurserie.md @@ -229,3 +229,514 @@ function updateNurserie(nurserie): - **Couleurs** : Vert #00FF00 (OK), Rouge #FF0000 (KO). - **Textes** : Tooltip "Placer ici". - **Formes** : Carré de sélection. + +## Définition + +| Champ | Valeur | +|---|---| +| Concept | Bâtiment “nurserie” : incubation des œufs, croissance sécurisée des bébés, et tampon avant placement sur la grille. | +| Rôle | Réduire la mortalité infantile via régulation température/soins, gérer les slots, et fournir un parcours UI simple (clic nurserie → slots). | +| Portée | Une instance de bâtiment sur la grille isométrique, avec `level` et `slots[]`. | +| Contrainte | Pas de cache/mémorisation : timers et progressions recalculés à la volée (lazy update) ; pas de fallback silencieux (slot invalide => erreur + message). | + +## Fonctions (tableau détaillé) + +| Fonction | Déclencheur | Entrées | Sorties | Règles | Observabilité | +|---|---|---|---|---|---| +| Ouvrir nurserie | clic bâtiment | `nurserie_id` | UI slots | affiche slots + timers | Event `OPEN_NURSERIE` | +| Affecter œuf à slot | achat/repro | `egg_id` | slot rempli | auto si slot vide ; sinon erreur | Event `EGG_ADDED` / `NURSERIE_FULL` | +| Éclosion | fin timer + clic | `egg_id` | `baby_id` | reveal au clic ; slot passe bébé | Event `EGG_HATCHED` | +| Croissance | tick lazy | temps, level | `growth_progress` ↑ | multiplicateur par level ; clamp | Event `BABY_GROWTH_UPDATED` | +| Réguler température | calcul impact | env temp | dégâts temp ↓ | tolérance selon level | Event `NURSERIE_TEMP_REGULATED` | +| Nourrir auto | tick | stock nourriture | faim ↓ | si stock > 0, conso | Event `BABY_AUTO_FED` | +| Sortir bébé | drag/tap place | `baby_id`, case | bébé placé | validation case ; transfert iso coords | Event `PLACE_BABY` | +| Upgrade nurserie | action joueur | coins, niveau | level ↑ | max 7 ; effets cumulés | Event `NURSERIE_UPGRADED` | +| Urgence soins | action | `baby_id` | santé ↑ | dispo level ≥ 4 | Event `NURSERIE_EMERGENCY_CARE` | + +## Icone de base + +| Élément | Spécification | +|---|---| +| Représentation | Bâtiment couveuse/vitrine, fumée douce, lumières chaudes | +| Couleur dominante | Pastel (jaune paille, bleu clair) | +| Variantes | `nursery_lvl_{1..7}_dir_{N,E,S,W}.png` | +| États | `idle`, `egg_ready` (brille), `baby_ready` (jauge 100), `full` (badge) | + +## Interactions (tableau détaillé) + +| Interaction | Type | Préconditions | Étapes UI | Résultat | Erreurs / Messages | +|---|---|---|---|---|---| +| Ouvrir slots | Consultation | - | clic nurserie | bottom sheet slots | - | +| Placer œuf | Action | slot vide | achat/repro → auto place | slot occupé | `NURSERIE_FULL` | +| Cliquer œuf éclos | Action | timer fini | clic slot | popup bébé | - | +| Sortir bébé | Action | bébé en slot | drag vers grille + confirm | bébé placé | `PLACEMENT_INVALID`, `BABY_TOO_FRAGILE` | +| Upgrade | Action | coins ok | clic “Améliorer” | level ↑ | `NOT_ENOUGH_COINS` | +| Soins d’urgence | Action | level ≥ 4 | bouton “Urgence” | santé ↑ | `LEVEL_TOO_LOW` | + +## Personnage contextuel (événements & interaction) +Voir `nurse.md`. + +### Affichage +La nurse s’affiche lorsque : +- la nurserie est **actionnée** (ouverture, clic slot, éclosion, placement, urgence) ; +- un **événement** de nurserie survient (slot prêt, nurserie pleine, bébé critique). + +### Déclencheurs (événements) +| Event | Condition | Effet UI personnage | +|---|---|---| +| `OPEN_NURSERIE` | clic bâtiment | portrait + état slots + CTA | +| `EGG_ADDED` | œuf affecté | bulle “Œuf placé” + deep-link slot | +| `EGG_HATCHED` | clic éclosion | bulle “Bébé né” + CTA “Voir bébé” | +| `NURSERIE_FULL` | slots pleins | bulle “Nurserie pleine” + CTA “Voir slots” | +| `BABY_CRITICAL` | bébé en danger | bulle “Urgence” + CTA “Voir bébé” | + +### Skins & thèmes +Uniforme et accessoires de la nurse suivent `theme.md` et `inventaire_skins.md`. + +## Annexes Techniques + +### 1. Données et États (tableau détaillé) + +| Donnée / État | Type | Exemple | Source | Contraintes | +|---|---|---|---|---| +| `id` | uuid_v4 | `uuid_v4` | DB | - | +| `type` | string | `nurserie` | DB | constant | +| `level` | int | 1 | DB | 1..7 | +| `slots[].slot_id` | int | 1 | DB | 1..level | +| `slots[].content_type` | string \| null | `egg` | DB | `egg`/`baby`/null | +| `slots[].content_id` | uuid_v4 \| null | `uuid_v4` | DB | egg_id/baby_id | +| `slots[].timer_end` | timestamp \| null | - | DB | UTC | +| `slots[].growth_progress` | float \| null | 42.0 | DB | 0..100 si bébé | +| `iso_x` | int | 120 | DB | grille | +| `iso_y` | int | 88 | DB | grille | +| `z_index` | int | 12088 | calcul | profondeur iso | +| `modules.has_vitrine` | boolean | false | DB | unlock level ≥ 3 | +| `modules.has_emergency_care` | boolean | false | DB | unlock level ≥ 4 | +| `timestamps.created_at` | timestamp | - | DB | UTC | + +#### Caractéristiques Initiales (tableau détaillé) + +| Caractéristique | Valeur initiale | Unité | Notes | +|---|---:|---|---| +| Slots | 1 | count | level 1 | +| Vitesse éclosion | 1.0 | coef | base | +| Vitesse croissance | 1.0 | coef | base | +| Tolérance T° | 2 | °C | ± | +| Auto-nourrissage | actif | bool | si stock > 0 | + +#### Scores Initiaux (tableau détaillé) + +| Score | Valeur initiale | Plage | Impact | +|---|---:|---|---| +| Taux survie (si conditions) | 100% | 0..100% | objectif gestion | +| Jumeaux | 1% | 0..5% | événement rare | + +### 2. Cycles de Vie et Apparition (tableau détaillé) + +| Phase | Déclencheur | Entrées | Sorties | Invariants | +|---|---|---|---|---| +| Construction | joueur | coins | nurserie | position iso fixe | +| Utilisation | achat/repro | œufs | slots | capacité limitée | +| Éclosion | timer fini + clic | egg_id | baby_id | reveal explicite | +| Croissance | temps | baby_id | progress | clamp | +| Sortie | placement | baby_id | sur grille | slot libéré | + +#### Conditions d'Apparition (tableau détaillé) + +| Condition | Seuil | Opérateur | Résultat | +|---|---:|---|---| +| Construction | true | est | nurserie créée | +| Début partie | true | est | nurserie initiale (si scénario) | + +#### Conditions de Disparition (tableau détaillé) + +| Condition | Seuil | Opérateur | Résultat | +|---|---:|---|---| +| Destruction | true | est | supprimée si vide | + +#### Hérédité (tableau détaillé) + +| Élément | Hérité | Règle | +|---|---|---| +| Niveau nurserie | Oui | persiste | +| Bonus génétique | Oui | chance rareté (level ≥ 5) | + +### 3. Impacts Environnementaux + +#### Impact Température (tableau détaillé) + +| Condition | Effet nurserie | Notes | +|---|---|---| +| \(|\Delta T|\le 2\) (lvl1) | pas de dégâts | tolérance | +| \(|\Delta T|\le 10\) (lvl7) | pas de dégâts | climatisation | +| hors tolérance | dégâts réduits | protège mais pas invincible | + +#### Impact Milieu (Biome) (tableau détaillé) + +| Biome | Effet | Notes | +|---|---|---| +| Compatible avec œuf | croissance +10% | règle existante | +| Incompatible | aucun bonus | pas de malus direct | + +#### Impact Saisons (tableau détaillé) + +| Saison | Effet | Notes | +|---|---|---| +| Hiver/Été | atténue extrêmes | via régulation | +| Printemps | vitesse +10% | règle existante | + +#### Impact Heure / Jour-Nuit (tableau détaillé) + +| Période | Effet | Notes | +|---|---|---| +| Nuit | veilleuse | pas de malus obscurité | + +### 4. Impacts Biologiques et Sociaux + +#### Impact Reproduction (tableau détaillé) + +| Facteur | Effet sur taux | Condition | +|---|---|---| +| Incubateur | vitesse +10% | parents présents (règle existante) | + +#### Impact Mort (tableau détaillé) + +| Cas | Effet | Condition | +|---|---|---| +| Bébé en nurserie | mortalité ↓ | santé stable sauf faim extrême | +| Urgence | soins | level ≥ 4 | + +#### Impact Nourriture (tableau détaillé) + +| Ressource | Effet | Condition | +|---|---|---| +| Stock global > 0 | nourrir auto | conso réduite 50% vs adulte | +| Stock = 0 | faim ↑ | alertes | + +#### Impact Attractivité(Visiteurs (tableau détaillé) + +| Action/État | Gain | Rayon | Notes | +|---|---:|---:|---| +| Vitrine active | + | 1 case | attroupement devant vitre | + +#### Impact Attractivité Animaux) (tableau détaillé) + +| Action/État | Effet animaux | Condition | +|---|---|---| +| - | - | - | + +#### Impact Valeur (tableau détaillé) + +| Facteur | Variation | Condition | +|---|---:|---| +| Certificat bonne santé | +10% | bébé né + bien traité | + +### 5. Impacts Logistiques et Économiques + +#### Vitesse (Camion) (tableau détaillé) + +| Paramètre | Effet | Condition | +|---|---|---| +| - | - | - | + +#### Vitesse (Nurserie) (tableau détaillé) + +| Paramètre | Effet | Condition | +|---|---|---| +| Level 1..7 | x{1.0,1.2,1.5,2.0,3.0,5.0,10.0} | progression existante | + +#### Vitesse (Accueil) (tableau détaillé) + +| Paramètre | Effet | Condition | +|---|---|---| +| - | - | - | + +#### Vitesse (Recherche) (tableau détaillé) + +| Paramètre | Effet | Condition | +|---|---|---| +| Bonus rareté | +5% | level ≥ 5 | + +#### Vitesse (Labo) (tableau détaillé) + +| Paramètre | Effet | Condition | +|---|---|---| +| - | - | - | + +#### Vitesse (Visite) (tableau détaillé) + +| Paramètre | Effet | Condition | +|---|---|---| +| Vitrine | attroupement | module vitrine | + +#### Dépenses (Billeterie) (tableau détaillé) + +| Poste | Coût | Unité | Condition | +|---|---:|---|---| +| - | 0 | - | - | + +#### Dépenses (Boutiques) (tableau détaillé) + +| Poste | Coût | Unité | Condition | +|---|---:|---|---| +| Électricité | 5 | coins / h | règle existante | + +#### Dépenses (Visiteurs) (tableau détaillé) + +| Poste | Coût | Unité | Condition | +|---|---:|---|---| +| - | 0 | - | - | + +#### Dépenses (Employés) (tableau détaillé) + +| Poste | Coût | Unité | Condition | +|---|---:|---|---| +| Soins urgence | 10 | coins | level ≥ 4 | + +#### 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 | +|---|---:|---|---| +| Upgrade | variable | coins | level up | + +#### Dépenses (Nourriture) (tableau détaillé) + +| Poste | Coût | Unité | Condition | +|---|---:|---|---| +| Conso bébé | 0.5 | ration | vs adulte | + +#### Dépenses (Acceuil des animaux) (tableau détaillé) + +| Poste | Coût | Unité | Condition | +|---|---:|---|---| +| Contrôle santé | 0 | - | inclus (spécif) | + +#### 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 | +|---|---|---|---| +| - | - | - | - | + +##### Trajet Visiteurs vers/depuis les animaux (tableau détaillé) + +| Source | Destination | Déclencheur | Effet | +|---|---|---|---| +| Allées | Vitrine nurserie | curiosité | attroupement | + +##### Trajet Visiteurs vers/depuis les boutiques (tableau détaillé) + +| Source | Destination | Déclencheur | Effet | +|---|---|---|---| +| Vitrine | Boutique | souvenir | détour | + +##### Trajet Visiteurs vers/depuis la billeterie (entrées/sorties du zoo) (tableau détaillé) + +| Source | Destination | Déclencheur | Effet | +|---|---|---|---| +| Entrée | Nurserie | signal UI | route directe | + +### 6. Événements + +#### Événements du Jeu (tableau détaillé) + +| Event | Déclencheur | Payload | Effet | +|---|---|---|---| +| `OPEN_NURSERIE` | clic | `nurserie_id` | UI | +| `EGG_ADDED` | auto | `egg_id` | slot rempli | +| `EGG_HATCHED` | clic | `egg_id`, `baby_id` | spawn bébé | +| `NURSERIE_FULL` | erreur | `nurserie_id` | message | +| `NURSERIE_UPGRADED` | action | `level` | effets | + +#### Événements du Carte (tableau détaillé) + +| Event | Déclencheur | Effet | +|---|---|---| +| `NURSERY_MARKER_SHOW` | map open | marker | + +#### Événements du Zoo (tableau détaillé) + +| Event | Déclencheur | Effet | +|---|---|---| +| `HATCH_CLICK` | clic | animation | +| `PLACE_BABY` | placement | transfert | + +#### Événements du Ville / Visiteur (tableau détaillé) + +| Event | Déclencheur | Effet | +|---|---|---| +| `VISITOR_GATHERS_AT_NURSERY` | vitrine | attroupement | + +#### Événements du Visiteur (tableau détaillé) + +| Event | Déclencheur | Effet | +|---|---|---| +| `VISITOR_STOPS_AT_WINDOW` | proximité | temps visite + | + +#### Événements du Joueur (tableau détaillé) + +| Event | Déclencheur | Effet | +|---|---|---| +| `PLAYER_UPGRADES_NURSERY` | clic | level ↑ | + +### 7. Progression + +#### Tableau des Upgrades (tableau détaillé) + +| Niveau | Coût | Effet | Débloque | +|---|---:|---|---| +| 1 | 100 | 1 slot, tolérance ±2°C | base | +| 2 | 200 | 2 slots, vitesse x1.2 | - | +| 3 | 400 | 3 slots, vitrine | visiteurs | +| 4 | 800 | 4 slots, urgence soins | soins | +| 5 | 1600 | 5 slots, rareté +5% | génétique | +| 6 | 3200 | 6 slots, vitesse x5 | - | +| 7 | 6400 | 7 slots, tolérance ±10°C | clim | + +### 8. Logique et Interfaces + +#### Pseudo-code Impacts (tableau détaillé) + +| Fonction | Entrées | Sorties | Notes | +|---|---|---|---| +| `assignEggToSlot` | egg, slots | slot_id | pas de slot => erreur | +| `hatchEgg` | egg | baby | reveal au clic | +| `computeNurseryMultiplier` | level | float | table | +| `applyTempRegulation` | envTemp, level | delta | tolérance | + +#### Messages d'Infos / Alerte (tableau détaillé) + +| ID | Niveau | Message | Condition | +|---|---|---|---| +| `EGG_HATCHED` | Info | "Un œuf a éclos en nurserie." | éclosion | +| `NURSERIE_FULL` | Warning | "Nurserie pleine." | slots pleins | +| `TWINS` | Info | "Des jumeaux sont nés." | chance 1% | + +## Annexes UX/UI + +### 1. Expérience Utilisateur (UX) + +#### Description UX (tableau détaillé) + +| Parcours | But | Friction | Réduction clics | +|---|---|---|---| +| Gérer slots | suivre œufs/bébés | navigation | clic direct bâtiment | +| Éclosion | révéler bébé | attente | badge “prêt” + clic unique | +| Sortir bébé | placement | erreurs | overlay vert/rouge | + +#### Description UI (tableau détaillé) + +| Composant | Contenu | États | +|---|---|---| +| Bottom sheet | grille slots | open/closed | +| Slot | icône + barre | egg/baby/empty | +| Popup récompense | espèce/rareté | confirm | + +#### Emplacement (tableau détaillé) + +| Zone UI | Position | Notes | +|---|---|---| +| Carte zoo | sur case | clic | +| Modal | centre/bottom | slots | + +#### Intégration (tableau détaillé) + +| Intégration | Contrat | Notes | +|---|---|---| +| `bebe_animal.md` | croissance | jauge | +| `inventaire_bebe_animaux.md` | deep-link | navigation | + +#### Navigation (tableau détaillé) + +| Action | Chemin | Résultat | +|---|---|---| +| Ouvrir | clic nurserie | slots | +| Aller slot | clic notif | focus slot | +| Placer | drag → drop | bébé sur grille | + +#### Événements (tableau détaillé) + +| Event UI | Déclencheur | Effet | +|---|---|---| +| `OPEN_NURSERIE` | clic | modal | +| `HATCH_CLICK` | clic slot | reveal | +| `DRAG_START` | drag | placement mode | + +#### Assets Skinables + +##### Musiques (tableau détaillé) + +| Asset | Usage | Durée | Notes | +|---|---|---:|---| +| `nursery_lullaby_loop.mp3` | nurserie | loop | doux | + +##### Sons (tableau détaillé) + +| Asset | Usage | Volume | +|---|---|---| +| `ui_open.mp3` | ouvrir | bas | +| `crack_egg.mp3` | éclosion | moyen | +| `baby_cry.mp3` | reveal | bas | + +##### Graphiques (tableau détaillé) + +| Asset | Usage | Contraintes | +|---|---|---| +| `nursery_slot_frame.png` | slot | scalable | +| `placement_grid_overlay.png` | placement | contraste | + +##### Images (tableau détaillé) + +| Asset | Usage | +|---|---| +| `egg_rarity_badge.png` | rareté | +| `baby_card_bg.png` | popup | + +##### Vidéos (tableau détaillé) + +| Asset | Usage | Durée | +|---|---|---:| +| `nursery_clouds_bg.webm` | fond | loop | + +##### Animations (tableau détaillé) + +| Animation | Déclencheur | Notes | +|---|---|---| +| tremblement œuf | proche éclosion | 0.8s loop | +| glow slot | prêt | 0.6s | + +##### Couleurs (tableau détaillé) + +| Token | Valeur | Usage | +|---|---|---| +| `nursery_pastel_yellow` | #F7E7A6 | fond | +| `nursery_ok_green` | #00FF00 | placement | +| `nursery_ko_red` | #FF0000 | placement | + +##### Textes (tableau détaillé) + +| Clé | FR | EN | +|---|---|---| +| `nursery.title` | Nurserie | Nursery | +| `nursery.slot` | Slot | Slot | +| `nursery.full` | Nurserie pleine. | Nursery full. | + +##### Formes (tableau détaillé) + +| Élément | Forme | Notes | +|---|---|---| +| Slot | rectangle arrondi | lisible | +| Badge prêt | rond | contraste | diff --git a/docs/specs/personnage_generique.md b/docs/specs/personnage_generique.md index f0d5d0d..d1fc6f6 100644 --- a/docs/specs/personnage_generique.md +++ b/docs/specs/personnage_generique.md @@ -8,6 +8,52 @@ Entité active dans le jeu, qu'elle soit contrôlée par un humain, une IA ou un - **Bot** : IA gérant un zoo concurrent. - **Visiteur** : PNJ se promenant dans le zoo. - **Animal** : Entité biologique gérée par le joueur. +- **Staff (Employé / PNJ de service)** : Personnage de service (accueil, guichet, boutique, recherche, soin, sécurité, nurserie, laboratoire). + +## Skins, thèmes et personnalisation +Les personnages (joueur, visiteurs, bots, staff) sont rendus avec une combinaison : +- **Thème global** : voir `theme.md` (palette, ambiance UI, décor, uniformes). +- **Skins** : voir `skin.md` et l’équipement/possession via `inventaire_skins.md`. + +### Règles de rendu (contrat) +- Un personnage peut avoir des **variantes visuelles** (uniforme, accessoires, palette) déterminées par le thème et les skins équipés. +- Les personnages affichés dans une UI (portrait, badge, “paper doll”, bulle) doivent rester **cohérents** avec l’avatar/skin courant. +- Un même rôle (ex. “vendeur”) peut avoir plusieurs skins, mais **un skin actif** doit être explicite (pas d’auto-déduction silencieuse). + +## Personnage contextuel de module (UI) +Certains modules affichent un **personnage contextuel** quand le module est actionné ou lorsqu’un événement lié au module survient. + +### Objectifs +- **Ancrage** : associer un module à un rôle (ex. Nurserie → Nurse). +- **Interaction** : proposer des actions directes (1 clic) et des explications factuelles (état, cause, prochaine action). +- **Cohérence cosmétique** : appliquer thème + skins sur le personnage. + +### Déclencheurs (génériques) +- **Ouverture / activation** : ouverture d’un panneau, sélection d’un bâtiment, entrée dans un mode (build, gestion). +- **Événement module** : arrivée, incident, succès d’une action, blocage explicite (fonds insuffisants, capacité pleine, gating réputation). +- **État critique** : un statut “critique” du module est actif (ex. nurserie pleine, alerte quarantaine, alerte sécurité). + +### Interactions (génériques) +- **Clic** : ouvre l’écran/action la plus pertinente du module (deep-link). +- **Survol / tap** : affiche une fiche courte (rôle + état + action possible). +- **Dialogue/bulle** : messages informatifs liés à un événement (sans “best effort”, sans masquage d’erreur). + +### Index des rôles (spécifications associées) +- **Visiteurs homme/femme** : `visiteur.md` +- **Joueur actif (avatar + pseudo + skins + profil)** : `joueur.md`, `avatar_joueur.md`, `inventaire_skins.md` +- **Autres joueurs** : `joueur.md` (représentation externe) + `avatar_joueur.md` (portrait partagé) +- **Bots** : `bot.md` +- **Chercheur** : `chercheur.md` +- **Nourisseur** : `nourisseur.md` +- **Soigneur** : `soigneur.md` +- **Agent de sécurité** : `agent_securite.md` +- **Nurse (nurserie)** : `nurse.md` +- **Personnel d’accueil (nouveaux animaux)** : `personnel_accueil.md` +- **Guichetière (billetterie)** : `guichetiere.md` +- **Vendeur (boutique)** : `vendeur.md` +- **Vendeur “achat en pièces” (menu achats / conversion monnaies)** : `vendeur_pieces.md` +- **Laborantin (site laboratoire carte monde)** : `laborantin.md` +- **Maire (ville / carte monde)** : `maire.md` # Annexes Techniques diff --git a/docs/specs/personnel_accueil.md b/docs/specs/personnel_accueil.md new file mode 100644 index 0000000..3edb351 --- /dev/null +++ b/docs/specs/personnel_accueil.md @@ -0,0 +1,68 @@ +# Personnel d’accueil (nouveaux animaux) + +## 1. Définition +Personnel de service associé à l’Accueil des animaux. Il gère le check-in (quarantaine/acclimatation), la traçabilité (documents, historique) et sert de personnage contextuel lors des arrivées et incidents d’accueil. + +## 2. Fonctions +* **Check-in** : Associe l’animal livré/acheté à un slot d’accueil (contrôle capacité, timers). +* **Traçabilité** : Rend visibles des informations (traits révélés, historique) selon le score “Traçabilité” de l’accueil. +* **Quarantaine** : Surveille et signale les incidents `QUARANTINE_ALERT` avec action de consultation. +* **Assistance UI** : Personnage contextuel de l’Accueil et des livraisons camion. + +## 3. Icone +* **Représentation :** Tampon “OK” + caisse (logistique). +* **Couleur dominante :** Ambre + bleu (service). + +## 4. Interactions +* **Consultation :** Clic sur l’Accueil → bottom sheet slots (personnel visible dans le panneau). +* **Incident :** Clic sur badge quarantaine → panneau cause/coût/durée. +* **Placement :** CTA “Placer” (deep-link) vers le mode placement. + +## 5. Annexes Techniques + +### Données (JSON) +```json +{ + "employee_id": "reception_staff_01", + "type": "personnel_accueil_animaux", + "name": "Sam", + "salary": 35, + "hire_cost": 0, + "assigned_building": "reception_uuid", + "state": "enum (IDLE, CHECKIN, PAPERWORK, QUARANTINE, BREAK)", + "iso_x": "integer", + "iso_y": "integer", + "z_index": "integer" +} +``` + +### Règles Métier +* Par défaut, le personnel d’accueil est **lié** au bâtiment `accueil_animaux.md` (pas un employé libre). +* En cas d’accueil saturé, l’erreur est explicite (`RECEPTION_FULL`) et le personnage affiche l’état (pas de dégradation silencieuse). + +# 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. + +## Affichage contextuel (modules) +- **Accueil des animaux** (`accueil_animaux.md`) : arrivée, prêt, saturation, incident quarantaine. +- **Camion** (`camion.md`) : arrivée au zoo, déchargement vers accueil (adulte). + +### Déclencheurs (exemples) +| Module | Event / Action | Effet UI | +|---|---|---| +| Accueil | `OPEN_RECEPTION` | Portrait + état “slots” (libres/occupés/prêts). | +| Accueil | `ANIMAL_ARRIVAL` | Bulle “Arrivée enregistrée” + CTA inspecter. | +| Accueil | `ANIMAL_READY` | Bulle “Prêt à placer” + CTA “Placer”. | +| Accueil | `RECEPTION_FULL` | Bulle “Accueil saturé” + CTA “Voir slots”. | +| Accueil | `QUARANTINE_ALERT` | Bulle “Alerte quarantaine” + CTA “Voir détails”. | + +## Skins & thèmes +* Uniforme dépend du thème (`theme.md`) : veste, badge, clipboard. +* Variantes cosmétiques via `inventaire_skins.md` si le thème autorise des uniformes alternatifs. diff --git a/docs/specs/soigneur.md b/docs/specs/soigneur.md index 9c44e70..97ffd94 100644 --- a/docs/specs/soigneur.md +++ b/docs/specs/soigneur.md @@ -49,6 +49,16 @@ Employé spécialisé dans la santé des animaux. Il intervient pour prévenir l * **Feedback :** Icône de croix verte au-dessus de l'animal soigné. * **Notification :** "Un animal est malade !" (si pas de soigneur dispo) ou "Animal soigné par [Nom]". +## Affichage contextuel (modules) +Le soigneur sert de personnage contextuel lors des événements de santé animale. + +### Déclencheurs (exemples) +| Event | Condition | Effet UI personnage | +|---|---|---| +| `ANIMAL_SICK` | animal passe `SICK` | bulle “Maladie détectée” + CTA “Voir animal” | +| `NO_HEALER_AVAILABLE` | file saturée / absent | bulle “Aucun soigneur dispo” + CTA recruter | +| `HEALTH_SYSTEM_OVERLOADED` | trop malades | bulle “Système santé saturé” + CTA prioriser zones | + # Annexes UX/UI diff --git a/docs/specs/vendeur.md b/docs/specs/vendeur.md new file mode 100644 index 0000000..4386ad7 --- /dev/null +++ b/docs/specs/vendeur.md @@ -0,0 +1,57 @@ +# Vendeur (Boutique) + +## 1. Définition +Personnage de service associé aux boutiques du zoo. Il matérialise la vente (service, file), les promotions et sert de personnage contextuel lors des événements de boutique. + +## 2. Fonctions +* **Service clients** : Représente la cadence de service de la boutique (entrée/sortie visiteurs). +* **Animation vente** : Déclenche les FX de caisse (“pièces qui volent”) et les popups. +* **Gestion file/plein** : Signale `SHOP_FULL` avec cause (capacité) et action (upgrade / poser une autre boutique). + +## 3. Icone +* **Représentation :** Sac cadeau / caisse. +* **Couleur dominante :** Vert (vente) + or (pièces). + +## 4. Interactions +* **Clic boutique** : ouvre stats et options (upgrade, skin boutique). +* **Clic sur promo** : ouvre un panneau de détails (durée, effet) si la mécanique existe. + +## 5. Annexes Techniques + +### Données (JSON) +```json +{ + "employee_id": "vendor_01", + "type": "vendeur", + "name": "Léo", + "salary": 0, + "hire_cost": 0, + "assigned_building": "shop_uuid", + "state": "enum (IDLE, SERVING, RESTOCKING, OVERLOADED)", + "iso_x": "integer", + "iso_y": "integer", + "z_index": "integer" +} +``` + +### Règles Métier +* Le vendeur est lié à une `boutique.md` (pas un employé libre). +* En surcharge (file), l’état est visible (badge / bulle) et déclenche un message explicite. + +# 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. + +## Affichage contextuel (modules) +- **Boutique** (`boutique.md`) : vente, surcharge, rupture de stock (si activée), consultation stats. +- **Menu Achats** (`menu_achats.md`) : pour les items “boutique”/cosmétiques, le vendeur peut être le personnage contextuel lors de la prévisualisation et de la confirmation d’achat (UI). + +## Skins & thèmes +* Uniforme et comptoir dépendent du thème (`theme.md`). +* Variantes (type de boutique : food/souvenir/boisson) via skins (`inventaire_skins.md`) côté bâtiment + accessoires du vendeur. diff --git a/docs/specs/vendeur_pieces.md b/docs/specs/vendeur_pieces.md new file mode 100644 index 0000000..9be0a2c --- /dev/null +++ b/docs/specs/vendeur_pieces.md @@ -0,0 +1,55 @@ +# Vendeur (achat en pièces pour le zoo) + +## 1. Définition +Personnage contextuel du module de conversion/achat de monnaie “pièces” pour le zoo. Il intervient dans le `menu_achats.md` pour présenter les packs, confirmer les transactions et afficher les erreurs de paiement/fonds. + +## 2. Fonctions +* **Présentation packs** : Affiche les packs de pièces (et, si présent, la monnaie source : gems, coupons). +* **Transaction** : Déclenche une transaction atomique (débit monnaie source + crédit pièces). +* **Transparence** : Affiche le détail (taux, bonus éventuel, limites) sans masquage. + +## 3. Icone +* **Représentation :** Pile de pièces + symbole échange. +* **Couleur dominante :** Or. + +## 4. Interactions +* **Ouverture** : Menu Achats → section “Pièces”. +* **Achat** : Sélection pack → confirmer (si requis) → crédit. + +## 5. Annexes Techniques + +### Données (JSON) +```json +{ + "npc_id": "coin_merchant_01", + "type": "vendeur_pieces", + "name": "Maya", + "offers": [ + { + "offer_id": "coins_pack_s", + "coins_amount": 1000, + "price": { "gems": 10 } + } + ], + "limits": { + "daily_purchases_max": 10 + } +} +``` + +### Règles Métier +* Aucune alternative silencieuse : si paiement impossible, afficher la cause (`NOT_ENOUGH_GEMS`, `LIMIT_REACHED`, `PAYMENT_FAILED`). +* Les offres doivent rester cohérentes avec le thème (bannière, palette) et les règles “pas d’analytics”. + +# Annexes UX/UI + +## 0. Direction Artistique & Vue +* **Style** : Cohérent UI shop (réutilise `menu_achats.md`). +* **Personnage** : Portrait/mascotte dans le panneau “Pièces”. + +## Affichage contextuel (modules) +- **Menu Achats** (`menu_achats.md`) : ouverture section pièces, confirmation, achat réussi/échoué. + +## Skins & thèmes +* Tenue et décor dérivent du thème (`theme.md`). +* Accessoires (bourse, caisse, badge) via `inventaire_skins.md` si des skins “UI shop staff” existent. diff --git a/docs/specs/ville.md b/docs/specs/ville.md index cc5ba30..5e04008 100644 --- a/docs/specs/ville.md +++ b/docs/specs/ville.md @@ -13,6 +13,23 @@ Une ville est une entité sur la Carte du Monde qui génère le flux de visiteur - **Facteur de Distance** : Plus un zoo est proche d'une ville, plus il attire de visiteurs. - **Facteur d'Attractivité** : La valeur et la diversité du zoo influencent le choix des visiteurs. +## Personnage contextuel (événements & interaction) +Voir `maire.md`. + +### Affichage +Le maire s’affiche lorsque : +- la ville est **actionnée** (sélection/clic ville, ouverture panneau ville) ; +- un **événement** de ville survient (festival, grève, bonus économique, `CITY_EVENT`). + +### Déclencheurs (exemples) +| Event | Condition | Effet UI personnage | +|---|---|---| +| sélection ville | clic icône ville | portrait + synthèse (population, richesse, flux) | +| `CITY_EVENT` | événement actif | bulle “Événement en cours” + impacts chiffrés | + +### Skins & thèmes +Portrait et accessoires suivent `theme.md` ; variantes “ville” possibles via `inventaire_skins.md`. + # Annexes Techniques ## 1. Données et États diff --git a/docs/specs/visiteur.md b/docs/specs/visiteur.md index f37fce8..d532e9f 100644 --- a/docs/specs/visiteur.md +++ b/docs/specs/visiteur.md @@ -11,7 +11,12 @@ Personnage non-joueur (PNJ) qui visite le zoo. Il est la source principale de re | Jugement | Évalue la qualité du zoo et influence la réputation. | État Zoo, Prix | Score Réputation | ## Icone de base -Silhouette humaine simplifiée, couleur variable selon le type (Standard, VIP, Enfant). +Silhouette humaine simplifiée, couleur variable selon le type (Standard, VIP, Enfant) et la variante (Homme/Femme). + +## Variantes (homme/femme) et skins +- **Variantes** : homme/femme (et autres variantes si le catalogue le prévoit), sélectionnées par le générateur de visiteurs. +- **Thèmes** : la tenue/couleurs suivent `theme.md` (saisons, météo, ambiance). +- **Skins** : si activé, certaines variantes de visiteurs sont des skins (voir `inventaire_skins.md`) appliqués au rendu (sans impact gameplay). ## Interactions | Acteur A | Action | Acteur B | Résultat |