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>
5 KiB
5 KiB
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
AudioStreamGeneratorou les nœuds Godot (AudioStreamPlayeravec 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
- SfxManager (fondation audio)
- PieceView (bounce, ombre, cargo pulse)
- EventAnimator (particules, trails, destruction, confettis)
- CellView (hover, highlight pulse)
- TrajectView (flèche, pulse)
- UI polish (ControlBar, MetricsOverlay, ObjectivePanel, LevelSelectScreen)
- 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 testpour s'assurer que l'engine n'est pas impacté