Spaces:
Sleeping
Sleeping
File size: 9,716 Bytes
12d64f8 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 |
# 🎨 UNIT VISUAL SHAPES - Guide des formes d'unités
**Date:** 3 Octobre 2025
**Fichier:** web/static/game.js (lignes 511-616)
**Objectif:** Différencier visuellement chaque type d'unité
---
## 📐 FORMES DES UNITÉS
### 🟦 **Infantry (Infanterie)**
```
┌────────┐
│ ▪️ │ Petit carré (0.8x size)
│ 👤 │ Représente un soldat
└────────┘
```
- **Forme:** Petit carré (80% de la taille normale)
- **Raison:** Simple et compact, comme un soldat vu de haut
- **Code:** `fillRect` avec 0.8x size
---
### 🔵 **Tank (Char d'assaut)**
```
▄▄▄
╱ ╲
│ 🎯 │ Cercle + Canon rectangulaire
│ │ Représente la tourelle vue de haut
╲___╱
║
║ Canon pointant vers le haut
```
- **Forme:** Cercle (tourelle) + Rectangle (canon)
- **Raison:** Tourelle circulaire avec canon est iconique pour un tank
- **Code:** `arc` (cercle 0.8x size) + `fillRect` (canon 0.3x0.12 size vers le haut)
---
### 🔺 **Harvester (Récolteur)**
```
🔺
╱ ╲
╱ ╲ Triangle pointant vers le haut
╱ 💰 ╲ Avec indicateur de cargo doré
╱───────╲
```
- **Forme:** Triangle équilatéral pointant vers le haut
- **Raison:** Forme de pelle/foreuse pour véhicule minier
- **Particularité:**
- Cercle doré au centre si `cargo > 0` (porte des ressources)
- Cercle devient plus gros si `cargo >= 180` (presque plein)
- **Code:** Chemin avec 3 points + `arc` conditionnel pour cargo
---
### 💎 **Helicopter (Hélicoptère)**
```
◆
╱ ╲
───◆─────◆─── Losange avec rotors
╲ ╱ Vue de dessus
◆
```
- **Forme:** Losange (diamant) + Ligne horizontale (rotors)
- **Raison:** Vue de dessus avec rotors visibles
- **Code:** Chemin avec 4 points (losange) + ligne horizontale épaisse
---
### ⬠ **Artillery (Artillerie)**
```
▲
╱ ╲
╱ ║ ╲ Pentagone + Canon long
│ ║ │ Plateforme d'artillerie
╲ ╱
╲_╱
```
- **Forme:** Pentagone (5 côtés) + Rectangle vertical (canon long)
- **Raison:** Plateforme stable avec canon de longue portée
- **Code:** Chemin avec 5 points (rotation -90°) + `fillRect` (canon 0.2x1.5 size)
---
## 🎨 SYSTÈME DE COULEURS
### Joueur 0 (Allié)
- **Couleur principale:** `#4A90E2` (Bleu)
- **Utilisation:** Toutes les unités du joueur
### Joueur 1+ (Ennemi)
- **Couleur principale:** `#E74C3C` (Rouge)
- **Utilisation:** Toutes les unités ennemies
### Indicateurs spéciaux
**Harvester Cargo:**
- `cargo > 0` → Cercle orange `#FFA500`
- `cargo >= 180` (90% plein) → Cercle doré `#FFD700`
**Barre de santé:**
- `health > 50%` → Vert `#2ECC71`
- `health 25-50%` → Orange `#F39C12`
- `health < 25%` → Rouge `#E74C3C`
---
## 📊 TAILLES RELATIVES
```
Base size = TILE_SIZE / 2 = 40 / 2 = 20px
Infantry: 16px x 16px (0.8x size)
Tank: 16px radius (0.8x size) + canon 6x24px
Harvester: 32px base (1.6x size triangle)
Helicopter: 40px diag (2x size diamond)
Artillery: 20px radius (1x size pentagon) + canon 4x30px
```
---
## 🔍 VISUALISATION COMPARATIVE
```
┌─────────────────────────────────────────────────────────────────┐
│ VUE DE DESSUS (TOP-DOWN) │
├─────────────────────────────────────────────────────────────────┤
│ │
│ Infantry Tank Harvester Helicopter Artillery│
│ │
│ ┌──┐ ● ▲ ◆ ⬠ │
│ │ │ ╱│╲ ╱ ╲ ╱ ╲ ╱│╲ │
│ └──┘ │ ● │ ╱💰 ╲ ◆ ◆ │ │ │ │
│ │ │ │ └─────┘ ╲ ╱ │ ⬠ │ │
│ ║ ◆ │ │ │ │
│ ║ ╲│╱ │
│ │
│ Bleu = Joueur │
│ Rouge = Ennemi │
└─────────────────────────────────────────────────────────────────┘
```
---
## 💻 CODE STRUCTURE
### Fonction principale: `drawUnits()`
```javascript
drawUnits() {
for (const [id, unit] of Object.entries(this.gameState.units)) {
const color = unit.player_id === 0 ? BLUE : RED;
const size = TILE_SIZE / 2; // 20px
switch(unit.type) {
case 'infantry':
// Petit carré
fillRect(x, y, size*0.8, size*0.8);
case 'tank':
// Cercle + canon
arc(x, y, size*0.8);
fillRect(canon);
case 'harvester':
// Triangle + cargo
moveTo/lineTo (triangle);
if (cargo > 0) arc(cargo_indicator);
case 'helicopter':
// Losange + rotors
moveTo/lineTo (diamond);
moveTo/lineTo (rotor_line);
case 'artillery':
// Pentagone + canon
for (5 sides) moveTo/lineTo;
fillRect(barrel);
}
drawHealthBar(unit);
}
}
```
---
## 🎯 AVANTAGES DU SYSTÈME
### 1. **Identification rapide**
- Chaque unité a une silhouette unique
- Reconnaissance instantanée même à petite échelle
- Pas de confusion entre types
### 2. **Clarté tactique**
- Infantry (carré) = Unité de base
- Tank (cercle) = Unité blindée
- Harvester (triangle) = Unité économique
- Helicopter (losange) = Unité aérienne
- Artillery (pentagone) = Unité de support
### 3. **Information visuelle**
- Harvester montre son cargo (cercle doré)
- Barres de santé colorées selon état
- Couleur joueur/ennemi claire
### 4. **Performance**
- Formes simples (primitives Canvas)
- Pas de sprites/images nécessaires
- Rendu rapide même avec beaucoup d'unités
---
## 🎮 COMPARAISON AVEC RED ALERT ORIGINAL
### Red Alert (1996)
- Sprites bitmap 2D pré-rendus
- 8 directions de rotation
- Animations frame-by-frame
### Notre version (2025)
- Formes géométriques vectorielles
- Rotation continue possible
- Rendu procédural en temps réel
- Style minimaliste moderne
---
## 🔧 PERSONNALISATION
Pour modifier les formes, éditer `web/static/game.js` lignes 511-616 :
### Exemple: Changer la forme du Tank
```javascript
case 'tank':
// Version actuelle: Cercle + canon
this.ctx.arc(x, y, size*0.8, 0, Math.PI*2);
this.ctx.fillRect(x-size*0.15, y-size*1.2, size*0.3, size*1.2);
// Variante: Carré arrondi + canon
this.ctx.roundRect(x-size, y-size, size*2, size*2, size*0.3);
this.ctx.fill();
this.ctx.fillRect(x-size*0.15, y-size*1.2, size*0.3, size*1.2);
```
---
## 📊 STATISTIQUES VISUELLES
| Type | Forme | Taille | Éléments additionnels |
|------|-------|--------|----------------------|
| **Infantry** | Carré | 16x16px | Aucun |
| **Tank** | Cercle | Ø32px | Canon (6x24px) |
| **Harvester** | Triangle | 32px base | Cargo indicator |
| **Helicopter** | Losange | 40px diag | Ligne rotors |
| **Artillery** | Pentagone | Ø40px | Canon long (4x30px) |
---
## 🧪 TEST DE LISIBILITÉ
Pour vérifier la lisibilité des formes :
1. **Test à 100% zoom**
- Toutes les formes doivent être clairement distinctes
- Détails (canon, rotors, cargo) visibles
2. **Test à 50% zoom (minimap)**
- Silhouettes reconnaissables
- Couleurs joueur/ennemi claires
3. **Test avec 50+ unités**
- Pas de confusion visuelle
- Performance stable (60 FPS)
---
## 🎨 PALETTE DE COULEURS COMPLÈTE
```javascript
PLAYER: #4A90E2 (Bleu vif)
ENEMY: #E74C3C (Rouge vif)
SELECTION: #00FF00 (Vert fluo)
HEALTH_HI: #2ECC71 (Vert)
HEALTH_MID: #F39C12 (Orange)
HEALTH_LOW: #E74C3C (Rouge)
CARGO_PART: #FFA500 (Orange)
CARGO_FULL: #FFD700 (Or)
```
---
## ✅ CHECKLIST D'IMPLÉMENTATION
- [x] Infantry → Petit carré
- [x] Tank → Cercle + canon
- [x] Harvester → Triangle + cargo indicator
- [x] Helicopter → Losange + rotors
- [x] Artillery → Pentagone + canon long
- [x] Couleurs joueur/ennemi
- [x] Barres de santé colorées
- [x] Indicateur cargo Harvester
- [x] Formes évolutives (tailles)
- [x] Performance optimisée
---
## 🚀 PROCHAINES AMÉLIORATIONS POSSIBLES
1. **Rotation des unités**
- Orienter selon direction de déplacement
- Canvas `rotate()` avant dessin
2. **Animations**
- Rotors d'hélicoptère qui tournent
- Canon qui recule au tir
- Harvester qui "creuse"
3. **Effets visuels**
- Ombre portée
- Outline au survol
- Particules au mouvement
4. **États visuels**
- Attaque (flash rouge)
- En production (aura bleue)
- Endommagé (fumée)
---
**Status:** ✅ IMPLÉMENTÉ ET FONCTIONNEL
**Fichier:** web/static/game.js
**Lignes:** 511-616
**Compatibilité:** Tous navigateurs modernes (Canvas 2D)
|