Scripts/resources/[standalone]/RageUI/menu/Menu.lua
2024-12-29 21:02:43 +01:00

386 lines
11 KiB
Lua

---
--- Generated by EmmyLua(https://github.com/EmmyLua)
--- Created by Dylan Malandain.
--- DateTime: 21/04/2019 21:20
---
---CreateMenu
---@param Title string
---@param Subtitle string
---@param X number
---@param Y number
---@param TextureDictionary string
---@param TextureName string
---@param R number
---@param G number
---@param B number
---@param A number
---@return RageUIMenus
---@public
function RageUI.CreateMenu(Title, Subtitle, X, Y, TextureDictionary, TextureName, R, G, B, A)
---@type table
local Menu = {}
Menu.Display = {};
Menu.InstructionalButtons = {}
Menu.Display.Header = true;
Menu.Display.Glare = true;
Menu.Display.Subtitle = true;
Menu.Display.Background = true;
Menu.Display.Navigation = true;
Menu.Display.InstructionalButton = true;
Menu.Title = Title or ""
Menu.TitleFont = 6
Menu.TitleScale = 1.0
Menu.Subtitle = string.upper(Subtitle) or nil
Menu.SubtitleHeight = -37
Menu.Description = nil
Menu.DescriptionHeight = RageUI.Settings.Items.Description.Background.Height
Menu.X = X or 0
Menu.Y = Y or 0
Menu.Parent = nil
Menu.WidthOffset = RageUI.UI.Style[RageUI.UI.Current].Width
Menu.Open = false
Menu.Controls = RageUI.Settings.Controls
Menu.Index = 1
Menu.Sprite = { Dictionary = TextureDictionary or "commonmenu", Texture = TextureName or "interaction_bgd", Color = { R = R, G = G, B = B, A = A } }
Menu.Rectangle = nil
Menu.Pagination = { Minimum = 1, Maximum = 10, Total = 10 }
Menu.Safezone = true
Menu.SafeZoneSize = nil
Menu.EnableMouse = false
Menu.Options = 0
Menu.Closable = true
Menu.InstructionalScaleform = RequestScaleformMovie("INSTRUCTIONAL_BUTTONS")
Menu.CursorStyle = 1
if string.starts(Menu.Subtitle, "~") then
Menu.PageCounterColour = string.sub(Menu.Subtitle, 1, 3)
else
Menu.PageCounterColour = ""
end
if Menu.Subtitle ~= "" then
local SubtitleLineCount = GetLineCount(Menu.Subtitle, Menu.X + RageUI.Settings.Items.Subtitle.Text.X, Menu.Y + RageUI.Settings.Items.Subtitle.Text.Y, 0, RageUI.Settings.Items.Subtitle.Text.Scale, 245, 245, 245, 255, nil, false, false, RageUI.Settings.Items.Subtitle.Background.Width + Menu.WidthOffset)
if SubtitleLineCount > 1 then
Menu.SubtitleHeight = 18 * SubtitleLineCount
else
Menu.SubtitleHeight = 0
end
end
CreateThread(function()
if not HasScaleformMovieLoaded(Menu.InstructionalScaleform) then
Menu.InstructionalScaleform = RequestScaleformMovie("INSTRUCTIONAL_BUTTONS")
while not HasScaleformMovieLoaded(Menu.InstructionalScaleform) do
Wait(0)
end
end
end)
CreateThread(function()
local ScaleformMovie = RequestScaleformMovie("MP_MENU_GLARE")
while not HasScaleformMovieLoaded(ScaleformMovie) do
Wait(0)
end
end)
return setmetatable(Menu, RageUI.Menus)
end
---CreateSubMenu
---@param ParentMenu function
---@param Title string
---@param Subtitle string
---@param X number
---@param Y number
---@param TextureDictionary string
---@param TextureName string
---@param R number
---@param G number
---@param B number
---@param A number
---@return RageUIMenus
---@public
function RageUI.CreateSubMenu(ParentMenu, Title, Subtitle, X, Y, TextureDictionary, TextureName, R, G, B, A)
if ParentMenu ~= nil then
if ParentMenu() then
local Menu = RageUI.CreateMenu(Title or ParentMenu.Title, string.upper(Subtitle) or string.upper(ParentMenu.Subtitle), X or ParentMenu.X, Y or ParentMenu.Y)
Menu.Parent = ParentMenu
Menu.WidthOffset = ParentMenu.WidthOffset
Menu.Safezone = ParentMenu.Safezone
if ParentMenu.Sprite then
Menu.Sprite = { Dictionary = TextureDictionary or ParentMenu.Sprite.Dictionary, Texture = TextureName or ParentMenu.Sprite.Texture, Color = { R = R or ParentMenu.Sprite.Color.R, G = G or ParentMenu.Sprite.Color.G, B = B or ParentMenu.Sprite.Color.B, A = A or ParentMenu.Sprite.Color.A } }
else
Menu.Rectangle = ParentMenu.Rectangle
end
return setmetatable(Menu, RageUI.Menus)
else
return nil
end
else
return nil
end
end
function RageUI.Menus:DisplayHeader(boolean)
self.Display.Header = boolean;
return self.Display.Header;
end
function RageUI.Menus:DisplayGlare(boolean)
self.Display.Glare = boolean;
return self.Display.Glare;
end
function RageUI.Menus:DisplaySubtitle(boolean)
self.Display.Subtitle = boolean;
return self.Display.Subtitle;
end
function RageUI.Menus:DisplayNavigation(boolean)
self.Display.Navigation = boolean;
return self.Display.Navigation;
end
function RageUI.Menus:DisplayInstructionalButton(boolean)
self.Display.InstructionalButton = boolean;
return self.Display.InstructionalButton;
end
---SetTitle
---@param Title string
---@return nil
---@public
function RageUI.Menus:SetTitle(Title)
self.Title = Title
end
function RageUI.Menus:SetStyleSize(Value)
local witdh
if Value >= 0 and Value <= 100 then
witdh = Value
else
witdh = 100
end
self.WidthOffset = witdh
end
---GetStyleSize
---@return any
---@public
function RageUI.Menus:GetStyleSize()
if (self.WidthOffset == 100) then
return "RageUI"
elseif (self.WidthOffset == 0) then
return "NativeUI";
else
return self.WidthOffset;
end
end
---SetStyleSize
---@param Int string
---@return void
---@public
function RageUI.Menus:SetCursorStyle(Int)
self.CursorStyle = Int or 1 or 0
SetMouseCursorSprite(Int)
end
---ResetCursorStyle
---@return void
---@public
function RageUI.Menus:ResetCursorStyle()
self.CursorStyle = 1
SetMouseCursorSprite(1)
end
---UpdateCursorStyle
---@return void
---@public
function RageUI.Menus:UpdateCursorStyle()
SetMouseCursorSprite(self.CursorStyle)
end
---RefreshIndex
---@return void
---@public
function RageUI.Menus:RefreshIndex()
self.Index = 1
end
---SetSubtitle
---@param Subtitle string
---@return nil
---@public
function RageUI.Menus:SetSubtitle(Subtitle)
self.Subtitle = string.upper(Subtitle) or string.upper(self.Subtitle)
if string.starts(self.Subtitle, "~") then
self.PageCounterColour = string.sub(self.Subtitle, 1, 3)
else
self.PageCounterColour = ""
end
if self.Subtitle ~= "" then
local SubtitleLineCount = GetLineCount(self.Subtitle, self.X + RageUI.Settings.Items.Subtitle.Text.X, self.Y + RageUI.Settings.Items.Subtitle.Text.Y, 0, RageUI.Settings.Items.Subtitle.Text.Scale, 245, 245, 245, 255, nil, false, false, RageUI.Settings.Items.Subtitle.Background.Width + self.WidthOffset)
if SubtitleLineCount > 1 then
self.SubtitleHeight = 18 * SubtitleLineCount
else
self.SubtitleHeight = 0
end
else
self.SubtitleHeight = -37
end
end
---PageCounter
---@param Subtitle string
---@return nil
---@public
function RageUI.Menus:SetPageCounter(Subtitle)
self.PageCounter = Subtitle
end
---EditSpriteColor
---@param Colors table
---@return nil
---@public
function RageUI.Menus:EditSpriteColor(color)
if self.Sprite.Dictionary == "commonmenu" then
self.Sprite.Color = color
end
end
---SetPosition
---@param X number
---@param Y number
---@return nil
---@public
function RageUI.Menus:SetPosition(X, Y)
self.X = tonumber(X) or self.X
self.Y = tonumber(Y) or self.Y
end
---SetTotalItemsPerPage
---@param Value number
---@return nil
---@public
function RageUI.Menus:SetTotalItemsPerPage(Value)
self.Pagination.Total = tonumber(Value) or self.Pagination.Total
end
---SetRectangleBanner
---@param R number
---@param G number
---@param B number
---@param A number
---@return nil
---@public
function RageUI.Menus:SetRectangleBanner(R, G, B, A)
self.Rectangle = { R = tonumber(R) or 255, G = tonumber(G) or 255, B = tonumber(B) or 255, A = tonumber(A) or 255 }
self.Sprite = nil
end
---SetSpriteBanner
---@param TextureDictionary string
---@param Texture string
---@return nil
---@public
function RageUI.Menus:SetSpriteBanner(TextureDictionary, Texture)
self.Sprite = { Dictionary = TextureDictionary or "commonmenu", Texture = Texture or "interaction_bgd" }
self.Rectangle = nil
end
function RageUI.Menus:Closable(boolean)
if type(boolean) == "boolean" then
self.Closable = boolean
else
error("Type is not boolean")
end
end
function RageUI.Menus:AddInstructionButton(button)
if type(button) == "table" and #button == 2 then
table.insert(self.InstructionalButtons, button)
self.UpdateInstructionalButtons(true);
end
end
function RageUI.Menus:RemoveInstructionButton(button)
if type(button) == "table" then
for i = 1, #self.InstructionalButtons do
if button == self.InstructionalButtons[i] then
table.remove(self.InstructionalButtons, i)
self.UpdateInstructionalButtons(true);
break
end
end
else
if tonumber(button) then
if self.InstructionalButtons[tonumber(button)] then
table.remove(self.InstructionalButtons, tonumber(button))
self.UpdateInstructionalButtons(true);
end
end
end
end
function RageUI.Menus:UpdateInstructionalButtons(Visible)
if not Visible then
return
end
BeginScaleformMovieMethod(self.InstructionalScaleform, "CLEAR_ALL")
EndScaleformMovieMethod()
BeginScaleformMovieMethod(self.InstructionalScaleform, "TOGGLE_MOUSE_BUTTONS")
ScaleformMovieMethodAddParamInt(0)
EndScaleformMovieMethod()
BeginScaleformMovieMethod(self.InstructionalScaleform, "CREATE_CONTAINER")
EndScaleformMovieMethod()
BeginScaleformMovieMethod(self.InstructionalScaleform, "SET_DATA_SLOT")
ScaleformMovieMethodAddParamInt(0)
PushScaleformMovieMethodParameterButtonName(GetControlInstructionalButton(2, 176, 0))
PushScaleformMovieMethodParameterString(GetLabelText("HUD_INPUT2"))
EndScaleformMovieMethod()
if self.Closable then
BeginScaleformMovieMethod(self.InstructionalScaleform, "SET_DATA_SLOT")
ScaleformMovieMethodAddParamInt(1)
PushScaleformMovieMethodParameterButtonName(GetControlInstructionalButton(2, 177, 0))
PushScaleformMovieMethodParameterString(GetLabelText("HUD_INPUT3"))
EndScaleformMovieMethod()
end
local count = 2
if (self.InstructionalButtons ~= nil) then
for i = 1, #self.InstructionalButtons do
if self.InstructionalButtons[i] then
if #self.InstructionalButtons[i] == 2 then
BeginScaleformMovieMethod(self.InstructionalScaleform, "SET_DATA_SLOT")
ScaleformMovieMethodAddParamInt(count)
PushScaleformMovieMethodParameterButtonName(self.InstructionalButtons[i][1])
PushScaleformMovieMethodParameterString(self.InstructionalButtons[i][2])
EndScaleformMovieMethod()
count = count + 1
end
end
end
end
BeginScaleformMovieMethod(self.InstructionalScaleform, "DRAW_INSTRUCTIONAL_BUTTONS")
ScaleformMovieMethodAddParamInt(-1)
EndScaleformMovieMethod()
end