Files
ox_lib/resource/interface/client/menu.lua
T

140 lines
2.8 KiB
Lua
Raw Normal View History

2022-07-31 12:54:40 +02:00
local registeredMenus = {}
local openMenu = nil
2022-08-08 18:07:30 +10:00
local keepInput = IsNuiFocusKeepingInput()
2022-07-31 12:54:40 +02:00
2022-07-31 13:03:09 +02:00
function lib.registerMenu(data, cb)
if not data.id then return error('No menu id was provided.') end
if not data.title then return error('No menu title was provided.') end
if not data.options then return error('No menu options were provided.') end
2022-07-31 13:03:09 +02:00
data.cb = cb
registeredMenus[data.id] = data
2022-07-31 12:54:40 +02:00
end
function lib.showMenu(id)
2022-08-08 18:07:30 +10:00
local menu = registeredMenus[id]
2022-08-08 18:07:30 +10:00
if not menu then
return error(('No menu with id %s was found'):format(id))
end
2022-08-08 18:07:30 +10:00
if not openMenu then
CreateThread(function()
while openMenu do
if not openMenu.disableInput then
DisablePlayerFiring(cache.playerId, true)
HudWeaponWheelIgnoreSelection()
DisableControlAction(0, 140, true)
end
Wait(0)
end
end)
end
openMenu = menu
keepInput = IsNuiFocusKeepingInput()
if not menu.disableInput then
SetNuiFocusKeepInput(true)
end
2022-07-31 13:03:09 +02:00
SetNuiFocus(true, false)
2022-07-31 12:54:40 +02:00
SendNUIMessage({
action = 'setMenu',
data = {
2022-08-08 18:07:30 +10:00
position = menu.position,
title = menu.title,
items = menu.options
2022-07-31 12:54:40 +02:00
}
})
end
2022-08-08 18:07:30 +10:00
local function resetFocus()
SetNuiFocus(false, false)
SetNuiFocusKeepInput(keepInput)
end
2022-08-04 13:25:47 +02:00
function lib.hideMenu(onExit)
local menu = openMenu
openMenu = nil
if onExit and menu.onClose then
menu.onClose()
end
2022-08-08 18:07:30 +10:00
resetFocus()
2022-08-04 13:25:47 +02:00
SendNUIMessage({
action = 'closeMenu'
})
end
function lib.setMenuOptions(id, options, index)
if index then
registeredMenus[id].options[index] = options
else
if not options[1] then return error('Invalid override format used, expected table of options.') end
registeredMenus[id].options = options
end
end
2022-07-31 12:54:40 +02:00
function lib.getOpenMenu() return openMenu end
RegisterNUICallback('confirmSelected', function(data, cb)
cb(1)
data[1] += 1 -- selected
if data[2] then
data[2] += 1 -- scrollIndex
end
local menu = openMenu
openMenu = nil
if menu.options[data[1]].close ~= false then
2022-08-08 18:07:30 +10:00
resetFocus()
end
if menu.cb then
menu.cb(data[1], data[2], menu.options[data[1]].args)
end
end)
RegisterNUICallback('changeIndex', function(data, cb)
cb(1)
if not openMenu.onSideScroll then return end
data[1] += 1 -- selected
if data[2] then
data[2] += 1 -- scrollIndex
end
openMenu.onSideScroll(data[1], data[2], openMenu.options[data[1]].args)
2022-07-31 12:54:40 +02:00
end)
RegisterNUICallback('changeSelected', function(data, cb)
cb(1)
if not openMenu.onSelected then return end
data[1] += 1 -- selected
if data[2] then
data[2] += 1 -- scrollIndex
end
openMenu.onSelected(data[1], data[2], openMenu.options[data[1]].args)
2022-07-31 12:54:40 +02:00
end)
RegisterNUICallback('closeMenu', function(data, cb)
cb(1)
2022-08-08 18:07:30 +10:00
resetFocus()
local menu = openMenu
openMenu = nil
if menu.onClose then
menu.onClose()
end
end)