# Spécifications : Case (Générique) ## Définition Une case est l'unité élémentaire de la grille (Zoo ou Monde). ## Propriétés - **Coordonnées** : Position (x, y) dans la grille. - **Couleur (Milieu)** : Définit le biome et l'environnement visuel. - **Température** : Liée à la couleur/biome. - **Contenu** : Peut contenir un bâtiment, un animal, un visiteur, ou être vide. - **État** : Peut avoir des indicateurs visuels (herbe jaunie, givre, fertilité). # Annexes Techniques ## 1. Données et États ### Modèle de Données (JSON) ```json { "x": "integer", "y": "integer", "grid_id": "string (stable key: `${x}:${y}`)", "owner_id": "uuid | null (null = carte neutre/monde)", "created_at": "timestamp", "updated_at": "timestamp", "biome_id": "integer", "biome_type": "enum('prairie','ocean','montagne','savane','toundra','desert','jungle','marais')", "temperature_offset": "float (°C, additive)", "content_ref": "uuid | null", "content_type": "enum('empty','animal','building','visitor','staff','decoration','path','bridge','water','fence')", "fertility_level": "float (0-100)", "cleanliness_level": "float (0-100)", "state_flags": [ "enum('frozen','dry','dirty','fertilized','muddy','snowy','flooded','trampled')" ], "render": { "tile_variant": "string (auto-tiling key)", "occluder": "boolean", "hitbox": "enum('tile','base_sprite','custom_polygon')" }, "iso_x": "integer", "iso_y": "integer", "z_index": "integer" } ``` ### Contraintes (Invariants) * **Unicité** : (`x`,`y`) est unique dans une grille. * **Cohérence contenu** : si `content_type === 'empty'` alors `content_ref === null`. * **Température** : `temperature_offset` s’applique additivement à la température “biome” et aux modificateurs (saison, jour/nuit). * **Z-index isométrique** : `z_index` est dérivé principalement de `y` (et secondairement de `x`) pour garantir le recouvrement correct. ## 8. Logique et Interfaces ### Pseudo-code Impacts ```python def fertilize_case(case, player): cost = 50 if player.money < cost: return error("NO_MONEY") player.money -= cost case.fertility_level = 100 case.state_flags.append("fertilized") # Si plante dessus, boost croissance if case.content and case.content.type == "plant": case.content.growth_rate *= 1.5 return success("CASE_FERTILIZED") ``` ### Messages d'Infos / Alerte | Type | Message | Condition | Priorité | |---|---|---|---:| | Info | "Sol fertilisé." | `state_flags` ajoute `fertilized` | 2 | | Warn | "Fonds insuffisants." | `player.money < cost` | 4 | | Warn | "Case occupée : action indisponible." | `content_type` non compatible | 3 | # Annexes UX/UI ## 0. Direction Artistique & Vue * **Vue** : Isométrique (2.5D). * **Style** : Coloré, vivant, détails foisonnants (Réf: IMG_20260303_170253.jpg). * **Sprites** : 4 directions. * **Interactions** : * **Sélection** : Cliquer sur la base de l'élément (ou son sprite principal) pour le sélectionner. * **Feedback** : Surbrillance (outline blanc/jaune) au survol de la souris. ## 1. Expérience Utilisateur (UX) ### Fertilisation (Action) **Description UX** : Le joueur améliore le sol pour que l'herbe repousse plus vite. **Description UI** : Outil "Sac d'engrais". Clic sur la case. **Emplacement** : Menu Outils -> Case. **Intégration** : Curseur. **Navigation** : Clic. **Événements** : `FERTILIZE_SOIL`. #### Assets - **Musiques** : `ambience_garden_soft.mp3` (léger, discret). - **Sons** : `scatter.mp3`. - **Graphiques** : Particules vertes/brunes. - **Images** : Texture terre riche (plus foncée). - **Animations** : Poussière qui retombe. - **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 |