Scripts/resources/[standalone]/RageUI/components/Text.lua
2024-12-29 21:02:43 +01:00

156 lines
4.3 KiB
Lua

---StringToArray
---
--- Reference : Frazzle <3
---
---@param str string
function StringToArray(str)
local charCount = #str
local strCount = math.ceil(charCount / 99)
local strings = {}
for i = 1, strCount do
local start = (i - 1) * 99 + 1
local clamp = math.clamp(#string.sub(str, start), 0, 99)
local finish = ((i ~= 1) and (start - 1) or 0) + clamp
strings[i] = string.sub(str, start, finish)
end
return strings
end
---AddText
---
--- Reference : Frazzle <3
---
---@param str string
function AddText(str)
local str = tostring(str)
local charCount = #str
if charCount < 100 then
AddTextComponentSubstringPlayerName(str)
else
local strings = StringToArray(str)
for s = 1, #strings do
AddTextComponentSubstringPlayerName(strings[s])
end
end
end
---GetLineCount
---
--- Reference : Frazzle <3
---
---@param Text string
---@param X number
---@param Y number
---@param Font number
---@param Scale number
---@param R number
---@param G number
---@param B number
---@param A number
---@param Alignment string
---@param DropShadow boolean
---@param Outline boolean
---@param WordWrap number
---@return function
---@public
function GetLineCount(Text, X, Y, Font, Scale, R, G, B, A, Alignment, DropShadow, Outline, WordWrap)
---@type table
local Text, X, Y = tostring(Text), (tonumber(X) or 0) / 1920, (tonumber(Y) or 0) / 1080
SetTextFont(Font or 0)
SetTextScale(1.0, Scale or 0)
SetTextColour(tonumber(R) or 255, tonumber(G) or 255, tonumber(B) or 255, tonumber(A) or 255)
if DropShadow then
SetTextDropShadow()
end
if Outline then
SetTextOutline()
end
if Alignment ~= nil then
if Alignment == 1 or Alignment == "Center" or Alignment == "Centre" then
SetTextCentre(true)
elseif Alignment == 2 or Alignment == "Right" then
SetTextRightJustify(true)
end
end
if tonumber(WordWrap) and tonumber(WordWrap) ~= 0 then
if Alignment == 1 or Alignment == "Center" or Alignment == "Centre" then
SetTextWrap(X - ((WordWrap / 1920) / 2), X + ((WordWrap / 1920) / 2))
elseif Alignment == 2 or Alignment == "Right" then
SetTextWrap(0, X)
else
SetTextWrap(X, X + (WordWrap / 1920))
end
else
if Alignment == 2 or Alignment == "Right" then
SetTextWrap(0, X)
end
end
BeginTextCommandLineCount("CELL_EMAIL_BCON")
AddText(Text)
return GetTextScreenLineCount(X, Y)
end
---RenderText
---
--- Reference : https://github.com/iTexZoz/NativeUILua_Reloaded/blob/master/UIElements/UIResText.lua#L189
---
---@param Text string
---@param X number
---@param Y number
---@param Font number
---@param Scale number
---@param R number
---@param G number
---@param B number
---@param A number
---@param Alignment string
---@param DropShadow boolean
---@param Outline boolean
---@param WordWrap number
---@return nil
---@public
function RenderText(Text, X, Y, Font, Scale, R, G, B, A, Alignment, DropShadow, Outline, WordWrap)
---@type table
local Text, X, Y = tostring(Text), (tonumber(X) or 0) / 1920, (tonumber(Y) or 0) / 1080
SetTextFont(Font or 0)
SetTextScale(1.0, Scale or 0)
SetTextColour(tonumber(R) or 255, tonumber(G) or 255, tonumber(B) or 255, tonumber(A) or 255)
if DropShadow then
SetTextDropShadow()
end
if Outline then
SetTextOutline()
end
if Alignment ~= nil then
if Alignment == 1 or Alignment == "Center" or Alignment == "Centre" then
SetTextCentre(true)
elseif Alignment == 2 or Alignment == "Right" then
SetTextRightJustify(true)
end
end
if tonumber(WordWrap) and tonumber(WordWrap) ~= 0 then
if Alignment == 1 or Alignment == "Center" or Alignment == "Centre" then
SetTextWrap(X - ((WordWrap / 1920) / 2), X + ((WordWrap / 1920) / 2))
elseif Alignment == 2 or Alignment == "Right" then
SetTextWrap(0, X)
else
SetTextWrap(X, X + (WordWrap / 1920))
end
else
if Alignment == 2 or Alignment == "Right" then
SetTextWrap(0, X)
end
end
BeginTextCommandDisplayText("CELL_EMAIL_BCON")
AddText(Text)
EndTextCommandDisplayText(X, Y)
end