-
-
Save warxander/4ba4c735e594d81f858684809de779fa to your computer and use it in GitHub Desktop.
FiveM Lua Scaleform Module
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
-- https://scaleform.devtesting.pizza/ | |
Scaleform = { } | |
Scaleform.__index = Scaleform | |
local function scaleform_is_valid(scaleform) | |
if not scaleform or scaleform == 0 then | |
Citizen.Trace('Invalid scaleform parameter: '..tostring(scaleform)) | |
return false | |
end | |
return true | |
end | |
local function scaleform_has_loaded(scaleform) | |
if not scaleform or not HasScaleformMovieLoaded(scaleform) then | |
Citizen.Trace('Using not loaded scaleform: '..tostring(scaleform)) | |
return false | |
end | |
return true | |
end | |
local function scaleform_is_int(number) | |
return type(number) == "number" and not string.find(number, '%.') | |
end | |
local function scaleform_render_timed(scaleform, time, renderFunc, ...) | |
if not scaleform_is_valid(scaleform.scaleform) then return end | |
local startTime = GetGameTimer() | |
local transOutTime = 500 | |
while GetTimeDifference(GetGameTimer(), startTime) < time + transOutTime do | |
Citizen.Wait(0) | |
if GetGameTimer() - startTime > time then | |
scaleform:Call('SHARD_ANIM_OUT', 1, 0.33) | |
startTime = startTime + transOutTime | |
while GetGameTimer() - startTime < time + transOutTime do | |
Citizen.Wait(0) | |
renderFunc(scaleform, ...) | |
end | |
break | |
end | |
renderFunc(scaleform, ...) | |
end | |
end | |
function Scaleform:Request(id) | |
if type(id) ~= "string" then | |
Citizen.Trace('Unable to request id: '..tostring(id)) | |
return nil | |
end | |
local object = { } | |
setmetatable(object, Scaleform) | |
object.scaleform = RequestScaleformMovie(id) | |
if not scaleform_is_valid(object.scaleform) then return nil end | |
while not HasScaleformMovieLoaded(object.scaleform) do Citizen.Wait(0) end | |
return object | |
end | |
function Scaleform:Delete() | |
if not scaleform_is_valid(self.scaleform) then return end | |
if not scaleform_has_loaded(self.scaleform) then return end | |
SetScaleformMovieAsNoLongerNeeded(self.scaleform) | |
self.scaleform = nil | |
end | |
function Scaleform:Call(func, ...) | |
if not scaleform_is_valid(self.scaleform) then return end | |
if type(func) ~= "string" then | |
Citizen.Trace('Unable to call scaleform func: '..tostring(func)) | |
return | |
end | |
PushScaleformMovieFunction(self.scaleform, func) | |
local params = { ... } | |
for _, param in ipairs(params) do | |
local paramType = type(param) | |
if paramType == 'string' then | |
PushScaleformMovieFunctionParameterString(param) | |
elseif paramType == 'number' then | |
if scaleform_is_int(param) then | |
PushScaleformMovieFunctionParameterInt(param) | |
else | |
PushScaleformMovieFunctionParameterFloat(param) | |
end | |
elseif paramType == 'boolean' then | |
PushScaleformMovieFunctionParameterBool(param) | |
else | |
Citizen.Trace('Unknown parameter type for scaleform '..tostring(self.scaleform)..': '..tostring(paramType)) | |
return | |
end | |
end | |
PopScaleformMovieFunctionVoid() | |
end | |
function Scaleform:Render(x, y, w, h, r, g, b, a) | |
if not scaleform_is_valid(self.scaleform) then return end | |
DrawScaleformMovie(self.scaleform, x, y, w, h, r or 255, g or 255, b or 255, a or 255) | |
end | |
function Scaleform:RenderFullscreen(r, g, b, a) | |
if not scaleform_is_valid(self.scaleform) then return end | |
DrawScaleformMovieFullscreen(self.scaleform, r or 255, g or 255, b or 255, a or 255) | |
end | |
function Scaleform:RenderTimed(time, x, y, w, h, r, g, b, a) | |
scaleform_render_timed(self, time, self.Render, x, y, w, h, r, g, b, a) | |
end | |
function Scaleform:RenderFullscreenTimed(time, r, g, b, a) | |
scaleform_render_timed(self, time, self.RenderFullscreen, r, g, b, a) | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment