import Roact from "@rbxts/roact" import Padding from "ReplicatedStorage/ui/components/padding" import Acrylic from "ReplicatedStorage/ui/components/acrylic" import ToggleButton from "./toggleButton" import { ContextActionService, HttpService } from "@rbxts/services" import { Spring } from "@rbxts/flipper" import { useGroupMotor } from "@rbxts/roact-hooked-plus" import { useEffect } from "@rbxts/roact-hooked" import { useRootProducer } from "ReplicatedStorage/ui/store/hooks/useUiProducer" interface ConfigProps extends Roact.JsxInstanceProperties { shown: boolean Event?: Roact.JsxInstanceEvents Change?: Roact.JsxInstanceChangeEvents } const CONFIG_DEFAULT = [new Spring(1.5, { frequency: 6 }), new Spring(0, { frequency: 6 })] const CONFIG_ACTIVE = [new Spring(.5, { frequency: 6 }), new Spring(1, { frequency: 6 })] function config(props: ConfigProps): Roact.Element { const { disableAcrylic, enableAcrylic } = useRootProducer() let { shown } = props const spreadableProps = { ...props } as Partial delete spreadableProps.shown const [configPosYAndBorderColor, setConfigGoal] = useGroupMotor([1.5, 6]) const configPosY = configPosYAndBorderColor.map((t) => t[0]) const configBorderColor = configPosYAndBorderColor.map((t) => t[1]).map((val) => { return Color3.fromHex("#6c7086").Lerp(Color3.fromHex("#b4befe"), val) }) 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) }) } BackgroundTransparency={1} Size={new UDim2(.4, 0, .7, 0)} Key={"Config"} > ) } export default config