176 lines
5.1 KiB
Lua
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]] |