refactor(client/radial): use lib.addKeybind and tweak exports

Merge lib.hideRadial with closeRadial, trigger onReleased.
Trigger radial submenu after onSelect.
Keep showRadial as a local method.
This commit is contained in:
Linden
2023-02-08 00:50:05 +11:00
parent 62d441ddb1
commit 6fe8f5257f

View File

@@ -8,7 +8,7 @@ function lib.registerRadial(radial)
menus[radial.id] = radial menus[radial.id] = radial
end end
function lib.showRadial(id) local function showRadial(id)
local radial = menus[id] local radial = menus[id]
if not radial then return error('No radial menu with such id found.') end if not radial then return error('No radial menu with such id found.') end
@@ -25,10 +25,17 @@ function lib.showRadial(id)
end end
function lib.hideRadial() function lib.hideRadial()
if not isOpen then return end
SendNUIMessage({ SendNUIMessage({
action = 'openRadialMenu', action = 'openRadialMenu',
data = false data = false
}) })
SetNuiFocus(false, false)
isOpen = false
currentRadial = nil
end end
function lib.addRadialItem(items) function lib.addRadialItem(items)
@@ -68,8 +75,8 @@ RegisterNUICallback('radialClick', function(index, cb)
cb(1) cb(1)
local item = not currentRadial and menuItems[index + 1] or currentRadial.items[index + 1] local item = not currentRadial and menuItems[index + 1] or currentRadial.items[index + 1]
if item.menu then lib.showRadial(item.menu) end
if item.onSelect then item.onSelect() end if item.onSelect then item.onSelect() end
if item.menu then return showRadial(item.menu) end
lib.hideRadial() lib.hideRadial()
end) end)
@@ -77,7 +84,7 @@ end)
RegisterNUICallback('radialBack', function(_, cb) RegisterNUICallback('radialBack', function(_, cb)
cb(1) cb(1)
if currentRadial.menu then if currentRadial.menu then
return lib.showRadial(currentRadial.menu) return showRadial(currentRadial.menu)
end end
currentRadial = nil currentRadial = nil
@@ -90,8 +97,13 @@ RegisterNUICallback('radialBack', function(_, cb)
}) })
end) end)
local function openRadial() lib.addKeybind({
if #menuItems == 0 then return end name = 'ox_lib-radial',
description = 'Open radial menu',
defaultKey = 'z',
onPressed = function()
if isOpen or #menuItems == 0 then return end
isOpen = true isOpen = true
SendNUIMessage({ SendNUIMessage({
@@ -104,35 +116,15 @@ local function openRadial()
SetNuiFocusKeepInput(true) SetNuiFocusKeepInput(true)
SetCursorLocation(0.5, 0.5) SetCursorLocation(0.5, 0.5)
CreateThread(function()
while isOpen do while isOpen do
DisablePlayerFiring(cache.playerId, true) DisablePlayerFiring(cache.playerId, true)
DisableControlAction(0, 1, true) DisableControlAction(0, 1, true)
DisableControlAction(0, 2, true) DisableControlAction(0, 2, true)
Wait(0) Wait(0)
end end
end) end,
end onReleased = lib.hideRadial,
})
local function closeRadial()
if not isOpen then return end
SendNUIMessage({
action = 'openRadialMenu',
data = false
})
SetNuiFocus(false, false)
isOpen = false
if currentRadial then currentRadial = nil end
end
RegisterCommand('+ox_lib-radial', openRadial)
RegisterCommand('-ox_lib-radial', closeRadial)
RegisterKeyMapping('+ox_lib-radial', 'Open radial menu', 'keyboard', 'z')
AddEventHandler('onClientResourceStop', function(resource) AddEventHandler('onClientResourceStop', function(resource)
for i = #menuItems, 1, -1 do for i = #menuItems, 1, -1 do