Files
Elite-Gaming-FiveM/resources/ulc/client/c_hud.lua
T
2025-01-28 07:05:49 -08:00

299 lines
7.4 KiB
Lua

-- MAIN FUNCTIONS --
function ULC:PopulateButtons(_buttons, placeholders)
--print("Populating buttons")
local buttons = _buttons
if placeholders then
buttons = {
{ label = 'TEST STAGE', extra = 1, color = 'green', enabled = true },
{ label = 'TEST STAGE', extra = 2, color = 'blue', enabled = false },
{ label = 'TEST STAGE', extra = 3, color = 'blue', enabled = false },
{ label = 'TEST STAGE', extra = 4, color = 'blue', enabled = true },
{ label = 'test stage', extra = 5, color = 'red', enabled = true }
}
end
local buttonsToSend = {}
for _, v in pairs(buttons) do
local thisButton = {}
local thisState = false
if IsVehicleExtraTurnedOn(MyVehicle, v.extra) then thisState = true end
thisButton.extra = v.extra
thisButton.enabled = thisState
thisButton.color = v.color or 'green'
thisButton.label = string.upper(v.label)
thisButton.numKey = v.key
--print("Sending button: " .. json.encode(thisButton))
table.insert(buttonsToSend, thisButton)
end
SendNUIMessage({
type = 'populateButtons',
buttons = buttonsToSend
})
end
-- deprecated in exchange for "SetButtons"
function ULC:SetButton(extra, enabled)
local newState
if enabled == 0 then
newState = true
elseif enabled == 1 then
newState = false
end
SendNUIMessage({
type = 'setButton',
extra = extra,
newState = newState
})
end
function ULC:SetButtons(buttonStates)
-- print("Setting buttons", json.encode(buttonStates))
-- go through the buttons and replace newState with a boolean
-- newState = 1 means false, 0 means true
for k, v in pairs(buttonStates) do
if v.newState == 1 then
v.newState = false
elseif v.newState == 0 then
v.newState = true
end
end
SendNUIMessage({
type = 'setButtons',
buttonStates = buttonStates
})
end
-----------------
-- UI SETTINGS --
-----------------
function ULC:SetDisplay(bool)
if bool then
SendNUIMessage({
type = 'showHUD',
})
else
SendNUIMessage({
type = 'hideHUD',
})
end
end
function ULC:SetPosition(x, y)
SendNUIMessage({
type = 'setPosition',
x = x,
y = y
})
end
function ULC:SetScale(float)
SendNUIMessage({
type = 'setScale',
scale = float
})
end
-- TODO this is unused in game, should be in menu
function ULC:SetUseLeftAnchor(bool)
SendNUIMessage({
type = 'setAnchor',
bool = bool
})
end
function ULC:SetHudDisabled(bool)
SendNUIMessage({
type = 'setHudDisabled',
bool = bool
})
end
function ULC:SetHelpDisplay(bool)
if bool then
SendNUIMessage({ type = 'showHelp' })
else
SendNUIMessage({ type = 'hideHelp' })
end
end
----------
-- MENU --
----------
-- TODO set this up in js
function ULC:SetMenuDisplay(bool)
--print("Client setting display", bool)
if bool then
SendNUIMessage({
type = 'showMenu',
})
else
SendNUIMessage({
type = 'hideHideMenu',
})
end
end
----------------------
-- USER PREFERENCES --
----------------------
print("[ULC] Client Storage Loaded")
ClientPrefs = {}
local function loadUserPrefs()
-- if prefs already exist
local prefsExist = GetResourceKvpString('ulc')
if prefsExist == "exists" then
print("[ULC] Loading prefs")
-- load
ClientPrefs.hideUi = GetResourceKvpInt("ulc:hideUi")
ClientPrefs.x = GetResourceKvpInt("ulc:x")
ClientPrefs.y = GetResourceKvpInt("ulc:y")
ClientPrefs.scale = GetResourceKvpFloat("ulc:scale")
ClientPrefs.useLeftAnchor = GetResourceKvpString("ulc:useLeftAnchor")
else
print("[ULC] Creating prefs")
-- set defaults
SetResourceKvp('ulc', "exists")
SetResourceKvpInt('ulc:x', 0)
SetResourceKvpInt('ulc:y', 0)
SetResourceKvpFloat('ulc:scale', 1.0)
SetResourceKvpInt('ulc:hideUi', 0)
SetResourceKvp('ulc:useLeftAnchor', 'false')
loadUserPrefs()
Wait(5000)
TriggerEvent('chat:addMessage', {
color = { 0, 153, 204 },
multiline = false,
args = { "ULC", "^4This server uses ULC! Type /ulc to view settings and adjust the HUD!" }
})
end
end
loadUserPrefs()
-- use the values
CreateThread(function()
--print("CLIENT PREF DISABLED =", ClientPrefs.hideUi)
Wait(1000)
-- positioning
if ClientPrefs.x then
--print("Loaded position from kvp: ", ClientPrefs.x, ClientPrefs.y)
ULC:SetPosition(ClientPrefs.x, ClientPrefs.y)
end
if ClientPrefs.scale then
-- print("Loaded saved scale from kvp: " .. ClientPrefs.scale)
ULC:SetScale(ClientPrefs.scale + 0.0)
end
if ClientPrefs.hideUi then
-- print("Loaded disabled HUD kvp: " .. ClientPrefs.hideUi)
ULC:SetHudDisabled(ClientPrefs.hideUi)
end
if ClientPrefs.useLeftAnchor then
-- print("Loaded useLeftAnchor from kvp", ClientPrefs.useLeftAnchor)
ULC:SetUseLeftAnchor(ClientPrefs.useLeftAnchor)
end
end)
--------------
-- COMMANDS --
--------------
RegisterCommand('ulc', function()
if not MyVehicle then
ULC:PopulateButtons({}, true)
ULC:SetDisplay(true)
end
ULC:SetMenuDisplay(true)
if MyVehicle then
ULC:SetHelpDisplay(true)
end
SetNuiFocus(true, true)
end)
TriggerEvent('chat:addSuggestion', '/ulc', 'Enables dragging ULC HUD and shows settings menu and controls.', {
})
RegisterCommand("ulcReset", function()
DeleteResourceKvp("ulc")
loadUserPrefs()
end)
TriggerEvent('chat:addSuggestion', '/ulcReset', 'Resets all saved ULC settings to defaults.', {
})
-- NUI CALLBACKS --
RegisterNUICallback("savePosition", function(data, cb)
--print("NUI Setting position", data.newX, data.newY, "type = ", type(data.newX))
SetResourceKvpInt('ulc:x', data.newX)
SetResourceKvpInt('ulc:y', data.newY)
cb({ success = true })
end)
RegisterNUICallback("saveScale", function(data, cb)
--print("NUI Setting Scale " .. data.scale + 0.0)
SetResourceKvpFloat('ulc:scale', data.scale + 0.0)
cb({ success = true })
end)
RegisterNUICallback("saveAnchor", function(data, cb)
--print("NUI Setting Anchor ", data.useLeftAnchor)
SetResourceKvp('ulc:useLeftAnchor', data.useLeftAnchor)
cb({ success = true })
end)
RegisterNUICallback("focusGame", function(data, cb)
ULC:SetMenuDisplay(false)
SetNuiFocus(false, false)
ULC:SetHelpDisplay(false)
if not MyVehicle then
ULC:SetDisplay(false)
end
cb({ success = true })
end)
RegisterNUICallback("setHudDisabled", function(data, cb)
--print("NUI Setting HUD Disabled ", data.hudDisabled)
if not data.hudDisabled then
--print("Set HUD enabled")
if MyVehicle then
ULC:SetDisplay(true)
end
if #ClientPrefs > 0 then
ClientPrefs.hideUi = 0
--print("Are we here?")
end
SetResourceKvpInt('ulc:hideUi', 0)
else
--print("Set HUD disabled")
ULC:SetDisplay(false)
if #ClientPrefs > 0 then
ClientPrefs.hideUi = 1
--print("Are we here?")
end
SetResourceKvpInt('ulc:hideUi', 1)
end
cb({ success = true })
end)