Files
2021-12-03 01:05:09 +00:00

176 lines
5.1 KiB
Lua

--[[GUI = {}
Menu = {}
GUI.maxVisOptions = 21
GUI.titleText = {0, 0, 0, 255, 1}
GUI.titleRect = {0, 128, 255, 255}
GUI.optionText = {255, 255, 255, 255, 6}
GUI.optionRect = {0, 128, 255, 120}
GUI.scroller = {127, 140, 140, 240}
local menuX = 0.125
local selectPressed = false
local leftPressed = false
local rightPressed = false
local currentOption = 1
local optionCount = 0
function tablelength(T)
local count = 0
for _ in pairs(T) do count = count + 1 end
return count
end
function GUI.Text(text, color, position, size, center)
SetTextCentre(center)
SetTextColour(color[1], color[2], color[3], color[4])
SetTextFont(1)
SetTextScale(size[1], size[2])
Citizen.InvokeNative(0x61BB1D9B3A95D802, 7)
SetTextEntry("STRING")
AddTextComponentString(text)
DrawText(position[1], position[2])
end
function GUI.Rect(color, position, size)
Citizen.InvokeNative(0x61BB1D9B3A95D802, 6)
DrawRect(position[1], position[2], size[1], size[2], color[1], color[2], color[3], color[4])
end
function Menu.Title(title)
GUI.Text(title, GUI.titleText, {menuX, 0.110}, {0.85, 0.85}, true)
GUI.Rect(GUI.titleRect, {menuX, 0.1340}, {0.23, 0.055})
end
function Menu.Option(option)
optionCount = optionCount + 1
local thisOption = nil
if(currentOption == optionCount) then
FloatIntArray = false
thisOption = true
else
thisOption = false
end
if(currentOption <= GUI.maxVisOptions and optionCount <= GUI.maxVisOptions) then
GUI.Text(option, GUI.optionText, {menuX - 0.1, optionCount * 0.035 + 0.125}, {0.5, 0.5 }, false)
GUI.Rect(GUI.optionRect, { menuX, optionCount * 0.035 + 0.1415 }, { 0.23, 0.035 })
if(thisOption) then
GUI.Rect(GUI.scroller, { menuX, optionCount * 0.035 + 0.1415 }, { 0.23, 0.035 })
end
elseif (optionCount > currentOption - GUI.maxVisOptions and optionCount <= currentOption) then
GUI.Text(option, GUI.optionText, { menuX - 0.1, optionCount - (currentOption - GUI.maxVisOptions) * 0.035 + 0.125 }, { 0.5, 0.5 }, false);
GUI.Rect(GUI.optionRect, { menuX, optionCount - (currentOption - GUI.maxVisOptions) * 0.035+0.1415 }, { 0.23, 0.035 });
if(thisOption) then
GUI.Rect(GUI.scroller, { menuX, optionCount - (currentOption - maxVisOptions) * 0.035 + 0.1415 }, { 0.23, 0.035 })
end
end
if (optionCount == currentOption and selectPressed) then
return true
end
return false
end
function Menu.Int(option, int, min, max, cb)
Menu.Option(option)
if (optionCount == currentOption) then
FloatIntArray = true
if (leftPressed) then
if (int == min) then
int = max
elseif (int > min) then
int = int - 1
end
end
if (rightPressed) then
if (int == max) then
int = min
elseif (int < max) then
int = int + 1
end
end
end
if (currentOption <= GUI.maxVisOptions and optionCount <= GUI.maxVisOptions) then
GUI.Text("< " .. tostring(int) .. " >", GUI.optionText, { menuX + 0.068, optionCount * 0.035 + 0.125 }, { 0.5, 0.5 }, true)
elseif (optionCount > currentOption - GUI.maxVisOptions and optionCount <= currentOption) then
GUI.Text("< " .. tostring(int) .. " >", GUI.optionText, { menuX + 0.068, optionCount - (currentOption - maxVisOptions) * 0.035 + 0.125 }, { 0.5, 0.5 }, true)
end
if (optionCount == currentOption and selectPressed) then
cb(int)
return true
elseif (optionCount == currentOption and leftPressed) then
cb(int)
return true
elseif (optionCount == currentOption and rightPressed) then
cb(int)
return true
end
return false
end
function Menu.Bool(option, bool, cb)
Menu.Option(option)
if(currentOption <= GUI.maxVisOptions and optionCount <= GUI.maxVisOptions) then
if(bool) then
GUI.Text("~g~ON", GUI.optionText, { menuX + 0.068, optionCount * 0.035 + 0.125 }, { 0.5, 0.5 }, true)
else
GUI.Text("~r~OFF", GUI.optionText, { menuX + 0.068, optionCount * 0.035 + 0.125 }, { 0.5, 0.5 }, true)
end
elseif(optionCount > currentOption - GUI.maxVisOptions and optionCount <= currentOption) then
if(bool) then
GUI.Text("~g~ON", GUI.optionText, { menuX + 0.068, optionCount - (currentOption - GUI.maxVisOptions) * 0.035 + 0.125 }, { 0.5, 0.5 }, true)
else
GUI.Text("~r~OFF", GUI.optionText, { menuX + 0.068, optionCount - (currentOption - GUI.maxVisOptions) * 0.035 + 0.125 }, { 0.5, 0.5 }, true)
end
end
if (optionCount == currentOption and selectPressed) then
cb(not bool)
return true
end
return false
end
function Menu.updateSelection()
selectPressed = false;
leftPressed = false;
rightPressed = false;
if IsDisabledControlJustPressed(1, 173) then --Down
if(currentOption < optionCount) then
currentOption = currentOption + 1
else
currentOption = 1
end
elseif IsDisabledControlJustPressed(1, 172) then --Up
if(currentOption > 1) then
currentOption = currentOption - 1
else
currentOption = optionCount
end
elseif IsDisabledControlJustPressed(1, 174) then --Left
leftPressed = true
elseif IsDisabledControlJustPressed(1, 175) then --Right
rightPressed = true
elseif IsDisabledControlJustPressed(1, 176) then --Select
selectPressed = true
elseif (currentOption > optionCount) then
currentOption = 1
end
optionCount = 0
end
function round(num, numDecimalPlaces)
local mult = 10^(numDecimalPlaces or 0)
return math.floor(num * mult + 0.5) / mult
end]]