2025-11-25 23:44:37 -08:00
|
|
|
import { useControls, useDebug, useSettings } from "./SettingsProvider";
|
2025-12-02 16:58:35 -08:00
|
|
|
import { MissionSelect } from "./MissionSelect";
|
2025-11-26 12:58:31 -08:00
|
|
|
|
2025-11-13 22:55:58 -08:00
|
|
|
export function InspectorControls({
|
|
|
|
|
missionName,
|
2025-12-14 11:06:57 -08:00
|
|
|
missionType,
|
2025-11-13 22:55:58 -08:00
|
|
|
onChangeMission,
|
|
|
|
|
}: {
|
|
|
|
|
missionName: string;
|
2025-12-14 11:06:57 -08:00
|
|
|
missionType: string;
|
|
|
|
|
onChangeMission: ({
|
|
|
|
|
missionName,
|
|
|
|
|
missionType,
|
|
|
|
|
}: {
|
|
|
|
|
missionName: string;
|
|
|
|
|
missionType: string;
|
|
|
|
|
}) => void;
|
2025-11-13 22:55:58 -08:00
|
|
|
}) {
|
2025-11-13 23:41:10 -08:00
|
|
|
const {
|
|
|
|
|
fogEnabled,
|
|
|
|
|
setFogEnabled,
|
|
|
|
|
fov,
|
|
|
|
|
setFov,
|
2025-11-15 16:33:18 -08:00
|
|
|
audioEnabled,
|
|
|
|
|
setAudioEnabled,
|
2025-12-01 22:33:12 -08:00
|
|
|
animationEnabled,
|
|
|
|
|
setAnimationEnabled,
|
2025-11-13 23:41:10 -08:00
|
|
|
} = useSettings();
|
2025-11-25 23:44:37 -08:00
|
|
|
const { speedMultiplier, setSpeedMultiplier } = useControls();
|
|
|
|
|
const { debugMode, setDebugMode } = useDebug();
|
2025-11-13 23:41:10 -08:00
|
|
|
|
2025-11-13 22:55:58 -08:00
|
|
|
return (
|
2025-11-14 00:15:28 -08:00
|
|
|
<div
|
|
|
|
|
id="controls"
|
2025-11-14 22:46:58 -08:00
|
|
|
onKeyDown={(e) => e.stopPropagation()}
|
2025-11-14 00:15:28 -08:00
|
|
|
onPointerDown={(e) => e.stopPropagation()}
|
|
|
|
|
onClick={(e) => e.stopPropagation()}
|
|
|
|
|
>
|
2025-12-14 11:06:57 -08:00
|
|
|
<MissionSelect
|
|
|
|
|
value={missionName}
|
|
|
|
|
missionType={missionType}
|
|
|
|
|
onChange={onChangeMission}
|
|
|
|
|
/>
|
2025-11-13 22:55:58 -08:00
|
|
|
<div className="CheckboxField">
|
|
|
|
|
<input
|
|
|
|
|
id="fogInput"
|
|
|
|
|
type="checkbox"
|
|
|
|
|
checked={fogEnabled}
|
|
|
|
|
onChange={(event) => {
|
2025-11-13 23:41:10 -08:00
|
|
|
setFogEnabled(event.target.checked);
|
2025-11-13 22:55:58 -08:00
|
|
|
}}
|
|
|
|
|
/>
|
|
|
|
|
<label htmlFor="fogInput">Fog?</label>
|
|
|
|
|
</div>
|
2025-11-15 16:33:18 -08:00
|
|
|
<div className="CheckboxField">
|
|
|
|
|
<input
|
|
|
|
|
id="audioInput"
|
|
|
|
|
type="checkbox"
|
|
|
|
|
checked={audioEnabled}
|
|
|
|
|
onChange={(event) => {
|
|
|
|
|
setAudioEnabled(event.target.checked);
|
|
|
|
|
}}
|
|
|
|
|
/>
|
|
|
|
|
<label htmlFor="audioInput">Audio?</label>
|
|
|
|
|
</div>
|
2025-12-01 22:33:12 -08:00
|
|
|
<div className="CheckboxField">
|
|
|
|
|
<input
|
|
|
|
|
id="animationInput"
|
|
|
|
|
type="checkbox"
|
|
|
|
|
checked={animationEnabled}
|
|
|
|
|
onChange={(event) => {
|
|
|
|
|
setAnimationEnabled(event.target.checked);
|
|
|
|
|
}}
|
|
|
|
|
/>
|
|
|
|
|
<label htmlFor="animationInput">Animation?</label>
|
|
|
|
|
</div>
|
2025-11-19 02:21:55 -05:00
|
|
|
<div className="CheckboxField">
|
|
|
|
|
<input
|
|
|
|
|
id="debugInput"
|
|
|
|
|
type="checkbox"
|
|
|
|
|
checked={debugMode}
|
|
|
|
|
onChange={(event) => {
|
|
|
|
|
setDebugMode(event.target.checked);
|
|
|
|
|
}}
|
|
|
|
|
/>
|
|
|
|
|
<label htmlFor="debugInput">Debug?</label>
|
|
|
|
|
</div>
|
2025-11-13 23:41:10 -08:00
|
|
|
<div className="Field">
|
|
|
|
|
<label htmlFor="fovInput">FOV</label>
|
|
|
|
|
<input
|
2025-12-01 22:33:12 -08:00
|
|
|
id="fovInput"
|
2025-11-13 23:41:10 -08:00
|
|
|
type="range"
|
|
|
|
|
min={75}
|
|
|
|
|
max={120}
|
|
|
|
|
step={5}
|
|
|
|
|
value={fov}
|
|
|
|
|
onChange={(event) => setFov(parseInt(event.target.value))}
|
|
|
|
|
/>
|
|
|
|
|
<output htmlFor="speedInput">{fov}</output>
|
|
|
|
|
</div>
|
|
|
|
|
<div className="Field">
|
|
|
|
|
<label htmlFor="speedInput">Speed</label>
|
|
|
|
|
<input
|
|
|
|
|
id="speedInput"
|
|
|
|
|
type="range"
|
|
|
|
|
min={0.1}
|
|
|
|
|
max={5}
|
|
|
|
|
step={0.05}
|
|
|
|
|
value={speedMultiplier}
|
|
|
|
|
onChange={(event) =>
|
|
|
|
|
setSpeedMultiplier(parseFloat(event.target.value))
|
|
|
|
|
}
|
|
|
|
|
/>
|
|
|
|
|
</div>
|
2025-11-13 22:55:58 -08:00
|
|
|
</div>
|
|
|
|
|
);
|
|
|
|
|
}
|