**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
35 lines
2.6 KiB
Markdown
35 lines
2.6 KiB
Markdown
# 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 d’attente. Bulle au-dessus du visiteur ; clic = résolution (bonus pièces + attractivité) ; non résolu = timeout puis départ du visiteur et pénalité d’attractivité.
|
||
|
||
**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 d’attente :** 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 l’incident, ajout de pièces et bonus d’attractivité.
|
||
- **Timeout :** après `IncidentTimeoutSeconds` sans résolution, le visiteur est retiré et une pénalité d’attractivité 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 d’une 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 d’analyse
|
||
|
||
- Avoir des visiteurs (billeterie) et attendre ou déclencher une phase d’attente (achat œuf, vente en cours) : des bulles d’incident 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 l’attractivité baisse.
|