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:
2026-03-03 22:24:17 +01:00
commit e031c9a1d2
155 changed files with 22334 additions and 0 deletions

View 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 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.