t2-mapper/src/components/InspectorControls.tsx

115 lines
2.8 KiB
TypeScript
Raw Normal View History

import { getResourceList } from "../manifest";
import { useSettings } from "./SettingsProvider";
2025-11-13 22:55:58 -08:00
const excludeMissions = new Set([
"SkiFree",
"SkiFree_Daily",
"SkiFree_Randomizer",
]);
const missions = getResourceList()
.map((resourcePath) => resourcePath.match(/^missions\/(.+)\.mis$/))
.filter(Boolean)
.map((match) => match[1])
.filter((name) => !excludeMissions.has(name));
export function InspectorControls({
missionName,
onChangeMission,
}: {
missionName: string;
onChangeMission: (name: string) => void;
}) {
const {
fogEnabled,
setFogEnabled,
speedMultiplier,
setSpeedMultiplier,
fov,
setFov,
2025-11-15 16:33:18 -08:00
audioEnabled,
setAudioEnabled,
2025-11-19 02:21:55 -05:00
debugMode,
setDebugMode,
} = useSettings();
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-11-13 22:55:58 -08:00
<select
id="missionList"
value={missionName}
onChange={(event) => onChangeMission(event.target.value)}
>
{missions.map((missionName) => (
<option key={missionName}>{missionName}</option>
))}
</select>
<div className="CheckboxField">
<input
id="fogInput"
type="checkbox"
checked={fogEnabled}
onChange={(event) => {
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-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>
<div className="Field">
<label htmlFor="fovInput">FOV</label>
<input
id="speedInput"
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>
);
}