()
| 298 | // shadow interaction. Animated lights orbit the center. |
| 299 | |
| 300 | function setupLightArena(): void { |
| 301 | const cx = 28.0; |
| 302 | |
| 303 | // Central pillar |
| 304 | placeCube(cx, 2.5, 0, 1.5, 5, 1.5, 0.85, 0.85, 0.85, 0.3, 0.0); |
| 305 | |
| 306 | // Surrounding spheres (white, varying roughness) |
| 307 | const count = 8; |
| 308 | for (let i = 0; i < count; i = i + 1) { |
| 309 | const angle = TWO_PI * i / count; |
| 310 | const x = cx + Math.cos(angle) * 6; |
| 311 | const z = Math.sin(angle) * 6; |
| 312 | const roughness = 0.05 + 0.95 * i / (count - 1); |
| 313 | placeSphere(x, 0.8, z, 1.4, 0.9, 0.9, 0.9, roughness, 0.0); |
| 314 | } |
| 315 | |
| 316 | // Floor disc (dark, metallic — to catch reflections when SSR lands) |
| 317 | placeCube(cx, -0.05, 0, 16, 0.1, 16, 0.05, 0.05, 0.07, 0.1, 1.0); |
| 318 | |
| 319 | // Smaller metallic accents |
| 320 | placeSphere(cx - 3, 0.5, -3, 0.8, 0.95, 0.93, 0.88, 0.05, 1.0); |
| 321 | placeSphere(cx + 3, 0.5, 3, 0.8, 1.0, 0.76, 0.33, 0.1, 1.0); |
| 322 | placeSphere(cx, 0.5, -5, 0.8, 0.95, 0.64, 0.54, 0.15, 1.0); |
| 323 | } |
| 324 | |
| 325 | // ============================================================ |
| 326 | // Zone 3: Shadow Quality (centered at x=-28) |
no test coverage detected