--- --- 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