1
0
Fork 0
forked from Simnation/Main
Main/resources/[standalone]/fmLib/modules/animation/client.lua
2025-06-07 08:51:21 +02:00

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