Enrichissement exhaustif des specs : Vue Isométrique et Design
**Motivations:** - Aligner toute la documentation technique avec la nouvelle direction artistique isométrique (Réf IMG_20260303_170253). - Faciliter l'implémentation en ajoutant les contraintes techniques liées à la 2.5D (Z-index, Sprites 4 directions). **Root causes:** - Besoin de cohérence visuelle et technique sur l'ensemble du projet. **Correctifs:** - N/A **Evolutions:** - Ajout systématique de la section "Direction Artistique & Vue" dans `Annexes UX/UI` de tous les fichiers. - Enrichissement des modèles JSON avec coordonnées isométriques (`iso_x`, `iso_y`, `z_index`). - Précision des interactions (clic, survol) adaptées à la grille losange. - Conservation stricte de la structure existante (aucun titre supprimé). **Pages affectées:** - docs/specs/*
This commit is contained in:
@@ -1,11 +1,12 @@
|
||||
# Spécifications : Accueil des Animaux
|
||||
|
||||
## Définition
|
||||
Zone tampon pour les nouveaux animaux arrivant dans le zoo (achats adultes ou transferts).
|
||||
Zone tampon pour les nouveaux animaux arrivant dans le zoo (achats adultes ou transferts). C'est le point d'entrée unique pour tout animal avant son placement en enclos.
|
||||
|
||||
## Fonctionnalités
|
||||
- **Acclimatation** : Période obligatoire avant de pouvoir placer l'animal sur la grille active.
|
||||
- **Stockage temporaire** : Évite de devoir placer immédiatement un animal acheté si le terrain n'est pas prêt.
|
||||
- **Inspection** : Permet au joueur de voir les stats de l'animal avant placement.
|
||||
|
||||
## Niveaux d'Amélioration (7 niveaux)
|
||||
- **Coût** : Progressif par palier.
|
||||
@@ -19,58 +20,74 @@ Zone tampon pour les nouveaux animaux arrivant dans le zoo (achats adultes ou tr
|
||||
```json
|
||||
{
|
||||
"id": "uuid",
|
||||
"type": "animal_reception",
|
||||
"type": "building_reception",
|
||||
"created_at": "timestamp",
|
||||
"updated_at": "timestamp",
|
||||
"level": "integer (1-7)",
|
||||
"position": { "x": "integer", "y": "integer" },
|
||||
"slots": [
|
||||
{ "animal_id": "uuid", "arrival_time": "timestamp", "ready_time": "timestamp" }
|
||||
]
|
||||
{
|
||||
"slot_id": "integer (0-index)",
|
||||
"animal_id": "uuid (nullable)",
|
||||
"status": "enum (EMPTY, OCCUPIED, READY)",
|
||||
"arrival_time": "timestamp",
|
||||
"acclimatization_end_time": "timestamp",
|
||||
"bonus_applied": "boolean"
|
||||
}
|
||||
],
|
||||
"iso_x": "integer",
|
||||
"iso_y": "integer",
|
||||
"z_index": "integer"
|
||||
}
|
||||
```
|
||||
|
||||
### Caractéristiques Initiales
|
||||
| Caractéristique | Valeur Initiale (Niv 1) |
|
||||
| :--- | :--- |
|
||||
| Temps Acclimatation | 10 minutes |
|
||||
| Capacité | 1 animal |
|
||||
| Caractéristique | Valeur Initiale (Niv 1) | Valeur Max (Niv 7) |
|
||||
| :--- | :--- | :--- |
|
||||
| Temps Acclimatation | 600 secondes (10 min) | 0 secondes (Instantané) |
|
||||
| Capacité | 1 animal | 7 animaux |
|
||||
|
||||
### Scores Initiaux
|
||||
N/A
|
||||
|
||||
## 2. Cycles de Vie et Apparition
|
||||
### Conditions d'Apparition
|
||||
Présent au démarrage.
|
||||
Présent au démarrage du jeu (Tutorial ou Nouvelle Partie). Position fixe généralement près de l'entrée.
|
||||
|
||||
### Conditions de Disparition
|
||||
Indestructible.
|
||||
Indestructible. Ne peut pas être vendu ni déplacé (sauf si feature de réaménagement global).
|
||||
|
||||
### Hérédité
|
||||
N/A
|
||||
|
||||
## 3. Impacts Environnementaux
|
||||
### Impact Température
|
||||
Zone neutre (T° idéale simulée).
|
||||
Zone neutre (T° idéale simulée). Les animaux ne subissent pas de dégâts de température ici.
|
||||
|
||||
### Impact Milieu (Biome)
|
||||
Zone neutre.
|
||||
Zone neutre. Compatible avec tous les biomes d'animaux.
|
||||
|
||||
### Impact Saisons
|
||||
Protégé.
|
||||
Protégé des intempéries.
|
||||
|
||||
### Impact Heure / Jour-Nuit
|
||||
N/A
|
||||
Fonctionne 24/7. Pas de pénalité la nuit.
|
||||
|
||||
## 4. Impacts Biologiques et Sociaux
|
||||
### Impact Reproduction
|
||||
**Bonus Repro** : Un animal passant par un accueil de haut niveau gagne un bonus temporaire de fertilité (+10% à +50%).
|
||||
**Bonus Repro** : Un animal passant par un accueil de haut niveau gagne un bonus temporaire de fertilité.
|
||||
- Niv 1-3 : +0%
|
||||
- Niv 4-6 : +10% fertilité (durée 2 jours in-game)
|
||||
- Niv 7 : +25% fertilité (durée 5 jours in-game)
|
||||
|
||||
### Impact Mort
|
||||
Pas de mort possible en zone d'accueil (Stase).
|
||||
Pas de mort possible en zone d'accueil (Stase). Les jauges de faim/soif/santé sont gelées.
|
||||
|
||||
### Impact Nourriture
|
||||
Nourri automatiquement.
|
||||
Nourri automatiquement (coût nul ou inclus dans les frais de gestion globaux).
|
||||
|
||||
### Impact Attractivité (Visiteurs/Animaux)
|
||||
N/A
|
||||
N/A - Les visiteurs ne voient pas l'intérieur de l'accueil.
|
||||
|
||||
### Impact Valeur
|
||||
N/A
|
||||
@@ -78,56 +95,91 @@ N/A
|
||||
## 5. Impacts Logistiques et Économiques
|
||||
### Vitesse (Camion/Nurserie/Accueil/Recherche/Labo/Visite)
|
||||
**Réduction Temps Acclimatation** :
|
||||
| Niveau | Temps Base |
|
||||
| :--- | :--- |
|
||||
| 1 | 10 min |
|
||||
| 2 | 8 min |
|
||||
| 3 | 6 min |
|
||||
| 4 | 4 min |
|
||||
| 5 | 2 min |
|
||||
| 6 | 1 min |
|
||||
| 7 | Instantané |
|
||||
| Niveau | Temps Base | Réduction % |
|
||||
| :--- | :--- | :--- |
|
||||
| 1 | 10 min | 0% |
|
||||
| 2 | 8 min | 20% |
|
||||
| 3 | 6 min | 40% |
|
||||
| 4 | 4 min | 60% |
|
||||
| 5 | 2 min | 80% |
|
||||
| 6 | 1 min | 90% |
|
||||
| 7 | Instantané | 100% |
|
||||
|
||||
### Dépenses (Boutiques/Visiteurs)
|
||||
N/A
|
||||
|
||||
### Trajet Visiteurs
|
||||
N/A
|
||||
N/A - Bâtiment administratif.
|
||||
|
||||
## 6. Événements
|
||||
### Événements du Jeu / Carte / Zoo / Ville / Visiteur
|
||||
* **Arrivée** : Animal livré par camion.
|
||||
* **Prêt** : Animal prêt à être placé.
|
||||
* **Arrivée (`ANIMAL_ARRIVAL`)** : Animal livré par camion, entre dans un slot libre.
|
||||
* **Prêt (`ANIMAL_READY`)** : Le temps d'acclimatation est écoulé.
|
||||
* **Placement (`ANIMAL_PLACED`)** : Le joueur sort l'animal de l'accueil vers un enclos.
|
||||
|
||||
## 7. Progression
|
||||
### Tableau des Upgrades
|
||||
| Niveau | Coût (Pièces) | Capacité | Temps Acclimatation | Temps Construction |
|
||||
| :--- | :--- | :--- | :--- | :--- |
|
||||
| 1 | 100 | 1 | 10 min | 0s |
|
||||
| 2 | 200 | 2 | 8 min | 0s |
|
||||
| 3 | 400 | 3 | 6 min | 0s |
|
||||
| 4 | 800 | 4 | 4 min | 0s |
|
||||
| 5 | 1600 | 5 | 2 min | 0s |
|
||||
| 6 | 3200 | 6 | 1 min | 0s |
|
||||
| 7 | 6400 | 7 | 0 min | 0s |
|
||||
| 2 | 200 | 2 | 8 min | 10s |
|
||||
| 3 | 400 | 3 | 6 min | 30s |
|
||||
| 4 | 800 | 4 | 4 min | 1m |
|
||||
| 5 | 1600 | 5 | 2 min | 2m |
|
||||
| 6 | 3200 | 6 | 1 min | 5m |
|
||||
| 7 | 6400 | 7 | 0 min | 10m |
|
||||
|
||||
## 8. Logique et Interfaces
|
||||
### Pseudo-code Impacts
|
||||
```
|
||||
function updateReception(center):
|
||||
for slot in center.slots:
|
||||
if currentTime >= slot.ready_time:
|
||||
notifyPlayer("ANIMAL_READY", slot.animal_id)
|
||||
```python
|
||||
def update_reception(reception_center, current_time):
|
||||
# Vérification de l'intégrité
|
||||
if not reception_center or not reception_center.slots:
|
||||
return error("Invalid reception center")
|
||||
|
||||
for slot in reception_center.slots:
|
||||
if slot.status == "OCCUPIED":
|
||||
# Vérifier si le temps est écoulé
|
||||
if current_time >= slot.acclimatization_end_time:
|
||||
slot.status = "READY"
|
||||
trigger_event("ANIMAL_READY", {"animal_id": slot.animal_id})
|
||||
|
||||
def add_animal_to_reception(reception_center, animal):
|
||||
# Trouver un slot vide
|
||||
empty_slot = find_first_empty_slot(reception_center.slots)
|
||||
|
||||
if not empty_slot:
|
||||
return error("RECEPTION_FULL")
|
||||
|
||||
# Calcul du temps selon le niveau
|
||||
duration = get_acclimatization_duration(reception_center.level)
|
||||
|
||||
empty_slot.animal_id = animal.id
|
||||
empty_slot.arrival_time = now()
|
||||
empty_slot.acclimatization_end_time = now() + duration
|
||||
empty_slot.status = "OCCUPIED"
|
||||
|
||||
return success()
|
||||
```
|
||||
|
||||
### Messages d'Infos / Alerte
|
||||
| ID | Niveau | Message |
|
||||
| :--- | :--- | :--- |
|
||||
| `ANIMAL_READY` | Info | "Un nouvel animal est prêt à rejoindre le zoo !" |
|
||||
| `RECEPTION_FULL` | Warning | "Accueil saturé, impossible d'acheter." |
|
||||
| ID | Niveau | Message | Condition |
|
||||
| :--- | :--- | :--- | :--- |
|
||||
| `ANIMAL_READY` | Info | "Un nouvel animal est prêt à rejoindre le zoo !" | `slot.status` passe à `READY` |
|
||||
| `RECEPTION_FULL` | Warning | "Accueil saturé, impossible d'acheter." | Tentative d'achat sans slot libre |
|
||||
| `PLACEMENT_ERROR` | Error | "Impossible de placer ici (Enclos plein / Biome incompatible)." | Drag & Drop invalide |
|
||||
|
||||
# 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)
|
||||
### Arrivée Animal (Passif)
|
||||
**Description UX** : Le camion décharge un animal. Il apparaît dans l'Accueil en mode "Attente".
|
||||
@@ -187,3 +239,9 @@ function updateReception(center):
|
||||
- **Couleurs** : N/A
|
||||
- **Textes** : N/A
|
||||
- **Formes** : N/A
|
||||
|
||||
### Vue Isométrique
|
||||
- **Sprite Bâtiment** : 4 directions (Nord, Sud, Est, Ouest) pour s'aligner avec la route.
|
||||
- **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.
|
||||
|
||||
Reference in New Issue
Block a user