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

2.6 KiB
Raw Permalink Blame History

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.