File size: 1,953 Bytes
ce91fab cd1aa63 ce91fab cd1aa63 ce91fab cd1aa63 ce91fab cd1aa63 ce91fab cd1aa63 ce91fab 1e30eae ce91fab 1e30eae ce91fab cd1aa63 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 | import AltitudeSlider from "./AltitudeSlider";
import FlightSwitch from "./FlightSwitch";
import Joystick from "./Joystick";
import WingSlider from "./WingSlider";
interface FlyControlsProps {
disabled: boolean;
joystickRef: React.RefObject<{ x: number; y: number }>;
wingSlidersRef: React.RefObject<{ left: number; right: number }>;
flying: boolean;
onToggleFlying: () => void;
altitudeLevelIndex: number;
onAltitudeChange: (index: number) => void;
size?: "normal" | "large";
}
export default function FlyControls({
disabled,
joystickRef,
wingSlidersRef,
flying,
onToggleFlying,
altitudeLevelIndex,
onAltitudeChange,
size = "normal",
}: FlyControlsProps) {
return (
<div
style={{
display: "flex",
flexDirection: "column",
alignItems: "center",
gap: 12,
padding: "16px 0",
borderBottom: "1px solid #2a2d3a",
}}
>
<div style={{ display: "flex", alignItems: "center", justifyContent: "center", gap: 16 }}>
{!flying && (
<WingSlider
label="L wing"
disabled={disabled}
size={size}
onChange={(v) => {
wingSlidersRef.current.left = v;
}}
/>
)}
<Joystick vectorRef={joystickRef} disabled={disabled} size={size} />
{flying ? (
<AltitudeSlider levelIndex={altitudeLevelIndex} disabled={disabled} onChange={onAltitudeChange} size={size} />
) : (
<WingSlider
label="R wing"
disabled={disabled}
size={size}
onChange={(v) => {
wingSlidersRef.current.right = v;
}}
/>
)}
</div>
<div style={{ display: "flex", alignItems: "center", justifyContent: "center", gap: 16 }}>
<FlightSwitch flying={flying} disabled={disabled} onToggle={onToggleFlying} size={size} />
</div>
</div>
);
}
|