mirror of
https://github.com/jimathy/jim_bridge.git
synced 2026-08-17 22:16:03 +01:00
115 lines
3.4 KiB
Lua
115 lines
3.4 KiB
Lua
|
|
-------------------------------------------------------------
|
||
|
|
-- 3D Text Rendering
|
||
|
|
-------------------------------------------------------------
|
||
|
|
|
||
|
|
--- Draws 3D text at specified world coordinates.
|
||
|
|
---
|
||
|
|
--- Configures text properties, draws the text, and displays a background rectangle behind it.
|
||
|
|
---
|
||
|
|
--- @param coord table A vector3 with x, y, and z coordinates.
|
||
|
|
--- @param text string The text to display.
|
||
|
|
--- @param highlight boolean (Optional) If true, highlights parts of the text.
|
||
|
|
---
|
||
|
|
--- @usage
|
||
|
|
--- ```lua
|
||
|
|
--- CreateThread(function()
|
||
|
|
--- while true do
|
||
|
|
--- DrawText3D(vector3(100, 200, 300), "Hello World", true)
|
||
|
|
--- Wait(0)
|
||
|
|
--- end
|
||
|
|
--- end)
|
||
|
|
--- ```
|
||
|
|
function DrawText3D(coord, text, highlight)
|
||
|
|
SetTextScale(0.30, 0.30)
|
||
|
|
SetTextFont(0)
|
||
|
|
SetTextProportional(1)
|
||
|
|
SetTextColour(255, 255, 255, 215)
|
||
|
|
SetTextEntry("STRING")
|
||
|
|
SetTextCentre(true)
|
||
|
|
|
||
|
|
local totalLength = string.len(text)
|
||
|
|
local textMaxLength = 99 -- max 99
|
||
|
|
local text = totalLength > textMaxLength and text:sub(1, totalLength - (totalLength - textMaxLength)) or text
|
||
|
|
AddTextComponentString(highlight and text:gsub("%~w~", "~y~") or text)
|
||
|
|
SetDrawOrigin(coord.x, coord.y, coord.z, 0)
|
||
|
|
DrawText(0.0, 0.0)
|
||
|
|
local count, length = GetLineCountAndMaxLength(text)
|
||
|
|
|
||
|
|
local padding = 0.005
|
||
|
|
local heightFactor = (count / 43) + padding
|
||
|
|
local weightFactor = (length / 150) + padding
|
||
|
|
|
||
|
|
local height = (heightFactor / 2) - padding / 1
|
||
|
|
local width = (weightFactor / 2) - padding / 1
|
||
|
|
|
||
|
|
DrawRect(0.0, height, width, heightFactor, 0, 0, 0, 150)
|
||
|
|
ClearDrawOrigin()
|
||
|
|
end
|
||
|
|
|
||
|
|
--- Calculates the number of lines and the maximum line length from the given text.
|
||
|
|
---
|
||
|
|
--- @param text string The text to analyze.
|
||
|
|
--- @return number, number The line count and maximum line length.
|
||
|
|
---
|
||
|
|
--- @usage
|
||
|
|
--- ```lua
|
||
|
|
--- local count, maxLen = GetLineCountAndMaxLength("Hello World")
|
||
|
|
--- ```
|
||
|
|
function GetLineCountAndMaxLength(text)
|
||
|
|
local lineCount, maxLength = 0, 0
|
||
|
|
for line in text:gmatch("[^\n]+") do
|
||
|
|
lineCount += 1
|
||
|
|
local lineLength = string.len(line)
|
||
|
|
if lineLength > maxLength then
|
||
|
|
maxLength = lineLength
|
||
|
|
end
|
||
|
|
end
|
||
|
|
if lineCount == 0 then lineCount = 1 end
|
||
|
|
return lineCount, maxLength
|
||
|
|
end
|
||
|
|
|
||
|
|
-------------------------------------------------------------
|
||
|
|
-- Additional UI Helpers
|
||
|
|
-------------------------------------------------------------
|
||
|
|
|
||
|
|
--- Displays a help message on the screen.
|
||
|
|
---
|
||
|
|
--- @param text string The message to display.
|
||
|
|
---
|
||
|
|
--- @usage
|
||
|
|
--- ```lua
|
||
|
|
--- DisplayHelpMsg("Press E to interact")
|
||
|
|
--- ```
|
||
|
|
function DisplayHelpMsg(text)
|
||
|
|
BeginTextCommandDisplayHelp("STRING")
|
||
|
|
AddTextComponentScaleform(text)
|
||
|
|
EndTextCommandDisplayHelp(0, true, false, -1)
|
||
|
|
end
|
||
|
|
|
||
|
|
--- Displays a "Saving/Loading" spinner with a custom message.
|
||
|
|
---
|
||
|
|
--- @param text string The message to display alongside the spinner.
|
||
|
|
---
|
||
|
|
--- @usage
|
||
|
|
--- ```lua
|
||
|
|
--- displaySpinner("Saving data...")
|
||
|
|
--- ```
|
||
|
|
function displaySpinner(text)
|
||
|
|
BeginTextCommandBusyspinnerOn('STRING')
|
||
|
|
AddTextComponentSubstringPlayerName(text)
|
||
|
|
EndTextCommandBusyspinnerOn(4)
|
||
|
|
end
|
||
|
|
|
||
|
|
--- Stops the "Saving/Loading" spinner.
|
||
|
|
---
|
||
|
|
--- This function should only be called client-side.
|
||
|
|
---
|
||
|
|
--- @usage
|
||
|
|
--- ```lua
|
||
|
|
--- stopSpinner()
|
||
|
|
--- ```
|
||
|
|
function stopSpinner()
|
||
|
|
if not isServer() then
|
||
|
|
BusyspinnerOff()
|
||
|
|
end
|
||
|
|
end
|