diff --git a/src/ReplicatedStorage/ui/store/producer/config.ts b/src/ReplicatedStorage/ui/store/producer/config.ts index de831aa..220eec8 100644 --- a/src/ReplicatedStorage/ui/store/producer/config.ts +++ b/src/ReplicatedStorage/ui/store/producer/config.ts @@ -5,12 +5,17 @@ export interface ConfigState { } const initialState: ConfigState = { - acrylicBlur: false + acrylicBlur: true } export const configProducer = createProducer(initialState, { - toggleAcrylic: (state) => ({ + enableAcrylic: (state) => ({ ...state, - acrylicBlur: !state.acrylicBlur + acrylicBlur: true + }), + + disableAcrylic: (state) => ({ + ...state, + acrylicBlur: false }) }) \ No newline at end of file diff --git a/src/StarterPlayer/StarterPlayerScripts/ui/config/config.tsx b/src/StarterPlayer/StarterPlayerScripts/ui/config/config.tsx index 92a05dc..55ee564 100644 --- a/src/StarterPlayer/StarterPlayerScripts/ui/config/config.tsx +++ b/src/StarterPlayer/StarterPlayerScripts/ui/config/config.tsx @@ -1,6 +1,7 @@ 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" @@ -14,19 +15,22 @@ interface ConfigProps extends Roact.JsxInstanceProperties { Change?: Roact.JsxInstanceChangeEvents } -const CONFIG_DEFAULT = [new Spring(1.5, { frequency: 6 })] -const CONFIG_ACTIVE = [new Spring(.5, { frequency: 6 })] +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 { toggleAcrylic } = useRootProducer() + const { disableAcrylic, enableAcrylic } = useRootProducer() let { shown } = props const spreadableProps = { ...props } as Partial delete spreadableProps.shown - const [slotPosYMap, setPosYGoal] = useGroupMotor([1.5, 6]) - const slotPosY = slotPosYMap.map((t) => t[0]) + 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) @@ -36,9 +40,9 @@ function config(props: ConfigProps): Roact.Element { if (Enum.UserInputState.Begin === userInputState) { shown = !shown if (shown) { - setPosYGoal(CONFIG_ACTIVE) + setConfigGoal(CONFIG_ACTIVE) } else { - setPosYGoal(CONFIG_DEFAULT) + setConfigGoal(CONFIG_DEFAULT) } } }, @@ -52,7 +56,7 @@ function config(props: ConfigProps): Roact.Element { {...spreadableProps} AnchorPoint={new Vector2(.5, .5)} Position={ - slotPosY.map((posY) => { + configPosY.map((posY) => { return new UDim2(.5, 0, posY, 0) }) } @@ -68,7 +72,7 @@ function config(props: ConfigProps): Roact.Element { AnchorPoint={new Vector2(0, 0)} Position={new UDim2(0, 0, 0, 0)} Size={new UDim2(1, 0, 1, 0)} - BackgroundTransparency={.7} + BackgroundTransparency={.3} BackgroundColor3={Color3.fromHex("#1e1e2e")} > + - {toggleAcrylic()} - }} - > - - - + ) diff --git a/src/StarterPlayer/StarterPlayerScripts/ui/config/toggleButton.tsx b/src/StarterPlayer/StarterPlayerScripts/ui/config/toggleButton.tsx new file mode 100644 index 0000000..44ac02b --- /dev/null +++ b/src/StarterPlayer/StarterPlayerScripts/ui/config/toggleButton.tsx @@ -0,0 +1,73 @@ +import Roact from "@rbxts/roact" +import Padding from "ReplicatedStorage/ui/components/padding" +import { Spring } from "@rbxts/flipper" +import { useGroupMotor } from "@rbxts/roact-hooked-plus" + +interface toggleButtonProps extends Roact.JsxInstanceProperties { + active: boolean + enableCallback: () => void + disableCallback: () => void + + Event?: Roact.JsxInstanceEvents + Change?: Roact.JsxInstanceChangeEvents +} + +const BUTTON_DEFAULT = [new Spring(0, { frequency: 6 })] +const BUTTON_ACTIVE = [new Spring(1, { frequency: 6 })] + +function toggleButton(props: toggleButtonProps): Roact.Element { + let { active } = props + const { enableCallback, disableCallback, Text } = props + + const spreadableProps = { ...props } as Partial + delete spreadableProps.active + delete spreadableProps.enableCallback + delete spreadableProps.disableCallback + + const [buttonBorderColorMap, setButtonGoal] = useGroupMotor([0]) + const buttonBorderColor = buttonBorderColorMap.map((t) => t[0]).map((val) => { + return Color3.fromHex("#6c7086").Lerp(Color3.fromHex("#b4befe"), val) + }) + + return ( + { + active = !active + if (active) { + setButtonGoal(BUTTON_ACTIVE) + enableCallback() + } else { + setButtonGoal(BUTTON_DEFAULT) + disableCallback() + } + } + }} + > + + + + + ) +} + +export default toggleButton \ No newline at end of file diff --git a/src/StarterPlayer/StarterPlayerScripts/ui/hotbar/slot.tsx b/src/StarterPlayer/StarterPlayerScripts/ui/hotbar/slot.tsx index 203d9c9..fff7f6b 100644 --- a/src/StarterPlayer/StarterPlayerScripts/ui/hotbar/slot.tsx +++ b/src/StarterPlayer/StarterPlayerScripts/ui/hotbar/slot.tsx @@ -16,8 +16,8 @@ interface SlotProps extends Roact.JsxInstanceProperties { Change?: Roact.JsxInstanceChangeEvents } -const SLOT_DEFAULT = [new Spring(.7, { frequency: 6 }), new Spring(6, { frequency: 6 })] -const SLOT_ACTIVE = [new Spring(.5, { frequency: 6 }), new Spring(5, { frequency: 6 })] +const SLOT_DEFAULT = [new Spring(0, { frequency: 6 }), new Spring(6, { frequency: 6 })] +const SLOT_ACTIVE = [new Spring(1, { frequency: 6 }), new Spring(5, { frequency: 6 })] function slot(props: SlotProps): Roact.Element { const { index, keycode, tool } = props @@ -27,9 +27,11 @@ function slot(props: SlotProps): Roact.Element { delete spreadableProps.keycode delete spreadableProps.tool - const [slotBgTransparencyAndSlotRatio, setSlotGoal] = useGroupMotor([.7, 6]) - const slotBgTransparency = slotBgTransparencyAndSlotRatio.map((t) => t[0]) - const slotRatio = slotBgTransparencyAndSlotRatio.map((t) => t[1]) + const [slotBorderColorAndSlotRatio, setSlotGoal] = useGroupMotor([0, 6]) + const slotBorderColor = slotBorderColorAndSlotRatio.map((t) => t[0]).map((val) => { + return Color3.fromHex("#6c7086").Lerp(Color3.fromHex("#b4befe"), val) + }) + const slotRatio = slotBorderColorAndSlotRatio.map((t) => t[1]) const { clientState } = useWorldContext() @@ -63,7 +65,7 @@ function slot(props: SlotProps): Roact.Element { return ( +