101 lines
6.1 KiB
Lua
101 lines
6.1 KiB
Lua
|
---@type table
|
||
|
local Colour = {
|
||
|
Background = { Dictionary = "commonmenu", Texture = "gradient_bgd", Y = 4, Width = 431, Height = 112 },
|
||
|
LeftArrow = { Dictionary = "commonmenu", Texture = "arrowleft", X = 7.5, Y = 15, Width = 30, Height = 30 },
|
||
|
RightArrow = { Dictionary = "commonmenu", Texture = "arrowright", X = 393.5, Y = 15, Width = 30, Height = 30 },
|
||
|
Header = { X = 215.5, Y = 15, Scale = 0.35 },
|
||
|
Box = { X = 15, Y = 55, Width = 44.5, Height = 44.5 },
|
||
|
SelectedRectangle = { X = 15, Y = 47, Width = 44.5, Height = 8 },
|
||
|
}
|
||
|
|
||
|
---ColourPanel
|
||
|
---@param Title string
|
||
|
---@param Colours thread
|
||
|
---@param MinimumIndex number
|
||
|
---@param CurrentIndex number
|
||
|
---@param Callback function
|
||
|
---@return nil
|
||
|
---@public
|
||
|
function RageUI.ColourPanel(Title, Colours, MinimumIndex, CurrentIndex, Action, Index)
|
||
|
|
||
|
---@type table
|
||
|
local CurrentMenu = RageUI.CurrentMenu;
|
||
|
|
||
|
if CurrentMenu ~= nil then
|
||
|
if CurrentMenu() and (CurrentMenu.Index == Index) then
|
||
|
|
||
|
---@type number
|
||
|
local Maximum = (#Colours > 9) and 9 or #Colours
|
||
|
|
||
|
---@type boolean
|
||
|
local Hovered = RageUI.IsMouseInBounds(CurrentMenu.X + Colour.Box.X + CurrentMenu.SafeZoneSize.X + (CurrentMenu.WidthOffset / 2), CurrentMenu.Y + Colour.Box.Y + CurrentMenu.SafeZoneSize.Y + CurrentMenu.SubtitleHeight + RageUI.ItemOffset, (Colour.Box.Width * Maximum), Colour.Box.Height)
|
||
|
|
||
|
---@type number
|
||
|
local LeftArrowHovered = RageUI.IsMouseInBounds(CurrentMenu.X + Colour.LeftArrow.X + CurrentMenu.SafeZoneSize.X + (CurrentMenu.WidthOffset / 2), CurrentMenu.Y + Colour.LeftArrow.Y + CurrentMenu.SafeZoneSize.Y + CurrentMenu.SubtitleHeight + RageUI.ItemOffset, Colour.LeftArrow.Width, Colour.LeftArrow.Height)
|
||
|
|
||
|
---@type number
|
||
|
local RightArrowHovered = RageUI.IsMouseInBounds(CurrentMenu.X + Colour.RightArrow.X + CurrentMenu.SafeZoneSize.X + (CurrentMenu.WidthOffset / 2), CurrentMenu.Y + Colour.RightArrow.Y + CurrentMenu.SafeZoneSize.Y + CurrentMenu.SubtitleHeight + RageUI.ItemOffset, Colour.RightArrow.Width, Colour.RightArrow.Height)
|
||
|
|
||
|
---@type boolean
|
||
|
local Selected = false
|
||
|
|
||
|
RenderSprite(Colour.Background.Dictionary, Colour.Background.Texture, CurrentMenu.X, CurrentMenu.Y + Colour.Background.Y + CurrentMenu.SubtitleHeight + RageUI.ItemOffset, Colour.Background.Width + CurrentMenu.WidthOffset, Colour.Background.Height)
|
||
|
RenderSprite(Colour.LeftArrow.Dictionary, Colour.LeftArrow.Texture, CurrentMenu.X + Colour.LeftArrow.X + (CurrentMenu.WidthOffset / 2), CurrentMenu.Y + Colour.LeftArrow.Y + CurrentMenu.SubtitleHeight + RageUI.ItemOffset, Colour.LeftArrow.Width, Colour.LeftArrow.Height)
|
||
|
RenderSprite(Colour.RightArrow.Dictionary, Colour.RightArrow.Texture, CurrentMenu.X + Colour.RightArrow.X + (CurrentMenu.WidthOffset / 2), CurrentMenu.Y + Colour.RightArrow.Y + CurrentMenu.SubtitleHeight + RageUI.ItemOffset, Colour.RightArrow.Width, Colour.RightArrow.Height)
|
||
|
|
||
|
RenderRectangle(CurrentMenu.X + Colour.SelectedRectangle.X + (Colour.Box.Width * (CurrentIndex - MinimumIndex)) + (CurrentMenu.WidthOffset / 2), CurrentMenu.Y + Colour.SelectedRectangle.Y + CurrentMenu.SubtitleHeight + RageUI.ItemOffset, Colour.SelectedRectangle.Width, Colour.SelectedRectangle.Height, 245, 245, 245, 255)
|
||
|
|
||
|
for Index = 1, Maximum do
|
||
|
RenderRectangle(CurrentMenu.X + Colour.Box.X + (Colour.Box.Width * (Index - 1)) + (CurrentMenu.WidthOffset / 2), CurrentMenu.Y + Colour.Box.Y + CurrentMenu.SubtitleHeight + RageUI.ItemOffset, Colour.Box.Width, Colour.Box.Height, table.unpack(Colours[MinimumIndex + Index - 1]))
|
||
|
end
|
||
|
|
||
|
RenderText((Title and Title or "") .. " (" .. CurrentIndex .. " of " .. #Colours .. ")", CurrentMenu.X + RageUI.Settings.Panels.Grid.Text.Top.X + (CurrentMenu.WidthOffset / 2), CurrentMenu.Y + RageUI.Settings.Panels.Grid.Text.Top.Y + CurrentMenu.SubtitleHeight + RageUI.ItemOffset, 0, RageUI.Settings.Panels.Grid.Text.Top.Scale, 245, 245, 245, 255, 1)
|
||
|
|
||
|
if Hovered or LeftArrowHovered or RightArrowHovered then
|
||
|
if RageUI.Settings.Controls.Click.Active then
|
||
|
Selected = true
|
||
|
|
||
|
if LeftArrowHovered then
|
||
|
CurrentIndex = CurrentIndex - 1
|
||
|
|
||
|
if CurrentIndex < 1 then
|
||
|
CurrentIndex = #Colours
|
||
|
MinimumIndex = #Colours - Maximum + 1
|
||
|
elseif CurrentIndex < MinimumIndex then
|
||
|
MinimumIndex = MinimumIndex - 1
|
||
|
end
|
||
|
elseif RightArrowHovered then
|
||
|
CurrentIndex = CurrentIndex + 1
|
||
|
|
||
|
if CurrentIndex > #Colours then
|
||
|
CurrentIndex = 1
|
||
|
MinimumIndex = 1
|
||
|
elseif CurrentIndex > MinimumIndex + Maximum - 1 then
|
||
|
MinimumIndex = MinimumIndex + 1
|
||
|
end
|
||
|
elseif Hovered then
|
||
|
for Index = 1, Maximum do
|
||
|
if RageUI.IsMouseInBounds(CurrentMenu.X + Colour.Box.X + (Colour.Box.Width * (Index - 1)) + CurrentMenu.SafeZoneSize.X + (CurrentMenu.WidthOffset / 2), CurrentMenu.Y + Colour.Box.Y + CurrentMenu.SafeZoneSize.Y + CurrentMenu.SubtitleHeight + RageUI.ItemOffset, Colour.Box.Width, Colour.Box.Height) then
|
||
|
CurrentIndex = MinimumIndex + Index - 1
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
|
||
|
if (Action.onColorChange ~= nil) then
|
||
|
Action.onColorChange(MinimumIndex, CurrentIndex)
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
|
||
|
RageUI.ItemOffset = RageUI.ItemOffset + Colour.Background.Height + Colour.Background.Y
|
||
|
|
||
|
if (Hovered or LeftArrowHovered or RightArrowHovered) and RageUI.Settings.Controls.Click.Active then
|
||
|
local Audio = RageUI.Settings.Audio
|
||
|
RageUI.PlaySound(Audio[Audio.Use].Select.audioName, Audio[Audio.Use].Select.audioRef)
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
|
||
|
|