From ada2a35c0b99d865e6e821700b2b2d0d9526f23a Mon Sep 17 00:00:00 2001 From: Luke <39926192+LukeWasTakenn@users.noreply.github.com> Date: Tue, 31 Jan 2023 14:07:52 +0100 Subject: [PATCH] refactor(client/interface): initial lua radial menu implementation linden pls don't kill me --- resource/interface/client/radial.lua | 59 ++++++++++++++++++++++++++ web/src/features/menu/radial/index.tsx | 3 +- 2 files changed, 61 insertions(+), 1 deletion(-) create mode 100644 resource/interface/client/radial.lua diff --git a/resource/interface/client/radial.lua b/resource/interface/client/radial.lua new file mode 100644 index 0000000..07a72d1 --- /dev/null +++ b/resource/interface/client/radial.lua @@ -0,0 +1,59 @@ +local isOpen = false +local menuItems = {} + +function lib.addRadialItem(items) + if table.type(items) == 'array' then + for i = 1, #items do + local itemOption = items[i] + menuItems[#menuItems+1] = itemOption + end + else + menuItems[#menuItems+1] = items + end +end + +-- TODO: Interval canInteract checking and sending new items to NUI +local function openRadial() + isOpen = true + local items = {} + for i = 1, #menuItems do + local menuItem = menuItems[i] + if menuItem.canInteract == nil or menuItem.canInteract() then + items[#items+1] = { + icon = menuItem.icon, + label = menuItem.label + } + end + end + SendNUIMessage({ + action = 'openRadialMenu', + data = { + items = items + } + }) + SetNuiFocus(true, true) + SetNuiFocusKeepInput(true) + CreateThread(function() + while isOpen do + DisablePlayerFiring(cache.playerId, true) + DisableControlAction(0, 1, true) + DisableControlAction(0, 2, true) + Wait(0) + end + end) +end + +local function closeRadial() + SendNUIMessage({ + action = 'openRadialMenu', + data = false + }) + SetNuiFocus(false, false) + isOpen = false +end + +RegisterCommand('+ox_lib-radial', openRadial) + +RegisterCommand('-ox_lib-radial', closeRadial) + +RegisterKeyMapping('+ox_lib-radial', 'Open radial menu', 'keyboard', 'z') \ No newline at end of file diff --git a/web/src/features/menu/radial/index.tsx b/web/src/features/menu/radial/index.tsx index f9f966f..c5c1d60 100644 --- a/web/src/features/menu/radial/index.tsx +++ b/web/src/features/menu/radial/index.tsx @@ -62,7 +62,8 @@ const RadialMenu: React.FC = () => { sub: false, }); - useNuiEvent('openRadialMenu', (data: { items: MenuItem[]; sub?: boolean }) => { + useNuiEvent('openRadialMenu', (data: { items: MenuItem[]; sub?: boolean } | false) => { + if (!data) return setVisible(false); setMenu(data); setVisible(true); });