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
This commit is contained in:
34
docs/features/incidents-visiteurs-phase4.md
Normal file
34
docs/features/incidents-visiteurs-phase4.md
Normal file
@@ -0,0 +1,34 @@
|
||||
# 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.
|
||||
Reference in New Issue
Block a user