feat: admin mode, worlds 4-6, and stereo output fix

- Admin panel: add/remove stars, unlock worlds, reset progress (🛠 button)
- World 4 "Modulación" (8 levels): vibrato, sirena, wah-wah, auto-pan, FM, wobble bass
- World 5 "Efectos" (8 levels): delay, slapback, reverb, distortion, dub echo, shoegaze, ambient
- World 6 "Diseño Sonoro" (8 levels): kick, hi-hat, snare, pad, reese bass, laser, trance arp, final boss
- Star unlock progression: W4=36★, W5=48★, W6=60★ (total 48 levels, 144 stars)
- Fix stereo output: left/right channels now route through Tone.Merge for true stereo separation

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Jose Luis
2026-03-21 02:38:17 +01:00
parent 41d993183f
commit c4a2cb3cef
8 changed files with 1658 additions and 12 deletions

View File

@@ -2,9 +2,12 @@ import React from 'react';
import { WORLD_1 } from './levels/world1.js';
import { WORLD_2 } from './levels/world2.js';
import { WORLD_3 } from './levels/world3.js';
import { WORLD_4 } from './levels/world4.js';
import { WORLD_5 } from './levels/world5.js';
import { WORLD_6 } from './levels/world6.js';
import { getLevelProgress, isLevelUnlocked, loadProgress } from './gameState.js';
const worlds = [WORLD_1, WORLD_2, WORLD_3];
const worlds = [WORLD_1, WORLD_2, WORLD_3, WORLD_4, WORLD_5, WORLD_6];
function Stars({ count, max = 3 }) {
return (
@@ -30,7 +33,7 @@ function isWorldUnlocked(world) {
return getTotalStars() >= world.unlockStars;
}
export default function WorldMap({ onSelectLevel, onSandbox }) {
export default function WorldMap({ onSelectLevel, onSandbox, onAdmin }) {
const totalStars = getTotalStars();
const maxStars = getMaxStars();
@@ -52,6 +55,11 @@ export default function WorldMap({ onSelectLevel, onSandbox }) {
<button className="gm-sandbox-btn" onClick={onSandbox}>
🎛 Sandbox
</button>
{onAdmin && (
<button className="gm-admin-btn" onClick={onAdmin} title="Admin Mode">
🛠
</button>
)}
</div>
</div>