199 lines
		
	
	
		
			No EOL
		
	
	
		
			5.7 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
			
		
		
	
	
			199 lines
		
	
	
		
			No EOL
		
	
	
		
			5.7 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
| UIResText = setmetatable({}, UIResText)
 | |
| UIResText.__index = UIResText
 | |
| UIResText.__call = function() return "Text" end
 | |
| 
 | |
| function GetCharacterCount(str)
 | |
|     local characters = 0
 | |
|     for c in str:gmatch("[%z\1-\127\194-\244][\128-\191]*") do
 | |
|         local a = c:byte(1, -1)
 | |
|         if a ~= nil then
 | |
|             characters = characters + 1
 | |
|         end
 | |
|     end
 | |
|     return characters
 | |
| end
 | |
| 
 | |
| function GetByteCount(str)
 | |
|     local bytes = 0
 | |
| 
 | |
|     for c in str:gmatch("[%z\1-\127\194-\244][\128-\191]*") do
 | |
|         local a,b,c,d = c:byte(1, -1)
 | |
|         if a ~= nil then
 | |
|             bytes = bytes + 1
 | |
|         end
 | |
|         if b ~= nil then
 | |
|             bytes = bytes + 1
 | |
|         end
 | |
|         if c ~= nil then
 | |
|             bytes = bytes + 1
 | |
|         end
 | |
|         if d ~= nil then
 | |
|             bytes = bytes + 1
 | |
|         end
 | |
|     end
 | |
|     return bytes
 | |
| end
 | |
| 
 | |
| function AddLongStringForAscii(str)
 | |
|     local maxbytelength = 99
 | |
|     for i = 0, GetCharacterCount(str), 99 do
 | |
|         AddTextComponentSubstringPlayerName(string.sub(str, i, math.min(maxbytelength, GetCharacterCount(str) - i))) --needs changed
 | |
|     end
 | |
| end
 | |
| 
 | |
| function AddLongStringForUtf8(str)
 | |
|     local maxbytelength = 99
 | |
|     local bytecount = GetByteCount(str)
 | |
| 
 | |
|     if bytecount < maxbytelength then
 | |
|         AddTextComponentSubstringPlayerName(str)
 | |
|         return
 | |
|     end
 | |
| 
 | |
|     local startIndex = 0
 | |
| 
 | |
|     for i = 0, GetCharacterCount(str), 1 do
 | |
|         local length = i - startIndex
 | |
|         if GetByteCount(string.sub(str, startIndex, length)) > maxbytelength then
 | |
|             AddTextComponentSubstringPlayerName(string.sub(str, startIndex, length - 1))
 | |
|             i = i - 1
 | |
|             startIndex = startIndex + (length - 1)
 | |
|         end
 | |
|     end
 | |
|     AddTextComponentSubstringPlayerName(string.sub(str, startIndex, GetCharacterCount(str) - startIndex))
 | |
| end 
 | |
| 
 | |
| function AddLongString(str)
 | |
|     local bytecount = GetByteCount(str)
 | |
|     if bytecount == GetCharacterCount(str) then
 | |
|         AddLongStringForAscii(str)
 | |
|     else
 | |
|         AddLongStringForUtf8(str)
 | |
|     end
 | |
| end
 | |
| 
 | |
| function MeasureStringWidthNoConvert(str, font, scale)
 | |
|     BeginTextCommandWidth("STRING")
 | |
|     AddLongString(str)
 | |
|     SetTextFont(font or 0)
 | |
|     SetTextScale(1.0, scale or 0)
 | |
|     return EndTextCommandGetWidth(true)
 | |
| end
 | |
| 
 | |
| function MeasureStringWidth(str, font, scale)
 | |
|     return MeasureStringWidthNoConvert(str, font, scale) * 1920
 | |
| end
 | |
| 
 | |
| function UIResText.New(Text, X, Y, Scale, R, G, B, A, Font, Alignment, DropShadow, Outline, WordWrap)
 | |
| 	local _UIResText = {
 | |
|         _Text = tostring(Text) or "",
 | |
|         X = tonumber(X) or 0,
 | |
|         Y = tonumber(Y) or 0,
 | |
|         Scale = tonumber(Scale) or 0,
 | |
|         _Colour = {R = tonumber(R) or 255, G = tonumber(G) or 255, B = tonumber(B) or 255, A = tonumber(A) or 255},
 | |
|         Font = tonumber(Font) or 0,
 | |
|         Alignment = Alignment or nil,
 | |
|         DropShadow = Dropshadow or nil,
 | |
|         Outline = Outline or nil,
 | |
|         WordWrap = tonumber(WordWrap) or 0,
 | |
|     }
 | |
| 	return setmetatable(_UIResText, UIResText)
 | |
| end
 | |
| 
 | |
| function UIResText:Position(X, Y)
 | |
|     if tonumber(X) and tonumber(Y) then
 | |
|         self.X = tonumber(X)
 | |
|         self.Y = tonumber(Y)
 | |
|     else
 | |
|         return {X = self.X, Y = self.Y}
 | |
|     end
 | |
| end
 | |
| 
 | |
| function UIResText:Colour(R, G, B, A)
 | |
|     if tonumber(R) and tonumber(G) and tonumber(B) and tonumber(A) then
 | |
|         self._Colour.R = tonumber(R)
 | |
|         self._Colour.B = tonumber(B)
 | |
|         self._Colour.G = tonumber(G)
 | |
|         self._Colour.A = tonumber(A)
 | |
|     else
 | |
|         return self._Colour
 | |
|     end
 | |
| end
 | |
| 
 | |
| function UIResText:Text(Text)
 | |
|     if tostring(Text) and Text ~= nil then
 | |
|         self._Text = tostring(Text)
 | |
|     else
 | |
|         return self._Text
 | |
|     end
 | |
| end
 | |
| 
 | |
| function UIResText:Draw()
 | |
|     local Position = self:Position()
 | |
|     Position.X, Position.Y = FormatXWYH(Position.X, Position.Y)
 | |
| 
 | |
|     SetTextFont(self.Font)
 | |
|     SetTextScale(1.0, self.Scale)
 | |
|     SetTextColour(self._Colour.R, self._Colour.G, self._Colour.B, self._Colour.A)
 | |
| 
 | |
|     if self.DropShadow then
 | |
|         SetTextDropShadow()
 | |
|     end
 | |
|     if self.Outline then
 | |
|         SetTextOutline()
 | |
|     end
 | |
| 
 | |
|     if self.Alignment ~= nil then
 | |
|         if self.Alignment == 1 or self.Alignment == "Center" or self.Alignment == "Centre" then
 | |
|             SetTextCentre(true)
 | |
|         elseif self.Alignment == 2 or self.Alignment == "Right" then
 | |
|             SetTextRightJustify(true)
 | |
|             SetTextWrap(0, Position.X)
 | |
|         end
 | |
|     end
 | |
| 
 | |
|     if tonumber(self.WordWrap) then
 | |
|         if tonumber(self.WordWrap) ~= 0 then
 | |
|             SetTextWrap(Position.X, Position.X + (tonumber(self.WordWrap) / Resolution.Width))
 | |
|         end
 | |
|     end
 | |
| 
 | |
|     BeginTextCommandDisplayText("STRING")
 | |
|     AddLongString(self._Text)
 | |
|     EndTextCommandDisplayText(Position.X, Position.Y)
 | |
| end
 | |
| 
 | |
| function RenderText(Text, X, Y, Font, Scale, R, G, B, A, Alignment, DropShadow, Outline, WordWrap)
 | |
|     Text = tostring(Text)
 | |
|     X, Y = FormatXWYH(X, Y)
 | |
|     SetTextFont(Font or 0)
 | |
|     SetTextScale(1.0, Scale or 0)
 | |
|     SetTextColour(R or 255, G or 255, B or 255, 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)
 | |
|             SetTextWrap(0, X)
 | |
|         end
 | |
|     end
 | |
| 
 | |
|     if tonumber(WordWrap) then
 | |
|         if tonumber(WordWrap) ~= 0 then
 | |
|             WordWrap, _ = FormatXWYH(WordWrap, 0)
 | |
|             SetTextWrap(WordWrap, X - WordWrap)
 | |
|         end
 | |
|     end
 | |
| 
 | |
|     BeginTextCommandDisplayText("STRING")
 | |
|     AddLongString(Text)
 | |
|     EndTextCommandDisplayText(X, Y)
 | |
| end | 
