51 lines
2.0 KiB
Lua
51 lines
2.0 KiB
Lua
---@alias WeaponResourceFlags
|
|
---| 1 WRF_REQUEST_BASE_ANIMS
|
|
---| 2 WRF_REQUEST_COVER_ANIMS
|
|
---| 4 WRF_REQUEST_MELEE_ANIMS
|
|
---| 8 WRF_REQUEST_MOTION_ANIMS
|
|
---| 16 WRF_REQUEST_STEALTH_ANIMS
|
|
---| 32 WRF_REQUEST_ALL_MOVEMENT_VARIATION_ANIMS
|
|
---| 31 WRF_REQUEST_ALL_ANIMS
|
|
|
|
---@alias ExtraWeaponComponentFlags
|
|
---| 0 WEAPON_COMPONENT_NONE
|
|
---| 1 WEAPON_COMPONENT_FLASH
|
|
---| 2 WEAPON_COMPONENT_SCOPE
|
|
---| 4 WEAPON_COMPONENT_SUPP
|
|
---| 8 WEAPON_COMPONENT_SCLIP2
|
|
---| 16 WEAPON_COMPONENT_GRIP
|
|
|
|
---Load a weapon asset. When called from a thread, it will yield until it has loaded.
|
|
---@param weaponType string | number
|
|
---@param timeout number? Approximate milliseconds to wait for the asset to load. Default is 1000.
|
|
---@param weaponResourceFlags WeaponResourceFlags? Default is 31.
|
|
---@param extraWeaponComponentFlags ExtraWeaponComponentFlags? Default is 0.
|
|
---@return string | number? weaponType
|
|
function lib.requestWeaponAsset(weaponType, timeout, weaponResourceFlags, extraWeaponComponentFlags)
|
|
if HasWeaponAssetLoaded(weaponType) then return weaponType end
|
|
|
|
local weaponTypeType = type(weaponType) --kekw
|
|
|
|
if weaponTypeType ~= 'string' and weaponTypeType ~= 'number' then
|
|
error(("expected weaponType to have type 'string' or 'number' (received %s)"):format(weaponTypeType))
|
|
end
|
|
|
|
if weaponResourceFlags and type(weaponResourceFlags) ~= 'number' then
|
|
error(("expected weaponResourceFlags to have type 'number' (received %s)"):format(type(weaponResourceFlags)))
|
|
end
|
|
|
|
if extraWeaponComponentFlags and type(extraWeaponComponentFlags) ~= 'number' then
|
|
error(("expected extraWeaponComponentFlags to have type 'number' (received %s)"):format(type(extraWeaponComponentFlags)))
|
|
end
|
|
|
|
RequestWeaponAsset(weaponType, weaponResourceFlags or 31, extraWeaponComponentFlags or 0)
|
|
|
|
if not coroutine.isyieldable() then return weaponType end
|
|
|
|
return lib.waitFor(function()
|
|
if HasWeaponAssetLoaded(weaponType) then return weaponType end
|
|
end, ("failed to load weaponType '%s'"):format(weaponType), timeout)
|
|
end
|
|
|
|
return lib.requestWeaponAsset
|