forked from Simnation/Main
96 lines
2.4 KiB
Lua
96 lines
2.4 KiB
Lua
local loadRes
|
|
local isStopping = false
|
|
|
|
FM.loading = {}
|
|
|
|
---@class LoadingProps
|
|
---@field time? number
|
|
---@field focus? boolean
|
|
---@field cursor? boolean
|
|
---@field keepInput? boolean
|
|
---@field canCancel? boolean
|
|
---@field useSfx? boolean
|
|
|
|
---@type LoadingProps | nil
|
|
local currProps
|
|
|
|
local function setDefaultProps(props)
|
|
if not props then props = {} end
|
|
if props.focus == nil then props.focus = true end
|
|
if props.cursor == nil then props.cursor = false end
|
|
if props.keepInput == nil then props.keepInput = false end
|
|
if props.canCancel == nil then props.canCancel = false end
|
|
if props.useSfx == nil then props.useSfx = true end
|
|
|
|
return props
|
|
end
|
|
|
|
---@async
|
|
---@param props LoadingProps | nil
|
|
---@param cb function
|
|
function FM.loading.start(props, cb)
|
|
if loadRes then FM.console.err('Loading already active') return end
|
|
|
|
currProps = setDefaultProps(props)
|
|
loadRes = promise.new()
|
|
isStopping = false
|
|
|
|
SetNuiFocus(currProps.focus, currProps.cursor)
|
|
SetNuiFocusKeepInput(currProps.keepInput)
|
|
|
|
SendNUIMessage({
|
|
action = 'startLoading',
|
|
data = currProps
|
|
})
|
|
|
|
cb(Citizen.Await(loadRes))
|
|
end
|
|
|
|
---@param success boolean
|
|
function FM.loading.stop(success)
|
|
if not loadRes or isStopping then FM.console.err('No loading active') return end
|
|
isStopping = true
|
|
|
|
SendNUIMessage({
|
|
action = 'stopLoading',
|
|
data = success
|
|
})
|
|
end
|
|
|
|
RegisterNUICallback('loadingStopped', function(success, cb)
|
|
SetNuiFocus(false, false)
|
|
SetNuiFocusKeepInput(false)
|
|
|
|
if loadRes then
|
|
loadRes:resolve(success)
|
|
loadRes = nil
|
|
currProps = nil
|
|
end
|
|
|
|
isStopping = false
|
|
cb(true)
|
|
end)
|
|
|
|
---@return boolean
|
|
function FM.loading.isActive()
|
|
return loadRes ~= nil
|
|
end
|
|
|
|
RegisterCommand('cancelload', function (source, args, raw)
|
|
if not loadRes or not currProps or not currProps.canCancel then return end
|
|
FM.loading.stop(false)
|
|
end)
|
|
RegisterKeyMapping('cancelload', 'Cancel Loading', KeyMappings.CANCEL.mapper, KeyMappings.CANCEL.key)
|
|
|
|
--[[ EXAMPLE FOR NOW HERE ]]
|
|
-- RegisterCommand('startload', function (source, args, raw)
|
|
-- FM.loading.start({
|
|
-- time = 5000,
|
|
-- focus = true,
|
|
-- cursor = false,
|
|
-- input = false,
|
|
-- useSfx = true,
|
|
-- }, function(success)
|
|
-- FM.console.debug(success)
|
|
-- end)
|
|
-- end)
|