# Spécifications : Animal (Générique)

## Définition
Entité biologique principale du jeu.

## Propriétés
- **Type/Espèce** : Défini par le loot (75 animaux possibles).
- **Affichage** : Apparaît "en petit" dans l'enclos fusionné.
- **Génétique** :
  - **Couleur** : 15 variations.
  - **Rareté** : 5 niveaux (pondération Fibonacci).
  - **Traits** : Caractéristiques spéciales (ex: "Gourmand", "Agile").
- **État** : Faim, Température, Santé, Âge, Stress.
- **Cycle de vie** : Œuf -> Bébé -> Adulte -> Mort.

## Besoins
- **Nourriture** : Consommation périodique.
- **Environnement** : Adéquation Biome/Température.
- **Social** : Besoin de congénères (reproduction) ou de solitude (selon espèce).
- **Enrichissement** : Besoin d'un objet spécial dans l'enclos (ex: Arbre à singe).

# Annexes Techniques

## 1. Données et États
### Modèle de Données (JSON)
```json
{
  "id": "uuid_v4",
  "type": "string (ex: 'rabbit')",
  "rarity": "integer (1-5)",
  "color_id": "integer (0-14)",
  "name": "string",
  "birth_date": "timestamp",
  "state": {
    "health": "float (0-100)",
    "hunger": "float (0-100)",
    "temperature_comfort": "float (-1.0 to 1.0)",
    "stress": "float (0-100)",
    "energy": "float (0-100)"
  },
  "genetics": {
    "parent_a_id": "uuid_v4 | null",
    "parent_b_id": "uuid_v4 | null",
    "mutation_factor": "float",
    "traits": ["glutton", "nocturnal"]
  },
  "position": { "x": "float", "y": "float", "z": "float" },
  "orientation": "enum (N, S, E, W)",
  "iso_x": "integer",
  "iso_y": "integer",
  "z_index": "integer"
}
```

### Caractéristiques Initiales
| Caractéristique | Valeur Initiale |
| :--- | :--- |
| Santé | 100.0 |
| Faim | 0.0 (Rassasié) |
| Stress | 0.0 |
| Âge | 0 (Bébé) |

## 2. Cycles de Vie et Apparition
### Conditions d'Apparition
| Type | Condition |
| :--- | :--- |
| Œuf | Achat Carte Monde / Loot Labo |
| Bébé | Éclosion Œuf / Naissance (Reproduction) |
| Adulte | Fin croissance Bébé / Achat Carte Monde |

### Conditions de Disparition
| Cause | Seuil |
| :--- | :--- |
| Mort (Faim) | Faim >= 100 pendant 24h (in-game) |
| Mort (Santé) | Santé <= 0 |
| Vente | Transaction validée |
| Libération | Action joueur |

## 3. Impacts Environnementaux
### Impact Température
| Delta T° (Idéal - Réel) | Effet sur Santé / Heure | Effet sur Stress / Heure |
| :--- | :--- | :--- |
| +/- 0 (Idéal) | 0 | -5 |
| +/- 1 (Supportable) | -1 | +2 |
| +/- 2 (Inconfort) | -5 | +10 |
| +/- 3 (Danger) | -20 | +25 |
| > +/- 3 (Mortel) | -50 | +50 |

### Impact Milieu (Biome)
| Compatibilité | Effet sur Santé / Heure | Effet sur Stress / Heure |
| :--- | :--- | :--- |
| Parfaite (Même couleur) | +1 (Régénération) | -5 |
| Adjacente (Cercle chromatique) | 0 | 0 |
| Opposée | -5 | +10 |

## 8. Logique et Interfaces
### Pseudo-code Impacts
```javascript
function updateAnimal(animal, context):
  # Gestion Température
  deltaTemp = abs(animal.idealTemp - context.tileTemp)
  if deltaTemp > 0:
    animal.health -= tableImpactTemp[deltaTemp]
    animal.stress += tableImpactTemp[deltaTemp] * 0.5
  
  # Gestion Biome
  if context.tileBiome != animal.idealBiome:
    animal.stress += 5
    
  # Gestion Faim
  if animal.hunger < 100:
    animal.hunger += baseHungerRate * context.seasonMod
  else:
    animal.health -= 10 # Famine
    
  # Gestion Reproduction
  if canReproduce(animal):
     mate = findMate(animal)
     if mate:
        startReproduction(animal, mate)
```

### Messages d'Infos / Alerte
| ID | Niveau | Message |
| :--- | :--- | :--- |
| `ANIMAL_HUNGRY` | Warning | "Un animal a faim !" |
| `ANIMAL_SICK` | Alerte | "Un animal est malade." |
| `ANIMAL_DEAD` | Critique | "Un animal est mort." |
| `ANIMAL_BORN` | Info | "Un bébé est né !" |

# 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)
### Vie Quotidienne (Passif)
**Description UX** : L'animal vit sa vie sur la grille. Il bouge, mange, dort.
**Description UI** : Sprite animé. Si problème (faim/froid), feedback visuel immédiat (changement couleur/tremblement).
**Emplacement** : Case Zoo.
**Intégration** : Grille principale.
**Navigation** : Clic Animal (Focus).
**Événements** : `ANIMAL_IDLE`, `ANIMAL_MOVE`.

#### Assets
- **Musiques** : Ambiance nature (oiseaux, vent).
- **Sons** : Cris d'animaux aléatoires (faible volume).
- **Graphiques** : Sprites Pixel Art (4 directions).
- **Images** : Portraits HD pour les dialogues.
- **Vidéos** : Mini-cinématique d'introduction de l'espèce (découverte).
- **Animations** : Idle, Walk, Eat, Sleep.
- **Couleurs** : Selon espèce + Teinte bleue (Froid) / Rouge (Chaud).
- **Textes** : Bulle "Zzz" (Sommeil), "!" (Alerte).
- **Formes** : Ombre portée ovale sous l'animal.

### Vue Isométrique
- **Sprites** : 4 directions (N, S, E, W) minimum. Idéalement 8 pour fluidité.
- **Occlusion** : L'animal doit être caché par les murs sud/est de son enclos, mais visible par-dessus les murs nord/ouest.
- **Comportement** : L'animal ne doit jamais traverser les murs (collision box stricte).
