0.0.1
This commit is contained in:
85
resources/[core]/esx_progressbar/Progress.lua
Normal file
85
resources/[core]/esx_progressbar/Progress.lua
Normal file
@@ -0,0 +1,85 @@
|
||||
---@class ProgressBarAnimation
|
||||
---@field public type "anim" | "Scenario"
|
||||
---@field public dict? string
|
||||
---@field public lib? string
|
||||
|
||||
---@class ProgressBarOptions
|
||||
---@field public animation ProgressBarAnimation
|
||||
---@field public FreezePlayer? boolean
|
||||
---@field public onFinish? function
|
||||
|
||||
local CurrentProgress = nil
|
||||
|
||||
local function startProcessing()
|
||||
while (CurrentProgress ~= nil) do
|
||||
if CurrentProgress.length > 0 then
|
||||
CurrentProgress.length = CurrentProgress.length - 1000
|
||||
else
|
||||
ClearPedTasks(ESX.PlayerData.ped)
|
||||
if CurrentProgress.FreezePlayer then
|
||||
FreezeEntityPosition(ESX.PlayerData.ped, false)
|
||||
end
|
||||
if CurrentProgress.onFinish then
|
||||
CurrentProgress.onFinish()
|
||||
end
|
||||
CurrentProgress = nil
|
||||
end
|
||||
Wait(1000)
|
||||
end
|
||||
end
|
||||
|
||||
---@param message string
|
||||
---@param length? number Timeout in milliseconds
|
||||
---@param Options? ProgressBarOptions
|
||||
---@return boolean Success
|
||||
local function Progressbar(message, length, Options)
|
||||
if CurrentProgress then
|
||||
return false
|
||||
end
|
||||
CurrentProgress = Options or {}
|
||||
if CurrentProgress.animation then
|
||||
if CurrentProgress.animation.type == "anim" then
|
||||
ESX.Streaming.RequestAnimDict(CurrentProgress.animation.dict, function()
|
||||
TaskPlayAnim(ESX.PlayerData.ped, CurrentProgress.animation.dict, CurrentProgress.animation.lib, 1.0, 1.0, length, 1, 1.0, false, false, false)
|
||||
RemoveAnimDict(CurrentProgress.animation.dict)
|
||||
end)
|
||||
elseif CurrentProgress.animation.type == "Scenario" then
|
||||
TaskStartScenarioInPlace(ESX.PlayerData.ped, CurrentProgress.animation.Scenario, 0, true)
|
||||
end
|
||||
end
|
||||
if CurrentProgress.FreezePlayer then
|
||||
FreezeEntityPosition(ESX.PlayerData.ped, CurrentProgress.FreezePlayer)
|
||||
end
|
||||
SendNUIMessage({
|
||||
type = "Progressbar",
|
||||
length = length or 3000,
|
||||
message = message or "ESX-Framework",
|
||||
})
|
||||
CurrentProgress.length = length or 3000
|
||||
CreateThread(startProcessing);
|
||||
return true;
|
||||
end
|
||||
|
||||
local function CancelProgressbar()
|
||||
if not CurrentProgress then
|
||||
return
|
||||
end
|
||||
SendNUIMessage({
|
||||
type = "Close",
|
||||
})
|
||||
ClearPedTasks(ESX.PlayerData.ped)
|
||||
if CurrentProgress.FreezePlayer then
|
||||
FreezeEntityPosition(ESX.PlayerData.ped, false)
|
||||
end
|
||||
if CurrentProgress.onCancel then
|
||||
CurrentProgress.onCancel()
|
||||
end
|
||||
CurrentProgress.canceled = true
|
||||
CurrentProgress.length = 0
|
||||
CurrentProgress = nil
|
||||
end
|
||||
|
||||
ESX.RegisterInput("cancelprog", "[ProgressBar] Cancel Progressbar", "keyboard", "BACK", CancelProgressbar)
|
||||
|
||||
exports("Progressbar", Progressbar)
|
||||
exports("CancelProgressbar", CancelProgressbar)
|
||||
Reference in New Issue
Block a user