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

621 lines
20 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 : Billeterie
## Définition
Bâtiment d'entrée du zoo. Point d'apparition et de départ des visiteurs.
## Fonctionnalités
- **Entrée/Sortie** : Génère le flux de visiteurs.
- **Vente de tickets** : Génère des revenus par visiteur entrant.
- **Capacité** : Limite le nombre de visiteurs simultanés dans le zoo.
## Niveaux d'Amélioration (7 niveaux)
- **Coût** : Progressif par palier.
- **Effet** : Augmente le prix du ticket et la capacité maximale de visiteurs simultanés.
- **Ratio** : 1 unité couvre 20 visiteurs simultanés max.
# Annexes Techniques
## 1. Données et États
### Modèle de Données (JSON)
```json
{
"id": "uuid",
"type": "ticket_booth",
"level": "integer (1-7)",
"position": { "x": "int", "y": "int" },
"stats": {
"total_entries": "integer",
"daily_revenue": "integer",
"current_queue_length": "integer"
},
"entry_log": [
{ "timestamp": "timestamp", "visitor_count": 5, "revenue": 50 }
],
"iso_x": "integer",
"iso_y": "integer",
"z_index": "integer"
}
```
### Caractéristiques Initiales
| Caractéristique | Valeur Initiale (Niv 1) |
| :--- | :--- |
| Prix Ticket | 10 pièces |
| Capacité Max | 20 visiteurs |
## 7. Progression
### Tableau des Upgrades
| Niveau | Coût (Pièces) | Prix Ticket | Capacité Max | Temps Construction |
| :--- | :--- | :--- | :--- | :--- |
| 1 | 0 (Base) | 10 | 20 | 0s |
| 2 | 200 | 12 | 40 | 0s |
| 3 | 400 | 15 | 70 | 0s |
| 4 | 800 | 18 | 110 | 0s |
| 5 | 1600 | 22 | 160 | 0s |
| 6 | 3200 | 28 | 220 | 0s |
| 7 | 6400 | 35 | 300 | 0s |
## 8. Logique et Interfaces
### Pseudo-code Impacts
```python
def process_entry(zoo):
potential_visitors = calculate_attraction_flow(zoo)
# Gestion de la file d'attente
zoo.billeterie.current_queue_length += potential_visitors
# Traitement des entrées (limité par la vitesse du guichet)
entries_per_tick = get_entry_speed(zoo.billeterie.level)
actual_entries = min(zoo.billeterie.current_queue_length, entries_per_tick)
# Vérification capacité zoo
if zoo.current_visitors + actual_entries > zoo.billeterie.capacity:
actual_entries = zoo.billeterie.capacity - zoo.current_visitors
emit_event("ZOO_FULL")
zoo.billeterie.current_queue_length -= actual_entries
for _ in range(actual_entries):
spawn_visitor()
player.add_coins(zoo.billeterie.ticket_price)
```
### Messages d'Infos / Alerte
| ID | Niveau | Message |
| :--- | :--- | :--- |
| `ZOO_FULL` | Alerte | "Le zoo est complet ! Agrandissez la billeterie." |
| `VIP_BUS` | Info | "Un bus de touristes arrive !" |
| `QUEUE_LONG` | Warning | "La file d'attente est trop longue, des visiteurs partent !" |
# 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)
### Consultation
**Description UX** : Le joueur clique sur la billeterie pour voir ses statistiques et son niveau.
**Description UI** : **Bottom Sheet** ou Panneau Latéral affichant le niveau actuel, la capacité, le prix du ticket et les revenus du jour.
**Emplacement** : Case Billeterie sur la grille du zoo.
**Intégration** : Bâtiment fixe.
**Navigation** : Clic -> Ouverture Panneau -> Fermeture.
**Événements** : `CLICK_BILLETERIE`.
#### Assets
- **Musiques** : Ambiance "Hall de Gare" (brouhaha léger).
- **Sons** : `ui_open.mp3`
- **Graphiques** : Pixel Art, style guichet.
- **Images** : `billeterie_lvl[1-7].png`
- **Vidéos** : Flux vidéo surveillance (fictif, décoratif).
- **Animations** : Légère surbrillance au survol.
- **Couleurs** : Palette UI standard.
- **Textes** : "Billeterie", "Niveau X", "Revenus : Y".
- **Formes** : Carré (case).
### Vue Isométrique
- **File d'attente** : Afficher physiquement les sprites des visiteurs qui attendent devant le guichet.
- **Portiques** : Animation d'ouverture/fermeture des barrières.
## Personnage contextuel (événements & interaction)
Voir `guichetiere.md`.
### Affichage
La guichetière saffiche lorsque :
- la billetterie est **actionnée** (clic panneau, upgrade, consultation stats) ;
- un **événement** dentrée survient (saturation, file longue, arrivée VIP).
### Déclencheurs (exemples)
| Event | Condition | Effet UI personnage |
|---|---|---|
| `CLICK_BILLETERIE` | clic bâtiment | portrait + synthèse (prix, capacité, file) |
| `ZOO_FULL` | capacité atteinte | bulle “Zoo complet” + CTA “Améliorer billetterie” |
| `QUEUE_LONG` | file > seuil | bulle “File longue” + CTA “Voir billetterie” |
| `VIP_BUS` | arrivée VIP | bulle “Bus VIP” + CTA “Voir entrée” |
### Skins & thèmes
Uniforme et guichet suivent `theme.md` ; variantes éventuelles via `inventaire_skins.md`.
## Définition
| Champ | Valeur |
|---|---|
| Concept | Bâtiment “billeterie” : point unique dentrée/sortie des visiteurs et point de monétisation “tickets”. |
| Rôle | Transformer lattractivité (ville → zoo) en entrées contrôlées (capacité/queue) et en revenus (prix ticket), avec signaux visibles (file, portiques, saturation). |
| Portée | Une instance fixe sur la carte zoo, connectée au réseau de chemins, agissant comme spawn/despawn visiteurs. |
| Contrainte | Aucun tracking externe/analytics ; flux et revenus calculés à la volée (lazy update), sans cache/mémorisation ; saturation doit produire message + event (pas silencieux). |
## Fonctions (tableau détaillé)
| Fonction | Déclencheur | Entrées | Sorties | Règles | Observabilité |
|---|---|---|---|---|---|
| Ouvrir panneau billeterie | clic bâtiment | `ticket_booth_id` | UI stats | montre prix/capacité/queue/revenus jour | Event `CLICK_BILLETERIE` |
| Calculer demandes dentrée | tick logique | attractivité, villes, saison | `potential_visitors` | dépend distance ville + attractivité zoo | Event `VISITOR_DEMAND_COMPUTED` |
| Alimenter file | tick logique | `potential_visitors` | `current_queue_length` | clamp ≥ 0 | Event `QUEUE_UPDATED` |
| Convertir file en entrées | tick logique | level, queue | `actual_entries` | limité par vitesse guichet et capacité zoo | Event `VISITOR_ENTERED` |
| Encaisser ticket | entrée | ticket_price | coins + | atomicité par visiteur entré | Event `TICKET_SOLD` |
| Bloquer si zoo complet | capacité atteinte | `current_visitors` | entrée 0 | déclenche alerte + évaporation file (visiteurs partent) | Event `ZOO_FULL` |
| Gérer bus VIP | event | multiplicateur | pic entrées | bus si condition (réputation/ville riche) | Event `VIP_BUS` |
| Mesurer impatience | queue longue | temps attente | départs | si attente > seuil, départs + malus réputation léger | Event `QUEUE_LONG` |
## Icone de base
| Élément | Spécification |
|---|---|
| Représentation | Guichet + ticket + portique |
| Couleur dominante | Bleu/rouge (signalétique), or (coins) |
| Variantes | `billeterie_lvl_{1..7}_dir_{N,E,S,W}.png`, `icon_ticket_booth.png` |
| États | `open`, `busy` (queue), `full` (zoo complet), `vip_bus` (arrivée) |
## Interactions (tableau détaillé)
| Interaction | Type | Préconditions | Étapes UI | Résultat | Erreurs / Messages |
|---|---|---|---|---|---|
| Consulter stats | Consultation | - | clic billeterie | panneau stats | - |
| Upgrader | Action | coins ok | panneau → “Améliorer” | level +1 | `NOT_ENOUGH_COINS` |
| Voir file | Consultation | file > 0 | survol bâtiment | tooltip “X en attente” | - |
| Aller à la saturation | Navigation | `ZOO_FULL` | clic notif | focus billeterie | - |
| Forcer fermeture | Action (option future) | mode maintenance | toggle | entrées stoppées | `MAINTENANCE_REQUIRED` |
## Annexes Techniques
### 1. Données et États (tableau détaillé)
| Donnée / État | Type | Exemple | Source | Contraintes |
|---|---|---|---|---|
| `id` | uuid_v4 | `uuid_v4` | DB | - |
| `type` | string | `ticket_booth` | DB | constant |
| `level` | int | 3 | DB | 1..7 |
| `position.x` | int | 1 | DB | grid |
| `position.y` | int | 1 | DB | grid |
| `stats.total_entries` | int | 1280 | DB | cumul |
| `stats.daily_revenue` | int | 420 | DB | reset journalier in-game |
| `stats.current_queue_length` | int | 18 | DB/calcul | clamp ≥ 0 |
| `entry_log[].timestamp` | timestamp | - | DB | UTC |
| `entry_log[].visitor_count` | int | 5 | DB | batch |
| `entry_log[].revenue` | int | 50 | DB | batch |
| `iso_x` | int | 120 | DB/calcul | rendu |
| `iso_y` | int | 88 | DB/calcul | rendu |
| `z_index` | int | 12088 | calcul | profondeur |
#### Caractéristiques Initiales (tableau détaillé)
| Caractéristique | Valeur initiale | Unité | Notes |
|---|---:|---|---|
| Prix ticket (lvl1) | 10 | coins | base |
| Capacité max (lvl1) | 20 | visiteurs | base |
| Vitesse guichet (lvl1) | 2 | visiteurs/tick | file |
| Seuil queue longue | 25 | visiteurs | message + départs |
#### Scores Initiaux (tableau détaillé)
| Score | Valeur initiale | Plage | Impact |
|---|---:|---|---|
| Satisfaction dentrée | 50 | 0..100 | queue longue la baisse |
| Taux départ file | 0% | 0..100% | impatience |
### 2. Cycles de Vie et Apparition (tableau détaillé)
| Phase | Déclencheur | Entrées | Sorties | Invariants |
|---|---|---|---|---|
| Apparition | création zoo | - | bâtiment présent | fixe |
| Fonctionnement | zoo ouvert | attractivité | entrées | capacité respectée |
| Saturation | zoo plein | - | entrées stoppées | alerte obligatoire |
| Upgrade | action joueur | coins | level ↑ | monotone |
#### Conditions d'Apparition (tableau détaillé)
| Condition | Seuil | Opérateur | Résultat |
|---|---:|---|---|
| Zoo créé | true | est | billeterie placée |
#### Conditions de Disparition (tableau détaillé)
| Condition | Seuil | Opérateur | Résultat |
|---|---:|---|---|
| - | - | - | bâtiment persistant |
#### Hérédité (tableau détaillé)
| Élément | Hérité | Règle |
|---|---|---|
| Niveau | Oui | persiste |
| Statistiques | Oui | logs conservés, pas danalytics |
### 3. Impacts Environnementaux
#### Impact Température (tableau détaillé)
| Condition | Effet billeterie | Notes |
|---|---|---|
| Canicule | flux -10% | visiteurs évitent attente au soleil |
| Froid extrême | flux -15% | sortie plus rapide |
#### Impact Milieu (Biome) (tableau détaillé)
| Biome | Effet | Notes |
|---|---|---|
| Proche océan (frais) | impatience - | queue tolérée |
| Boue autour entrée | impatience + | pénalise |
#### Impact Saisons (tableau détaillé)
| Saison | Effet | Notes |
|---|---|---|
| Été | demande +20% | vacances |
| Hiver | demande -30% | froid |
#### Impact Heure / Jour-Nuit (tableau détaillé)
| Période | Effet | Notes |
|---|---|---|
| Matin | pics dentrée | 9h-12h |
| Soir | pics de sortie | 17h-19h |
### 4. Impacts Biologiques et Sociaux
#### Impact Reproduction (tableau détaillé)
| Facteur | Effet sur taux | Condition |
|---|---|---|
| Bébés visibles | satisfaction entrée +5 | marketing “naissances” |
#### Impact Mort (tableau détaillé)
| Cas | Effet | Condition |
|---|---|---|
| Incident visible à lentrée | flux -40% | pendant 1 jour in-game |
#### Impact Nourriture (tableau détaillé)
| Ressource | Effet | Condition |
|---|---|---|
| Stand boisson proche | impatience - | file longue |
#### Impact Attractivité(Visiteurs (tableau détaillé)
| Action/État | Gain | Rayon | Notes |
|---|---:|---:|---|
| Entrée fluide | +5 | 8 cases | file courte |
| File longue | -10 | 8 cases | visiteurs partent |
#### Impact Attractivité Animaux) (tableau détaillé)
| Action/État | Effet animaux | Condition |
|---|---|---|
| Foule bruyante | stress + | enclos proche entrée |
#### Impact Valeur (tableau détaillé)
| Facteur | Variation | Condition |
|---|---:|---|
| Upgrade billeterie | + | valeur zoo | capacité |
### 5. Impacts Logistiques et Économiques
#### Vitesse (Camion) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| Bus VIP | entrées batch | event `VIP_BUS` |
#### Vitesse (Nurserie) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| Naissances annoncées | demande + | saison |
#### Vitesse (Accueil) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| Nouveaux animaux placés près entrée | intérêt + | visiteurs |
#### Vitesse (Recherche) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| Marketing recherche | demande + | upgrade futur |
#### Vitesse (Labo) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| Offre rare | pics | annonce |
#### Vitesse (Visite) (tableau détaillé)
| Paramètre | Effet | Condition |
|---|---|---|
| Portiques auto | entrées/tick + | level élevé |
#### Dépenses (Billeterie) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Impression tickets | 100 | $/semaine | lore |
| Maintenance portiques | 20 | coins/semaine | level ≥ 3 |
#### Dépenses (Boutiques) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Signalétique | 10 | coins/semaine | esthétique |
#### Dépenses (Visiteurs) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Perte opportunité | ticket non vendu | coins | queue trop longue |
#### Dépenses (Employés) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Agent accueil | 1500 | $/mois | lore |
#### 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 |
|---|---:|---|---|
| Vitrine bébés | 50 | coins/semaine | option |
#### Dépenses (Nourriture) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Eau file dattente | 5 | coins/jour | été |
#### Dépenses (Acceuil des animaux) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Signal “nouvel animal” | 5 | coins | panneau |
#### Dépenses (Camion) (tableau détaillé)
| Poste | Coût | Unité | Condition |
|---|---:|---|---|
| Bus touristes | 25 | coins/event | `VIP_BUS` |
#### Trajet Visiteurs
##### Trajet Visiteurs vers/depuis la ville (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| Ville | Billeterie | demande calculée | spawn file |
##### Trajet Visiteurs vers/depuis les animaux (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| Billeterie | Enclos | plan visite | route via chemins |
##### Trajet Visiteurs vers/depuis les boutiques (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| Enclos | Boutique | faim/soif | détour |
##### Trajet Visiteurs vers/depuis la billeterie (entrées/sorties du zoo) (tableau détaillé)
| Source | Destination | Déclencheur | Effet |
|---|---|---|---|
| Zoo | Billeterie | fin visite | sortie |
### 6. Événements
#### Événements du Jeu (tableau détaillé)
| Event | Déclencheur | Payload | Effet |
|---|---|---|---|
| `TICKET_SOLD` | entrée | price | coins + |
| `ZOO_FULL` | capacité | current/max | stop entrées |
| `QUEUE_LONG` | queue > seuil | length | départs + |
| `VIP_BUS` | event | count | entrées batch |
#### Événements du Carte (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `FOCUS_TICKET_BOOTH` | clic notif | caméra |
#### Événements du Zoo (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `VISITOR_SPAWNED_AT_ENTRY` | entrée | spawn point |
#### Événements du Ville / Visiteur (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `CITY_FLOW_DISPATCHED` | calcul | demande |
#### Événements du Visiteur (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `VISITOR_LEAVES_QUEUE` | impatience | départ |
#### Événements du Joueur (tableau détaillé)
| Event | Déclencheur | Effet |
|---|---|---|
| `PLAYER_UPGRADES_TICKET_BOOTH` | UI | stats maj |
### 7. Progression
#### Tableau des Upgrades (tableau détaillé)
| Niveau | Coût | Effet | Débloque |
|---|---:|---|---|
| 3 | 400 | portiques visibles + vitesse guichet | anim porte |
| 5 | 1600 | file plus courte (vitesse) | satisfaction + |
| 7 | 6400 | capacité 300 + prix 35 | “grand hall” |
### 8. Logique et Interfaces
#### Pseudo-code Impacts (tableau détaillé)
| Fonction | Entrées | Sorties | Notes |
|---|---|---|---|
| `getEntrySpeed` | level | int | visiteurs/tick |
| `computePotentialVisitors` | zoo, villes, saison | int | à la volée |
| `processEntry` | zoo, booth | int | encaisse + spawn |
#### Messages d'Infos / Alerte (tableau détaillé)
| ID | Niveau | Message | Condition |
|---|---|---|---|
| `ZOO_FULL` | Alerte | "Le zoo est complet." | capacité atteinte |
| `QUEUE_LONG` | Warning | "La file d'attente est trop longue." | queue > seuil |
| `VIP_BUS` | Info | "Un bus de touristes arrive." | event |
## Annexes UX/UI
### 1. Expérience Utilisateur (UX)
#### Description UX (tableau détaillé)
| Parcours | But | Friction | Réduction clics |
|---|---|---|---|
| Voir revenus | décider upgrade | stats dispersées | panneau unique billeterie |
| Réagir à saturation | éviter pertes | notif | clic notif → focus |
#### Description UI (tableau détaillé)
| Composant | Contenu | États |
|---|---|---|
| Panneau billeterie | prix/capacité/revenus | normal/full |
| File visuelle | sprites visiteurs | courte/longue |
| Badge bus VIP | icône bus | visible |
#### Emplacement (tableau détaillé)
| Zone UI | Position | Notes |
|---|---|---|
| Carte zoo | entrée | file visible |
| HUD | compteur coins | feedback pièces |
#### Intégration (tableau détaillé)
| Intégration | Contrat | Notes |
|---|---|---|
| `visiteur.md` | spawn/despawn | flux |
| `ville.md` | demande | distance |
#### Navigation (tableau détaillé)
| Action | Chemin | Résultat |
|---|---|---|
| Ouvrir stats | clic bâtiment | panneau |
| Upgrader | panneau → bouton | level ↑ |
| Focus | clic notif | caméra |
#### Événements (tableau détaillé)
| Event UI | Déclencheur | Effet |
|---|---|---|
| `CLICK_BILLETERIE` | clic | ouvre |
| `CLICK_UPGRADE_TICKET_BOOTH` | bouton | upgrade |
#### Assets Skinables
##### Musiques (tableau détaillé)
| Asset | Usage | Durée | Notes |
|---|---|---:|---|
| `ticket_booth_crowd_loop.mp3` | proximité entrée | loop | discret |
##### Sons (tableau détaillé)
| Asset | Usage | Volume |
|---|---|---|
| `gate_open.mp3` | portiques | bas |
| `coin_jingle.mp3` | ticket vendu | bas |
| `ui_denied.mp3` | zoo plein | moyen |
##### Graphiques (tableau détaillé)
| Asset | Usage | Contraintes |
|---|---|---|
| `ticket_booth_ui_panel.png` | panneau | scalable |
| `queue_indicator.png` | badge | lisible |
| `vip_bus_icon.png` | bus | contraste |
##### Images (tableau détaillé)
| Asset | Usage |
|---|---|
| `billeterie_lvl1.png` | bâtiment |
| `billeterie_lvl7.png` | bâtiment |
##### Vidéos (tableau détaillé)
| Asset | Usage | Durée |
|---|---|---:|
| `ticket_gate_cycle.webm` | portiques | 1.0s |
##### Animations (tableau détaillé)
| Animation | Déclencheur | Notes |
|---|---|---|
| pièces qui volent | ticket vendu | 0.6s |
| bounce badge | queue longue | 0.4s |
##### Couleurs (tableau détaillé)
| Token | Valeur | Usage |
|---|---|---|
| `ticket_blue` | #1976D2 | signalétique |
| `ticket_gold` | #D4AF37 | revenus |
| `ticket_alert_red` | #D32F2F | saturation |
##### Textes (tableau détaillé)
| Clé | FR | EN |
|---|---|---|
| `ticket_booth.title` | Billeterie | Ticket booth |
| `ticket_booth.capacity` | Capacité | Capacity |
| `ticket_booth.queue_long` | File trop longue. | Queue too long. |
##### Formes (tableau détaillé)
| Élément | Forme | Notes |
|---|---|---|
| Panneau | rectangle arrondi | lisible |
| Badge | rond | constant |