548 lines
15 KiB
Markdown
548 lines
15 KiB
Markdown
# 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 |
|