import Roact from "@rbxts/roact" import { ContextActionService, HttpService } from "@rbxts/services" import { Spring } from "@rbxts/flipper" import { useEffect } from "@rbxts/roact-hooked" import Item from "./item" import Surface from "ReplicatedStorage/ui/components/surface" import { useMotor } from "@rbxts/pretty-roact-hooks" interface ConfigProps extends Roact.JsxInstanceProperties { shown: boolean Event?: Roact.JsxInstanceEvents Change?: Roact.JsxInstanceChangeEvents } const CONFIG_DEFAULT = new Spring(1.5, { frequency: 6 }) const CONFIG_ACTIVE = new Spring(.5, { frequency: 6 }) function config(props: ConfigProps): Roact.Element { let { shown } = props const spreadableProps = { ...props } as Partial delete spreadableProps.shown const [configPosY, setConfigGoal] = useMotor(1.5) // TODO: maybe opt this into our system for inputs? useEffect(() => { const guid = HttpService.GenerateGUID(false) ContextActionService.BindAction( guid, (_, userInputState) => { if (Enum.UserInputState.Begin === userInputState) { shown = !shown if (shown) { setConfigGoal(CONFIG_ACTIVE) } else { setConfigGoal(CONFIG_DEFAULT) } } }, false, Enum.KeyCode.P ) }) return ( { return new UDim2(.5, 0, posY, 0) }) } size={new UDim2(.4, 0, .7, 0)} Key={"config"} > ) } export default config