// Development-only inspection surface for the live combat-summon renderer. import { useEffect, useRef, useState } from "react"; import { createRoot } from "react-dom/client"; import { Canvas } from "@react-three/fiber"; import { Grid, OrbitControls } from "@react-three/drei"; import { preloadAbilityCatalogsForClasses } from "../game/abilityCatalog"; import { useCombatStore } from "../game/combatStore"; import { setMobPosition } from "../game/mobRuntimeRegistry"; import { CombatSummonPopulation } from "../scene/CombatSummonPopulation"; import { preloadShadowfiendMedia } from "../scene/shadowfiendMedia"; function Preview() { const [status, setStatus] = useState("Preparing Shadowfiend media…"); const canvas = useRef(null); useEffect(() => { void Promise.all([ preloadAbilityCatalogsForClasses(["priest"]), preloadShadowfiendMedia().catch(() => null), ]).then(() => { const combat = useCombatStore.getState(); combat.initializeCharacter({ classId: "priest", level: 80 }); combat.registerMob("shadowfiend-preview-target", { name: "Target", level: 80, maxHealth: 100_000, xpReward: 0, }); setMobPosition("shadowfiend-preview-target", [3, 0, 0]); combat.selectMob("shadowfiend-preview-target"); const result = combat.castAbility("wow335-priest-shadowfiend", [0, 0, 0], 1_000); setStatus(result.ok ? "Shadowfiend summon active" : `Cast failed: ${result.reason}`); }).catch((error) => setStatus(`Catalog failed: ${String(error)}`)); }, []); return <>
{status}
{ canvas.current = gl.domElement; }}>
; } if (import.meta.env.DEV) createRoot(document.getElementById("root")!).render();