-
Notifications
You must be signed in to change notification settings - Fork 50
Expand file tree
/
Copy pathMenuListItem.cs
More file actions
126 lines (114 loc) · 3.8 KB
/
MenuListItem.cs
File metadata and controls
126 lines (114 loc) · 3.8 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
using System.Collections.Generic;
using static CitizenFX.Core.Native.Function;
using static CitizenFX.Core.Native.API;
namespace MenuAPI
{
public class MenuListItem : MenuItem
{
public int ListIndex { get; set; } = 0;
public List<string> ListItems { get; set; } = new List<string>();
public bool HideArrowsWhenNotSelected { get; set; } = false;
public bool ShowOpacityPanel { get; set; } = false;
public bool ShowColorPanel { get; set; } = false;
public ColorPanelType ColorPanelColorType = ColorPanelType.Hair;
public enum ColorPanelType
{
Hair,
Makeup
}
public int ItemsCount => ListItems.Count;
public string GetCurrentSelection()
{
if (ItemsCount > 0 && ListIndex >= 0 && ListIndex < ItemsCount)
{
return ListItems[ListIndex];
}
return null;
}
public MenuListItem(string text, List<string> items, int index) : this(text, items, index, null) { }
public MenuListItem(string text, List<string> items, int index, string description) : base(text, description)
{
ListItems = items;
ListIndex = index;
}
internal override void Draw(int indexOffset)
{
if (ItemsCount < 1)
{
// Add a dummy item to prevent the other while loops from freezing the game.
ListItems.Add("N/A");
}
while (ListIndex < 0)
{
ListIndex += ItemsCount;
}
while (ListIndex >= ItemsCount)
{
ListIndex -= ItemsCount;
}
if (HideArrowsWhenNotSelected && !Selected)
{
Label = GetCurrentSelection() ?? "~r~N/A";
}
else
{
Label = $"~s~← {GetCurrentSelection() ?? "~r~N/A~s~"} ~s~→";
}
base.Draw(indexOffset);
}
internal override void GoRight()
{
if (ItemsCount > 0)
{
int oldIndex = ListIndex;
int newIndex = oldIndex;
if (ListIndex >= ItemsCount - 1)
{
newIndex = 0;
}
else
{
newIndex++;
}
ListIndex = newIndex;
ParentMenu.ListItemIndexChangeEvent(ParentMenu, this, oldIndex, newIndex, Index);
#if FIVEM
PlaySoundFrontend(-1, "NAV_LEFT_RIGHT", "HUD_FRONTEND_DEFAULT_SOUNDSET", false);
#endif
#if REDM
// Has invalid parameter types in API.
Call((CitizenFX.Core.Native.Hash)0xCE5D0FFE83939AF1, -1, "NAV_RIGHT", "HUD_SHOP_SOUNDSET", 1);
#endif
}
}
internal override void GoLeft()
{
if (ItemsCount > 0)
{
int oldIndex = ListIndex;
int newIndex = oldIndex;
if (ListIndex < 1)
{
newIndex = ItemsCount - 1;
}
else
{
newIndex--;
}
ListIndex = newIndex;
ParentMenu.ListItemIndexChangeEvent(ParentMenu, this, oldIndex, newIndex, Index);
#if FIVEM
PlaySoundFrontend(-1, "NAV_LEFT_RIGHT", "HUD_FRONTEND_DEFAULT_SOUNDSET", false);
#endif
#if REDM
// Has invalid parameter types in API.
Call((CitizenFX.Core.Native.Hash)0xCE5D0FFE83939AF1, -1, "NAV_LEFT", "HUD_SHOP_SOUNDSET", 1);
#endif
}
}
internal override void Select()
{
ParentMenu.ListItemSelectEvent(ParentMenu, this, ListIndex, Index);
}
}
}