forked from Simnation/Main
67 lines
No EOL
2.2 KiB
Lua
67 lines
No EOL
2.2 KiB
Lua
FM.animation = {}
|
|
|
|
---@class AnimationProps
|
|
---@field anim string
|
|
---@field dict string
|
|
---@field ped? number
|
|
---@field position? vector3
|
|
---@field rotation? vector3
|
|
---@field enterSpeed? number
|
|
---@field exitSpeed? number
|
|
---@field duration? number
|
|
---@field flag? number
|
|
---@field animTime? number
|
|
---@field advanced? boolean | nil
|
|
|
|
---@param props AnimationProps
|
|
local function validateProps(props)
|
|
if not props or type(props) ~= 'table' or not props.anim or not props.dict then return false end
|
|
return true
|
|
end
|
|
|
|
local function setDefaultProps(props)
|
|
if not props then props = {} end
|
|
props.ped = props.ped or PlayerPedId()
|
|
props.position = props.position or GetEntityCoords(props.ped)
|
|
props.rotation = props.rotation or vector3(0.0, 0.0, 0.0)
|
|
props.enterSpeed = props.enterSpeed or 3.0
|
|
props.exitSpeed = props.exitSpeed or -3.0
|
|
props.duration = props.duration or -1
|
|
props.flag = props.flag or 49
|
|
props.animTime = props.animTime or 0
|
|
|
|
return props
|
|
end
|
|
|
|
---@param dict string
|
|
function FM.animation.request(dict)
|
|
if not dict then FM.console.err('No animation dictionary specified') return end
|
|
if type(dict) ~= "string" then FM.console.err('Animation dictionary must be a string') return end
|
|
if not DoesAnimDictExist(dict) then FM.console.err('Animation dictionary does not exist') return end
|
|
|
|
if HasAnimDictLoaded(dict) then return true end
|
|
local tries = 0
|
|
|
|
RequestAnimDict(dict)
|
|
repeat
|
|
tries = tries + 1
|
|
Wait(100)
|
|
until HasAnimDictLoaded(dict) or tries > 200
|
|
|
|
return HasAnimDictLoaded(dict)
|
|
end
|
|
|
|
---@param props AnimationProps | nil
|
|
function FM.animation.play(props)
|
|
if not validateProps(props) then return end
|
|
props = setDefaultProps(props)
|
|
if not FM.animation.request(props.dict) then return end
|
|
|
|
if props.advanced then
|
|
TaskPlayAnimAdvanced(props.ped, props.dict, props.anim, props.position, props.rotation, props.enterSpeed, props.exitSpeed, props.duration, props.flag, props.animTime)
|
|
else
|
|
TaskPlayAnim(props.ped, props.dict, props.anim, props.enterSpeed, props.exitSpeed, props.duration, props.flag, props.animTime, false, false, false)
|
|
end
|
|
end
|
|
|
|
FM.anim = FM.animation |