Files
builazoo/docs/features/incidents-visiteurs-phase4.md
Nicolas Cantu e031c9a1d2 Initial commit
**Motivations:**
- Initialisation du versionning git pour le projet

**Root causes:**
- N/A (Nouveau projet)

**Correctifs:**
- N/A

**Evolutions:**
- Structure initiale du projet
- Ajout du .gitignore

**Pages affectées:**
- Tous les fichiers
2026-03-03 22:24:17 +01:00

35 lines
2.6 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.
# Incidents visiteurs (§4.2)
**Objectif :** Visiteurs peuvent rencontrer des incidents (soif, poubelle pleine, banc requis, animal trop loin, envie de photo). Apparition plus fréquente en phase dattente. Bulle au-dessus du visiteur ; clic = résolution (bonus pièces + attractivité) ; non résolu = timeout puis départ du visiteur et pénalité dattractivité.
**Référence :** Cahier des charges §2 (Visiteurs et Incidents).
## Impacts
- **State :** `VisitorEntry` étendu avec `incidentType?` ("thirst"|"bin"|"bench"|"animalFar"|"photo"), `incidentSince?`. `attractivityBonusFromIncidents?` (cumul résolus non résolus).
- **Phase dattente :** camion en cours (`eggPurchaseTruck`, `truckSale`) ou vente en attente de validation (`asBuyerUndelivered` avec `validated_at` dans le futur).
- **Résolution :** clic sur la bulle → suppression de lincident, ajout de pièces et bonus dattractivité.
- **Timeout :** après `IncidentTimeoutSeconds` sans résolution, le visiteur est retiré et une pénalité dattractivité est appliquée.
## Modifications
- **types.js** : `VisitorEntry` avec `incidentType?`, `incidentSince?` ; `GameState.attractivityBonusFromIncidents?`.
- **config.js** : `Visitor.IncidentChanceBase`, `IncidentChanceWaitMultiplier`, `IncidentTimeoutSeconds`, `IncidentResolveAttractivityBonus`, `IncidentResolveCoinBonus`, `IncidentUnresolvedAttractivityPenalty`.
- **visitor-incidents.js** (nouveau) : `isInWaitPhase(state)`, `tickVisitorIncidents(state, nowUnix)`, `resolveIncident(state, visitorIndex)`, `INCIDENT_TYPES`, `INCIDENT_EMOJI`.
- **game-loop.js** : appel à `tickVisitorIncidents` après `tickVisitorArrivals`.
- **income.js** : `getAttractivityScore` inclut `state.attractivityBonusFromIncidents`.
- **state.js** : au chargement, défaut `attractivityBonusFromIncidents = 0`.
- **main.js** : boucle visiteurs basée sur `state.visitorArrivals.length` ; pour chaque visiteur avec incident, affichage dune bulle (emoji + tooltip) ; clic appelle `resolveIncident` puis `fullRender`.
- **texts-fr.js** : `incidentLabel` (soif, poubelle pleine, etc.), `incidentBubbleAria`.
- **main.css** : `.visitor-incident-bubble` (position au-dessus du sprite, cliquable).
## Modalités de déploiement
- Client uniquement. Rechargement suffit.
## Modalités danalyse
- Avoir des visiteurs (billeterie) et attendre ou déclencher une phase dattente (achat œuf, vente en cours) : des bulles dincident apparaissent au-dessus de certains visiteurs.
- Clic sur une bulle : incident disparaît, pièces et attractivité augmentent.
- Ne pas cliquer : après le délai configuré, le visiteur disparaît et lattractivité baisse.