Chessistics/PLAN_juice.md
Samuel Bouchet 450c069854 Juice pass: procedural SFX, particles, polished visuals
Sound (SfxManager.cs):
- Procedural audio synthesis via AudioStreamWav — no external files
- Distinct tones for place, produce, transfer, deliver, move, destroy, victory
- Simple ADSR envelope, sine/triangle waveforms, filtered noise for swooshes

Pieces (PieceView.cs):
- Warm earthy palette: sage green, deep teal, dusty rose, burnt sienna
- Drop shadow under each piece for depth
- 3-stop radial gradient (bright center → main → dark rim)
- Scale bounce on placement (0 → 1.15 → 1.0 with back-out easing)
- Cargo indicator pulses gently when carrying

Trajectories (TrajectView.cs):
- Arrowhead at endpoint showing movement direction
- Antialiased lines with piece-matched colors

Cells (CellView.cs):
- Warmer palette: parchment/walnut board, deep forest production, aged gold demand
- Production flash uses warm golden glow instead of white
- Subtle inner shadow for visual depth

Animations (EventAnimator.cs):
- Production: golden particles burst from production cells
- Transfer: cargo slides with 2-particle trail + back-out whip easing
- Destruction: pieces shrink + spin + red particle explosion
- Victory: 40 confetti particles rain across the screen
- All phases trigger appropriate SFX

UI polish:
- ControlBar: styled buttons with rounded corners, disabled states
- MetricsOverlay: fade-in + scale animation, sequential metric reveals
- ObjectivePanel: animated progress bars, styled fills, green flash on completion
- Main: fade-in/out transitions between level select and gameplay

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-10 23:05:55 +02:00

107 lines
5 KiB
Markdown

# Plan: Juice Pass - Animations, Sons, Visuels
## Context
Le jeu fonctionne mais manque de "juice" — les interactions sont plates, pas de sons, les animations sont minimales. L'objectif est de rendre chaque action satisfaisante visuellement et auditivement.
## Principes
- Pas de dépendance externe (pas de fichiers audio .wav/.ogg) — sons générés procéduralement via `AudioStreamGenerator` ou les nœuds Godot (`AudioStreamPlayer` avec des tones synthétiques)
- Tout est fait en code (pas de .tscn supplémentaires)
- Les effets sont subtils, jamais bloquants
## Changements par catégorie
### 1. Pièces — Vie et feedback (PieceView.cs)
- **Bounce à la pose** : quand une pièce est placée, scale 0→1.2→1.0 (0.2s, ease back-out)
- **Pulse quand porte un colis** : le cargo indicator pulse doucement (scale 1.0↔1.2, loop)
- **Ombre sous la pièce** : un cercle sombre semi-transparent (alpha 0.15) légèrement décalé en bas
- **Lettre de la pièce** : utiliser le nom complet court au lieu de la lettre seule pour plus de clarté
### 2. Trajectoires (TrajectView.cs)
- **Flèche directionnelle** : ajouter un triangle au bout de la ligne pour montrer le sens
- **Pulse pendant la simulation** : la ligne pulse (alpha oscille 0.3↔0.6) quand la sim tourne
- **Couleur par type de pièce** : la trajectoire reprend la couleur de la pièce
### 3. Animations de tour (EventAnimator.cs)
- **Production** : particules (petits carrés colorés) qui jaillissent de la cellule de production + scale bounce de la cellule
- **Transfert** : le cargo slide laisse une traînée (2-3 carrés plus petits qui suivent avec délai) + ease back-out pour un effet de "whip"
- **Mouvement** : les pièces se soulèvent légèrement (scale 1.0→1.1→1.0 pendant le déplacement) pour donner l'impression de vol
- **Destruction** : la pièce se réduit (scale→0) + rotation + particules rouges éclatantes au lieu d'un simple flash
- **Victoire** : pluie de confettis dorés sur tout l'écran
### 4. Cellules (CellView.cs)
- **Hover amélioré** : la cellule survolée fait un léger scale-up (1.0→1.03) + outline pulse
- **Highlight de placement** : les cellules valides pulsent doucement (alpha oscille)
### 5. UI — Contrôles et panneaux
**ControlBar.cs** :
- Boutons avec style (fond coloré, coins arrondis) au lieu du style par défaut Godot
- Boutons disabled grayed out visuellement
**MetricsOverlay.cs** :
- Apparition avec fade-in + scale (0.8→1.0) au lieu d'un Visible=true brutal
- Les métriques apparaissent une par une avec un petit délai
**LevelSelectScreen.cs** :
- Cards hover : légère élévation (border-color plus clair) + scale 1.0→1.02
**ObjectivePanel.cs** :
- Flash vert sur la barre de progression quand une livraison arrive
- Animation de la jauge (tween de la valeur plutôt qu'un saut)
### 6. Sons procéduraux (nouveau: SfxManager.cs)
Un nœud singleton qui génère des bips synthétiques via `AudioStreamPlayer` :
- **Placement** : bip court montant (C5, 0.08s)
- **Production** : bip grave doux (C3, 0.1s)
- **Transfert** : swoosh (bruit blanc filtré, 0.15s)
- **Livraison à demande** : ding satisfaisant (C5+E5 chord, 0.2s)
- **Mouvement** : léger whoosh (bruit blanc très court, 0.05s)
- **Destruction** : crunch descendant (C4→C2, 0.15s)
- **Victoire** : arpège majeur montant (C4-E4-G4-C5, 0.5s)
- **Clic UI** : tick léger (0.02s)
Implémenté avec `AudioStreamGenerator` pour les tones, buffer rempli avec des sinusoïdes + enveloppe ADSR simple.
### 7. Transitions (Main.cs)
- **Fade in/out** entre level select et gameplay : ColorRect noir plein écran, alpha 1→0 (0.4s)
- **Camera** : zoom léger quand la simulation démarre (1.0→0.95→1.0)
## Fichiers à modifier
| Fichier | Changements |
|---------|-------------|
| `Scripts/Pieces/PieceView.cs` | Ombre, bounce, cargo pulse |
| `Scripts/Pieces/TrajectView.cs` | Flèche, pulse, couleur |
| `Scripts/Presentation/EventAnimator.cs` | Particules, trails, destruction améliorée, confettis victoire |
| `Scripts/Board/CellView.cs` | Hover scale, highlight pulse |
| `Scripts/UI/ControlBar.cs` | Boutons stylés |
| `Scripts/UI/MetricsOverlay.cs` | Fade-in, métriques séquentielles |
| `Scripts/UI/LevelSelectScreen.cs` | Card hover effects |
| `Scripts/UI/ObjectivePanel.cs` | Flash vert, tween jauge |
| `Scripts/Main.cs` | Fade transition, camera juice |
| `Scripts/Presentation/SfxManager.cs` | **NOUVEAU** — sons procéduraux |
## Ordre d'implémentation
1. SfxManager (fondation audio)
2. PieceView (bounce, ombre, cargo pulse)
3. EventAnimator (particules, trails, destruction, confettis)
4. CellView (hover, highlight pulse)
5. TrajectView (flèche, pulse)
6. UI polish (ControlBar, MetricsOverlay, ObjectivePanel, LevelSelectScreen)
7. Transitions (Main.cs fade, camera)
## Vérification
- Lancer le jeu, vérifier chaque animation visuellement
- S'assurer que les sons ne sont pas trop forts ou gênants
- Vérifier que les animations n'interfèrent pas avec le gameplay (pas de blocage)
- `dotnet test` pour s'assurer que l'engine n'est pas impacté