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

548 lines
15 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Spécifications : 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` sapplique 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)\) dune 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 |