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 |