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>
107 lines
5 KiB
Markdown
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é
|