156 lines
4.3 KiB
Lua
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
|