@nativewrappers/fivem 0.0.65 → 0.0.72

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (241) hide show
  1. package/Audio.d.ts +2 -2
  2. package/Blip.d.ts +2 -2
  3. package/Camera.d.ts +1 -1
  4. package/Game.d.ts +1 -1
  5. package/GameplayCamera.d.ts +1 -1
  6. package/Model.d.ts +1 -1
  7. package/ParticleEffect.d.ts +2 -2
  8. package/ParticleEffectAsset.d.ts +1 -1
  9. package/README.md +45 -0
  10. package/Raycast.d.ts +2 -2
  11. package/RelationshipGroup.d.ts +1 -1
  12. package/Tasks.d.ts +3 -3
  13. package/World.d.ts +2 -2
  14. package/cfx/StateBagChangeHandler.d.ts +1 -3
  15. package/common/Command.d.ts +30 -0
  16. package/common/Convar.d.ts +13 -0
  17. package/common/GlobalData.d.ts +8 -0
  18. package/common/Kvp.d.ts +69 -0
  19. package/common/Resource.d.ts +14 -0
  20. package/common/decors/Events.d.ts +54 -0
  21. package/common/index.d.ts +8 -0
  22. package/common/net/NetworkedMap.d.ts +28 -0
  23. package/common/types.d.ts +5 -0
  24. package/common/utils/ClassTypes.d.ts +11 -0
  25. package/common/utils/Color.d.ts +14 -0
  26. package/common/utils/Maths.d.ts +4 -0
  27. package/common/utils/PointF.d.ts +12 -0
  28. package/common/utils/Quaternion.d.ts +10 -0
  29. package/common/utils/Vector.d.ts +429 -0
  30. package/common/utils/Vector2.d.ts +1 -0
  31. package/common/utils/Vector3.d.ts +1 -0
  32. package/common/utils/Vector4.d.ts +1 -0
  33. package/common/utils/cleanPlayerName.d.ts +6 -0
  34. package/common/utils/enumValues.d.ts +12 -0
  35. package/{utils/getStringFromUInt8Array.js → common/utils/getStringFromUInt8Array.d.ts} +1 -3
  36. package/{utils/getUInt32FromUint8Array.js → common/utils/getUInt32FromUint8Array.d.ts} +1 -1
  37. package/common/utils/index.d.ts +12 -0
  38. package/index.d.ts +1 -1
  39. package/index.js +20136 -26
  40. package/interfaces/Dimensions.d.ts +1 -1
  41. package/models/BaseEntity.d.ts +3 -3
  42. package/models/Ped.d.ts +2 -2
  43. package/models/PedBone.d.ts +1 -1
  44. package/models/PedBoneCollection.d.ts +1 -1
  45. package/models/Player.d.ts +1 -1
  46. package/models/Vehicle.d.ts +2 -2
  47. package/models/VehicleDoor.d.ts +2 -2
  48. package/models/VehicleDoorCollection.d.ts +1 -1
  49. package/models/VehicleMod.d.ts +2 -2
  50. package/models/VehicleModCollection.d.ts +2 -2
  51. package/models/VehicleToggleMod.d.ts +2 -2
  52. package/models/VehicleWheel.d.ts +1 -1
  53. package/models/VehicleWheelCollection.d.ts +1 -1
  54. package/models/VehicleWindow.d.ts +2 -2
  55. package/models/VehicleWindowCollection.d.ts +1 -1
  56. package/package.json +6 -4
  57. package/ui/Container.d.ts +2 -2
  58. package/ui/Effects.d.ts +1 -1
  59. package/ui/Hud.d.ts +2 -2
  60. package/ui/InstructionalButtons.d.ts +1 -1
  61. package/ui/Rectangle.d.ts +2 -2
  62. package/ui/Scaleform.d.ts +1 -1
  63. package/ui/Screen.d.ts +1 -1
  64. package/ui/Text.d.ts +1 -1
  65. package/ui/interfaces/IButton.d.ts +1 -1
  66. package/ui/interfaces/IDrawable.d.ts +1 -1
  67. package/ui/menu/items/UIMenuItem.d.ts +1 -1
  68. package/ui/menu/items/UIMenuListItem.d.ts +1 -1
  69. package/ui/menu/items/panels/AbstractUIMenuPanel.d.ts +2 -2
  70. package/ui/menu/items/panels/UIMenuStatisticsPanel.d.ts +1 -1
  71. package/utils/LiteEvent.d.ts +2 -6
  72. package/utils/index.d.ts +1 -1
  73. package/weapon/DlcWeaponData.d.ts +1 -1
  74. package/weapon/Weapon.d.ts +7 -7
  75. package/weapon/WeaponAsset.d.ts +1 -1
  76. package/weapon/WeaponCollection.d.ts +2 -2
  77. package/weaponComponent/DlcWeaponComponentData.d.ts +1 -1
  78. package/weaponComponent/InvalidWeaponComponent.d.ts +1 -1
  79. package/weaponComponent/WeaponComponent.d.ts +3 -3
  80. package/weaponComponent/WeaponComponentCollection.d.ts +3 -3
  81. package/Audio.js +0 -93
  82. package/Blip.js +0 -105
  83. package/Camera.js +0 -162
  84. package/Checkpoint.js +0 -43
  85. package/Events.js +0 -74
  86. package/Game.js +0 -474
  87. package/GameplayCamera.js +0 -141
  88. package/Model.js +0 -213
  89. package/NetworkedScene.js +0 -18
  90. package/ParticleEffect.js +0 -123
  91. package/ParticleEffectAsset.js +0 -105
  92. package/Pickup.js +0 -19
  93. package/Raycast.js +0 -123
  94. package/RelationshipGroup.js +0 -67
  95. package/Rope.js +0 -129
  96. package/TaskSequence.js +0 -48
  97. package/Tasks.js +0 -241
  98. package/World.js +0 -765
  99. package/cfx/StateBagChangeHandler.js +0 -1
  100. package/cfx/index.js +0 -1
  101. package/enums/Alignment.js +0 -6
  102. package/enums/AnimationFlags.js +0 -35
  103. package/enums/AudioFlag.js +0 -38
  104. package/enums/BadgeStyle.js +0 -183
  105. package/enums/Blip.js +0 -225
  106. package/enums/Bone.js +0 -103
  107. package/enums/CameraShake.js +0 -14
  108. package/enums/CameraTypes.js +0 -8
  109. package/enums/CheckboxStyle.js +0 -5
  110. package/enums/Checkpoint.js +0 -67
  111. package/enums/CloudHat.js +0 -27
  112. package/enums/Control.js +0 -361
  113. package/enums/CursorSprite.js +0 -15
  114. package/enums/Driving.js +0 -34
  115. package/enums/ExplosionType.js +0 -45
  116. package/enums/FiringPattern.js +0 -20
  117. package/enums/Font.js +0 -8
  118. package/enums/ForceType.js +0 -9
  119. package/enums/Gender.js +0 -5
  120. package/enums/HelmetType.js +0 -6
  121. package/enums/HudColor.js +0 -184
  122. package/enums/HudComponent.js +0 -54
  123. package/enums/InputMode.js +0 -5
  124. package/enums/InvertAxis.js +0 -7
  125. package/enums/Language.js +0 -15
  126. package/enums/LeaveVehicleFlags.js +0 -11
  127. package/enums/LoadingSpinnerType.js +0 -8
  128. package/enums/MarkerType.js +0 -50
  129. package/enums/MenuAlignment.js +0 -5
  130. package/enums/NotificationType.js +0 -11
  131. package/enums/Parachute.js +0 -15
  132. package/enums/PickupType.js +0 -74
  133. package/enums/RadioStation.js +0 -25
  134. package/enums/RagdollType.js +0 -7
  135. package/enums/RaycastEnums.js +0 -32
  136. package/enums/Relationship.js +0 -10
  137. package/enums/RopeType.js +0 -6
  138. package/enums/ScreenEffect.js +0 -84
  139. package/enums/SpeechModifier.js +0 -40
  140. package/enums/Vehicle.js +0 -376
  141. package/enums/Weather.js +0 -22
  142. package/enums/ZoneID.js +0 -95
  143. package/enums/index.js +0 -42
  144. package/hashes/MaterialHash.js +0 -217
  145. package/hashes/PedHash.js +0 -725
  146. package/hashes/VehicleHash.js +0 -523
  147. package/hashes/WeaponHash.js +0 -161
  148. package/hashes/WeatherTypeHash.js +0 -22
  149. package/hashes/index.js +0 -5
  150. package/interfaces/Dimensions.js +0 -1
  151. package/models/BaseEntity.js +0 -477
  152. package/models/Entity.js +0 -25
  153. package/models/EntityBone.js +0 -26
  154. package/models/EntityBoneCollection.js +0 -18
  155. package/models/Ped.js +0 -692
  156. package/models/PedBone.js +0 -9
  157. package/models/PedBoneCollection.js +0 -21
  158. package/models/Player.js +0 -186
  159. package/models/Prop.js +0 -26
  160. package/models/Vehicle.js +0 -576
  161. package/models/VehicleDoor.js +0 -44
  162. package/models/VehicleDoorCollection.js +0 -62
  163. package/models/VehicleMod.js +0 -35
  164. package/models/VehicleModCollection.js +0 -227
  165. package/models/VehicleToggleMod.js +0 -29
  166. package/models/VehicleWheel.js +0 -23
  167. package/models/VehicleWheelCollection.js +0 -57
  168. package/models/VehicleWindow.js +0 -35
  169. package/models/VehicleWindowCollection.js +0 -57
  170. package/models/index.js +0 -19
  171. package/ui/Container.js +0 -31
  172. package/ui/Effects.js +0 -106
  173. package/ui/Fading.js +0 -69
  174. package/ui/Hud.js +0 -39
  175. package/ui/InstructionalButtons.js +0 -54
  176. package/ui/LoadingPrompt.js +0 -45
  177. package/ui/Notification.js +0 -9
  178. package/ui/Rectangle.js +0 -40
  179. package/ui/Scaleform.js +0 -236
  180. package/ui/Screen.js +0 -72
  181. package/ui/Sprite.js +0 -60
  182. package/ui/Text.js +0 -115
  183. package/ui/Timerbar.js +0 -248
  184. package/ui/index.js +0 -15
  185. package/ui/interfaces/IButton.js +0 -1
  186. package/ui/interfaces/IDrawable.js +0 -1
  187. package/ui/interfaces/index.js +0 -1
  188. package/ui/menu/Menu.js +0 -831
  189. package/ui/menu/MenuControl.js +0 -12
  190. package/ui/menu/MenuControls.js +0 -9
  191. package/ui/menu/MenuSettings.js +0 -54
  192. package/ui/menu/index.js +0 -6
  193. package/ui/menu/items/UIMenuCheckboxItem.js +0 -59
  194. package/ui/menu/items/UIMenuItem.js +0 -1111
  195. package/ui/menu/items/UIMenuListItem.js +0 -119
  196. package/ui/menu/items/UIMenuSeparatorItem.js +0 -29
  197. package/ui/menu/items/UIMenuSliderItem.js +0 -191
  198. package/ui/menu/items/index.js +0 -6
  199. package/ui/menu/items/panels/AbstractUIMenuPanel.js +0 -44
  200. package/ui/menu/items/panels/UIMenuColorPanel.js +0 -217
  201. package/ui/menu/items/panels/UIMenuGridPanel.js +0 -261
  202. package/ui/menu/items/panels/UIMenuPercentagePanel.js +0 -124
  203. package/ui/menu/items/panels/UIMenuStatisticsPanel.js +0 -79
  204. package/ui/menu/items/panels/UIMenuStatisticsPanelItem.js +0 -35
  205. package/ui/menu/items/panels/index.js +0 -6
  206. package/ui/menu/modules/ListItem.js +0 -10
  207. package/ui/menu/modules/index.js +0 -1
  208. package/utils/Animations.js +0 -55
  209. package/utils/Crypto.js +0 -25
  210. package/utils/LiteEvent.js +0 -19
  211. package/utils/Maths.js +0 -10
  212. package/utils/Point.js +0 -30
  213. package/utils/PointF.js +0 -14
  214. package/utils/Quaternion.js +0 -27
  215. package/utils/Size.js +0 -8
  216. package/utils/String.js +0 -25
  217. package/utils/enumValues.js +0 -14
  218. package/utils/index.js +0 -9
  219. package/weapon/DlcWeaponData.js +0 -44
  220. package/weapon/Mk2WeaponHash.js +0 -25
  221. package/weapon/Weapon.js +0 -270
  222. package/weapon/WeaponAsset.js +0 -84
  223. package/weapon/WeaponCollection.js +0 -187
  224. package/weapon/WeaponDisplayNameByHash.js +0 -75
  225. package/weapon/WeaponGroup.js +0 -19
  226. package/weapon/WeaponHudStats.js +0 -38
  227. package/weapon/WeaponLivery.js +0 -14
  228. package/weapon/WeaponLiveryColor.js +0 -35
  229. package/weapon/WeaponTint.js +0 -43
  230. package/weapon/index.js +0 -8
  231. package/weaponComponent/ComponentAttachmentPoint.js +0 -19
  232. package/weaponComponent/ComponentAttachmentPointByHash.js +0 -573
  233. package/weaponComponent/ComponentDisplayNameByHash.js +0 -280
  234. package/weaponComponent/DlcWeaponComponentData.js +0 -44
  235. package/weaponComponent/InvalidWeaponComponent.js +0 -28
  236. package/weaponComponent/WeaponComponent.js +0 -123
  237. package/weaponComponent/WeaponComponentCollection.js +0 -174
  238. package/weaponComponent/WeaponComponentHash.js +0 -887
  239. package/weaponComponent/WeaponComponentHashesByWeaponHash.js +0 -829
  240. package/weaponComponent/WeaponComponentHudStats.js +0 -34
  241. package/weaponComponent/index.js +0 -5
package/ui/menu/Menu.js DELETED
@@ -1,831 +0,0 @@
1
- import { Container, Hud, MenuControls, MenuSettings, Rectangle, Screen, Sprite, Text, UIMenuSeparatorItem, } from "../";
2
- import { Audio, CursorSprite, Game, GameplayCamera, InputMode, Wait, } from "../../";
3
- import { Alignment, Control, Font, MenuAlignment } from "../../enums";
4
- import { Color, Crypto, LiteEvent, Point, Size } from "../../utils";
5
- import { UIMenuCheckboxItem, UIMenuItem, UIMenuListItem, UIMenuSliderItem, } from "./items";
6
- export class Menu {
7
- static screenAspectRatio = IsDuplicityVersion()
8
- ? 0
9
- : Screen.AspectRatio;
10
- static screenHeight = 1080;
11
- static screenWidth = Menu.screenHeight * Menu.screenAspectRatio;
12
- static screenResolution = new Size(Menu.screenWidth, Menu.screenHeight);
13
- id = Crypto.uuidv4();
14
- visible = false;
15
- parentMenu;
16
- parentItem;
17
- items = [];
18
- children = new Map();
19
- menuOpen = new LiteEvent();
20
- menuClose = new LiteEvent();
21
- menuChange = new LiteEvent();
22
- indexChange = new LiteEvent();
23
- listChange = new LiteEvent();
24
- sliderChange = new LiteEvent();
25
- checkboxChange = new LiteEvent();
26
- listSelect = new LiteEvent();
27
- sliderSelect = new LiteEvent();
28
- itemSelect = new LiteEvent();
29
- panelActivated = new LiteEvent();
30
- _counterPretext = "";
31
- _counterOverride = "";
32
- _alignment = MenuAlignment.Left;
33
- _offset;
34
- _navigationDelay = 140;
35
- _lastUpDownNavigation = 0;
36
- _lastLeftRightNavigation = 0;
37
- _activeItem = 1000;
38
- _widthOffset = 0;
39
- _drawOffset = new Point();
40
- _justOpened = true;
41
- _mousePressed = false;
42
- _minItem = 0;
43
- _maxItem = 9;
44
- _maxItemsOnScreen = this._maxItem;
45
- _controls = new MenuControls();
46
- _settings = new MenuSettings();
47
- _title;
48
- _subtitle;
49
- _mainMenu;
50
- _logo;
51
- _upAndDownSprite;
52
- _subtitleResRectangle;
53
- _extraRectangleUp;
54
- _extraRectangleDown;
55
- _descriptionBar;
56
- _descriptionRectangle;
57
- _descriptionText;
58
- _counterText;
59
- _background;
60
- constructor(title, subtitle, offset = new Point(), spriteLibrary = "commonmenu", spriteName = "interaction_bgd") {
61
- this._offset = offset;
62
- // Create everything
63
- this._mainMenu = new Container(new Point(), new Size(700, 500), Color.Transparent);
64
- this._logo = new Sprite(spriteLibrary || "", spriteName || "", new Point(this._offset.X, this._offset.Y), new Size(431, 107));
65
- this._mainMenu.addItem([
66
- (this._title = new Text(title || "", new Point(431 / 2 + this._offset.X, 20 + this._offset.Y), 1.15, Color.White, 1, Alignment.Centered)),
67
- (this._subtitleResRectangle = new Rectangle(new Point(this._offset.X, 107 + this._offset.Y), new Size(431, 37), Color.Black)),
68
- (this._subtitle = new Text(subtitle || "", new Point(8 + this._offset.X, 110 + this._offset.Y), 0.35, Color.White, 0, Alignment.Left)),
69
- ]);
70
- if (this._subtitle.caption.startsWith("~")) {
71
- this._counterPretext = this._subtitle.caption.substr(0, 3);
72
- }
73
- this._counterText = new Text("", new Point(425 + this._offset.X, 110 + this._offset.Y), 0.35, Color.White, 0, Alignment.Right);
74
- this._upAndDownSprite = new Sprite("commonmenu", "shop_arrows_upanddown", new Point(), new Size(50, 50));
75
- const extraRectanglePos = new Point(this._offset.X);
76
- const extraRectangleSize = new Size(431, 18);
77
- const extraRectangleColor = new Color(0, 0, 0, 200);
78
- this._extraRectangleUp = new Rectangle(extraRectanglePos, extraRectangleSize, extraRectangleColor);
79
- this._extraRectangleDown = new Rectangle({ ...extraRectanglePos }, { ...extraRectangleSize }, { ...extraRectangleColor });
80
- this._descriptionBar = new Rectangle(new Point(this._offset.X), new Size(431, 4), Color.Black);
81
- this._descriptionRectangle = new Sprite("commonmenu", "gradient_bgd", new Point(this._offset.X), new Size(431, 30));
82
- this._descriptionText = new Text("Description", new Point(this._offset.X + 8), 0.35, Color.White, Font.ChaletLondon, Alignment.Left);
83
- this._background = new Sprite("commonmenu", "gradient_bgd", new Point(this._offset.X, 144 + this._offset.Y), new Size(290, 25));
84
- setTick(() => {
85
- this._render();
86
- });
87
- }
88
- set Title(text) {
89
- this._title.caption = text;
90
- }
91
- get Title() {
92
- return this._title.caption;
93
- }
94
- get TitleFont() {
95
- return this._title.font;
96
- }
97
- set TitleFont(font) {
98
- this._title.font = font;
99
- }
100
- set Subtitle(text) {
101
- this._subtitle.caption = text;
102
- }
103
- get Subtitle() {
104
- return this._subtitle.caption;
105
- }
106
- set SubtitleFont(font) {
107
- this._subtitle.font = font;
108
- }
109
- get SubtitleFont() {
110
- return this._subtitle.font;
111
- }
112
- set SubtitleForeColor(color) {
113
- this._subtitle.color = color;
114
- }
115
- get SubtitleForeColor() {
116
- return this._subtitle.color;
117
- }
118
- set SubtitleBackColor(color) {
119
- this._subtitleResRectangle.color = color;
120
- }
121
- get SubtitleBackColor() {
122
- return this._subtitleResRectangle.color;
123
- }
124
- get CurrentItem() {
125
- return this.items[this._activeItem % this.items.length];
126
- }
127
- set CurrentItem(value) {
128
- const index = this.items.findIndex((i) => i.id === value.id);
129
- if (index !== -1) {
130
- this.CurrentSelection = index;
131
- }
132
- }
133
- get CurrentSelection() {
134
- return this._activeItem % this.items.length;
135
- }
136
- set CurrentSelection(v) {
137
- this.CurrentItem.selected = false;
138
- this._activeItem = 1000 - (1000 % this.items.length) + v;
139
- const currentSelection = this.CurrentSelection;
140
- if (currentSelection > this._maxItem) {
141
- this._maxItem = currentSelection;
142
- this._minItem = currentSelection - this._maxItemsOnScreen;
143
- }
144
- else if (currentSelection < this._minItem) {
145
- this._maxItem = this._maxItemsOnScreen + currentSelection;
146
- this._minItem = currentSelection;
147
- }
148
- }
149
- get Alignment() {
150
- return this._alignment;
151
- }
152
- set Alignment(alignment) {
153
- this._alignment = alignment;
154
- }
155
- get WidthOffset() {
156
- return this._widthOffset;
157
- }
158
- set WidthOffset(widthOffset) {
159
- this._widthOffset = widthOffset;
160
- const width = 431 + widthOffset;
161
- if (this._logo) {
162
- this._logo.size.width = width;
163
- }
164
- this._mainMenu.items[0].pos.X = width / 2 + this._offset.X;
165
- if (this._counterText) {
166
- this._counterText.pos.X = 425 + this._offset.X + widthOffset;
167
- }
168
- if (this._subtitleResRectangle) {
169
- this._subtitleResRectangle.size.width = width;
170
- }
171
- this._extraRectangleUp.size.width = width;
172
- this._extraRectangleDown.size.width = width;
173
- this._upAndDownSprite.pos.X = 190 + this._offset.X + widthOffset / 2;
174
- this._descriptionBar.size.width = width;
175
- this._descriptionRectangle.size.width = width;
176
- this.items.forEach((item) => {
177
- item.formatDescription();
178
- });
179
- }
180
- get DrawOffset() {
181
- return this._drawOffset;
182
- }
183
- get Controls() {
184
- return this._controls;
185
- }
186
- get Settings() {
187
- return this._settings;
188
- }
189
- addNewSubMenu(text, description, inherit = true) {
190
- let menu;
191
- if (inherit) {
192
- menu = new Menu(this._title.caption, text, this._offset, this._logo.TextureDict, this._logo.textureName);
193
- menu.Alignment = this.Alignment;
194
- menu.WidthOffset = this.WidthOffset;
195
- menu._settings = this._settings;
196
- menu.TitleFont = this.TitleFont;
197
- menu.SubtitleFont = this.SubtitleFont;
198
- }
199
- else {
200
- menu = new Menu(this._title.caption, text);
201
- }
202
- const item = new UIMenuItem(text, description);
203
- this.addItem(item);
204
- this.bindMenuToItem(menu, item);
205
- return menu;
206
- }
207
- addSubMenu(subMenuToAdd, text, description, inherit = true) {
208
- if (inherit) {
209
- subMenuToAdd.Alignment = this.Alignment;
210
- subMenuToAdd.WidthOffset = this.WidthOffset;
211
- subMenuToAdd._settings = this._settings;
212
- subMenuToAdd.TitleFont = this.TitleFont;
213
- subMenuToAdd.SubtitleFont = this.SubtitleFont;
214
- }
215
- const item = new UIMenuItem(text, description);
216
- this.addItem(item);
217
- this.bindMenuToItem(subMenuToAdd, item);
218
- return subMenuToAdd;
219
- }
220
- addItem(items) {
221
- if (!Array.isArray(items)) {
222
- items = [items];
223
- }
224
- items.forEach((item) => {
225
- item.offset = this._offset;
226
- item.parent = this;
227
- item.formatDescription();
228
- });
229
- this.items.push(...items);
230
- this.refreshIndex();
231
- }
232
- removeItem(itemOrIndex) {
233
- if (typeof itemOrIndex === "number") {
234
- this.items = this.items.filter((i, index) => index !== itemOrIndex);
235
- }
236
- else {
237
- this.items = this.items.filter((i) => i.id !== itemOrIndex.id);
238
- }
239
- this.refreshIndex();
240
- }
241
- bindMenuToItem(menuToBind, itemToBindTo) {
242
- menuToBind.parentMenu = this;
243
- menuToBind.parentItem = itemToBindTo;
244
- this.children.set(itemToBindTo.id, menuToBind);
245
- }
246
- releaseMenuFromItem(releaseFrom) {
247
- if (!this.children.has(releaseFrom.id)) {
248
- return false;
249
- }
250
- const menu = this.children.get(releaseFrom.id);
251
- if (menu instanceof Menu) {
252
- menu.parentItem = undefined;
253
- menu.parentMenu = undefined;
254
- }
255
- this.children.delete(releaseFrom.id);
256
- return true;
257
- }
258
- refreshIndex() {
259
- if (this.items.length === 0) {
260
- this._activeItem = 1000;
261
- this._maxItem = this._maxItemsOnScreen;
262
- this._minItem = 0;
263
- return;
264
- }
265
- for (const item of this.items) {
266
- item.selected = false;
267
- }
268
- this._activeItem = 1000 - (1000 % this.items.length);
269
- this._maxItem = this._maxItemsOnScreen;
270
- this._minItem = 0;
271
- if (this.CurrentItem instanceof UIMenuSeparatorItem &&
272
- this._isThereAnyItemExcludingSeparators()) {
273
- this.goDown();
274
- }
275
- }
276
- clear() {
277
- this.items = [];
278
- this._recalculateUpAndDown();
279
- this._recalculateDescriptionPosition();
280
- }
281
- open() {
282
- this._playSoundAndReleaseId(this.Settings.audio.back, this.Settings.audio.library);
283
- this.visible = true;
284
- this._justOpened = true;
285
- if (!this.parentMenu && this.Settings.resetCursorOnOpen) {
286
- Hud.CursorPosition = new Point(0.5, 0.5);
287
- Hud.CursorSprite = CursorSprite.Normal;
288
- }
289
- this.menuOpen.emit();
290
- }
291
- close() {
292
- this._playSoundAndReleaseId(this.Settings.audio.back, this.Settings.audio.library);
293
- this.visible = false;
294
- this.refreshIndex();
295
- this.menuClose.emit();
296
- }
297
- goLeft() {
298
- const item = this.CurrentItem;
299
- if (item instanceof UIMenuListItem) {
300
- if (!item.Items.length) {
301
- return;
302
- }
303
- item.Index -= 1;
304
- this._playSoundAndReleaseId(this.Settings.audio.leftRight, this.Settings.audio.library);
305
- this.listChange.emit(item, item.Index, item.SelectedItem);
306
- item.listChanged.emit(item.Index, item.SelectedItem);
307
- }
308
- else if (item instanceof UIMenuSliderItem) {
309
- if (!item.Items.length) {
310
- return;
311
- }
312
- item.Index -= 1;
313
- this._playSoundAndReleaseId(this.Settings.audio.leftRight, this.Settings.audio.library);
314
- this.sliderChange.emit(item, item.Index, item.indexToItem(item.Index));
315
- item.sliderChanged.emit(item.Index, item.indexToItem(item.Index));
316
- }
317
- }
318
- goRight() {
319
- const item = this.CurrentItem;
320
- if (item instanceof UIMenuListItem) {
321
- if (item.Items.length === 0) {
322
- return;
323
- }
324
- item.Index += 1;
325
- this._playSoundAndReleaseId(this.Settings.audio.leftRight, this.Settings.audio.library);
326
- this.listChange.emit(item, item.Index, item.SelectedItem);
327
- item.listChanged.emit(item.Index, item.SelectedItem);
328
- }
329
- else if (item instanceof UIMenuSliderItem) {
330
- item.Index += 1;
331
- this._playSoundAndReleaseId(this.Settings.audio.leftRight, this.Settings.audio.library);
332
- this.sliderChange.emit(item, item.Index, item.indexToItem(item.Index));
333
- item.sliderChanged.emit(item.Index, item.indexToItem(item.Index));
334
- }
335
- }
336
- selectItem() {
337
- const item = this.CurrentItem;
338
- if (!item.enabled) {
339
- this._playSoundAndReleaseId(this.Settings.audio.error, this.Settings.audio.library);
340
- return;
341
- }
342
- this._playSoundAndReleaseId(this.Settings.audio.select, this.Settings.audio.library);
343
- if (item instanceof UIMenuCheckboxItem) {
344
- item.Checked = !item.Checked;
345
- this.checkboxChange.emit(item, item.Checked);
346
- item.checkboxChanged.emit(item.Checked);
347
- }
348
- else if (item instanceof UIMenuListItem) {
349
- this.listSelect.emit(item, item.Index, item.SelectedItem);
350
- item.listSelected.emit(item.Index, item.SelectedItem);
351
- }
352
- else if (item instanceof UIMenuSliderItem) {
353
- this.sliderSelect.emit(item, item.Index, item.indexToItem(item.Index));
354
- item.sliderSelected.emit(item.Index, item.indexToItem(item.Index));
355
- }
356
- else {
357
- this.itemSelect.emit(item, this.CurrentSelection);
358
- item.activated.emit();
359
- if (this.children.has(item.id)) {
360
- const subMenu = this.children.get(item.id);
361
- this.visible = false;
362
- if (subMenu instanceof Menu) {
363
- subMenu.visible = true;
364
- subMenu._justOpened = true;
365
- subMenu.menuOpen.emit();
366
- }
367
- this.menuChange.emit(subMenu, true);
368
- }
369
- }
370
- item.fireEvent();
371
- }
372
- isMouseInBounds(pos, size, drawOffset = true) {
373
- const resolution = Menu.screenResolution;
374
- const cX = (GetControlNormal(0, Control.CursorX) * resolution.width) /
375
- resolution.width;
376
- const cY = (GetControlNormal(0, Control.CursorY) * resolution.height) /
377
- resolution.height;
378
- let x = pos.X / resolution.width;
379
- let y = pos.Y / resolution.height;
380
- const w = size.width / resolution.width;
381
- const h = size.height / resolution.height;
382
- if (drawOffset) {
383
- x += this._drawOffset.X;
384
- y += this._drawOffset.Y;
385
- }
386
- return cX >= x && cX <= x + w && cY > y && cY < y + h;
387
- }
388
- goUp() {
389
- this.CurrentItem.selected = false;
390
- if (this.items.length > this._maxItemsOnScreen + 1) {
391
- if (this.CurrentSelection <= this._minItem) {
392
- if (this.CurrentSelection === 0) {
393
- this._minItem = this.items.length - this._maxItemsOnScreen - 1;
394
- this._maxItem = this.items.length - 1;
395
- this._activeItem = 1000 - (1000 % this.items.length);
396
- this._activeItem += this.items.length - 1;
397
- }
398
- else {
399
- this._minItem--;
400
- this._maxItem--;
401
- this._activeItem--;
402
- }
403
- }
404
- else {
405
- this._activeItem--;
406
- }
407
- }
408
- else {
409
- this._activeItem--;
410
- }
411
- // Skip separator items
412
- if (this.CurrentItem instanceof UIMenuSeparatorItem &&
413
- this._isThereAnyItemExcludingSeparators()) {
414
- this.goUp();
415
- }
416
- else {
417
- this.CurrentItem.selected = true;
418
- this._playSoundAndReleaseId(this.Settings.audio.upDown, this.Settings.audio.library);
419
- this.indexChange.emit(this.CurrentSelection);
420
- }
421
- }
422
- goDown() {
423
- this.CurrentItem.selected = false;
424
- if (this.items.length > this._maxItemsOnScreen + 1) {
425
- if (this.CurrentSelection >= this._maxItem) {
426
- if (this.CurrentSelection === this.items.length - 1) {
427
- this._minItem = 0;
428
- this._maxItem = this._maxItemsOnScreen;
429
- this._activeItem = 1000 - (1000 % this.items.length);
430
- }
431
- else {
432
- this._minItem++;
433
- this._maxItem++;
434
- this._activeItem++;
435
- }
436
- }
437
- else {
438
- this._activeItem++;
439
- }
440
- }
441
- else {
442
- this._activeItem++;
443
- }
444
- // Skip separator items
445
- if (this.CurrentItem instanceof UIMenuSeparatorItem &&
446
- this._isThereAnyItemExcludingSeparators()) {
447
- this.goDown();
448
- }
449
- else {
450
- this.CurrentItem.selected = true;
451
- this._playSoundAndReleaseId(this.Settings.audio.upDown, this.Settings.audio.library);
452
- this.indexChange.emit(this.CurrentSelection);
453
- }
454
- }
455
- goBack() {
456
- this._playSoundAndReleaseId(this.Settings.audio.back, this.Settings.audio.library);
457
- this.visible = false;
458
- if (this.parentMenu != null) {
459
- this.parentMenu.visible = true;
460
- this.parentMenu._justOpened = true;
461
- this.parentMenu.menuOpen.emit();
462
- this.menuChange.emit(this.parentMenu, false);
463
- }
464
- this.menuClose.emit();
465
- }
466
- _processMouse() {
467
- if (!this.visible ||
468
- this._justOpened ||
469
- !this.items.length ||
470
- Game.CurrentInputMode === InputMode.GamePad ||
471
- !this.Settings.mouseControlsEnabled) {
472
- Game.enableControlThisFrame(0, Control.LookUp);
473
- Game.enableControlThisFrame(0, Control.LookDown);
474
- Game.enableControlThisFrame(0, Control.Attack);
475
- Game.enableControlThisFrame(0, Control.Aim);
476
- return;
477
- }
478
- Hud.showCursorThisFrame();
479
- if (this.Settings.mouseEdgeEnabled) {
480
- if (this.isMouseInBounds(new Point(), new Size(30, Menu.screenHeight), false)) {
481
- GameplayCamera.RelativeHeading += 1;
482
- Hud.CursorSprite = CursorSprite.LeftArrow;
483
- }
484
- else if (this.isMouseInBounds(new Point(Menu.screenWidth - 30), new Size(30, Menu.screenHeight), false)) {
485
- GameplayCamera.RelativeHeading -= 1;
486
- Hud.CursorSprite = CursorSprite.RightArrow;
487
- }
488
- else {
489
- Hud.CursorSprite = CursorSprite.Normal;
490
- }
491
- }
492
- if (this._mousePressed) {
493
- return;
494
- }
495
- let hoveredItem, hoveredItemIndex;
496
- const limit = this.items.length > this._maxItemsOnScreen + 1
497
- ? this._maxItem
498
- : this.items.length - 1;
499
- for (let i = this._minItem; i <= limit; i++) {
500
- const item = this.items[i];
501
- if (item instanceof UIMenuSeparatorItem) {
502
- continue;
503
- }
504
- if (!hoveredItem && item.IsMouseInBounds) {
505
- item.hovered = true;
506
- hoveredItem = item;
507
- hoveredItemIndex = i;
508
- }
509
- else {
510
- item.hovered = false;
511
- }
512
- }
513
- if (hoveredItem && Game.isDisabledControlJustPressed(0, Control.Attack)) {
514
- (async () => {
515
- this._mousePressed = true;
516
- if (hoveredItem.selected) {
517
- if (hoveredItem.enabled) {
518
- if (hoveredItem instanceof UIMenuListItem ||
519
- hoveredItem instanceof UIMenuSliderItem) {
520
- if (hoveredItem.IsMouseInBoundsOfLeftArrow) {
521
- this.goLeft();
522
- }
523
- else if (hoveredItem.IsMouseInBoundsOfRightArrow) {
524
- this.goRight();
525
- }
526
- else {
527
- this.selectItem();
528
- }
529
- }
530
- else {
531
- this.selectItem();
532
- }
533
- }
534
- else {
535
- this._playSoundAndReleaseId(this.Settings.audio.error, this.Settings.audio.library);
536
- }
537
- }
538
- else {
539
- this._playSoundAndReleaseId(this.Settings.audio.error, this.Settings.audio.library);
540
- this.CurrentSelection = hoveredItemIndex ?? 0;
541
- this.indexChange.emit(this.CurrentSelection);
542
- }
543
- await Wait(this._navigationDelay);
544
- while (Game.isDisabledControlPressed(0, Control.Attack) &&
545
- hoveredItem.IsMouseInBounds) {
546
- if (hoveredItem.selected) {
547
- if (hoveredItem.enabled) {
548
- if (hoveredItem instanceof UIMenuListItem ||
549
- hoveredItem instanceof UIMenuSliderItem) {
550
- if (hoveredItem.IsMouseInBoundsOfLeftArrow) {
551
- this.goLeft();
552
- }
553
- else if (hoveredItem.IsMouseInBoundsOfRightArrow) {
554
- this.goRight();
555
- }
556
- }
557
- }
558
- else {
559
- this._playSoundAndReleaseId(this.Settings.audio.error, this.Settings.audio.library);
560
- }
561
- }
562
- else {
563
- this._playSoundAndReleaseId(this.Settings.audio.error, this.Settings.audio.library);
564
- this.CurrentSelection = hoveredItemIndex ?? 0;
565
- this.indexChange.emit(this.CurrentSelection);
566
- }
567
- await Wait(125);
568
- }
569
- this._mousePressed = false;
570
- })();
571
- }
572
- if (this.items.length <= this._maxItemsOnScreen + 1 || this._mousePressed) {
573
- return;
574
- }
575
- if (this.isMouseInBounds(this._extraRectangleUp.pos, this._extraRectangleUp.size)) {
576
- this._extraRectangleUp.color = Color.fromRgb(30, 30, 30);
577
- if (Game.isDisabledControlJustPressed(0, Control.Attack)) {
578
- (async () => {
579
- this._mousePressed = true;
580
- this.goUp();
581
- await Wait(this._navigationDelay);
582
- while (Game.isDisabledControlPressed(0, Control.Attack)) {
583
- this.goUp();
584
- await Wait(125);
585
- }
586
- this._mousePressed = false;
587
- })();
588
- }
589
- }
590
- else {
591
- this._extraRectangleUp.color = new Color(0, 0, 0, 200);
592
- }
593
- if (this._mousePressed) {
594
- return;
595
- }
596
- if (this.isMouseInBounds(this._extraRectangleDown.pos, this._extraRectangleDown.size)) {
597
- this._extraRectangleDown.color = Color.fromRgb(30, 30, 30);
598
- if (Game.isDisabledControlJustPressed(0, Control.Attack)) {
599
- (async () => {
600
- this._mousePressed = true;
601
- this.goDown();
602
- await Wait(this._navigationDelay);
603
- while (Game.isDisabledControlPressed(0, Control.Attack)) {
604
- this.goDown();
605
- await Wait(125);
606
- }
607
- this._mousePressed = false;
608
- })();
609
- }
610
- }
611
- else {
612
- this._extraRectangleDown.color = new Color(0, 0, 0, 200);
613
- }
614
- }
615
- _processControl() {
616
- if (!this.visible) {
617
- return;
618
- }
619
- if (this._justOpened) {
620
- this._justOpened = false;
621
- return;
622
- }
623
- // Back
624
- if (this.Controls.back.Enabled &&
625
- Game.isDisabledControlJustReleased(0, Control.PhoneCancel)) {
626
- this.goBack();
627
- }
628
- if (this.items.length === 0) {
629
- return;
630
- }
631
- // Up
632
- if (this.Controls.up.Enabled &&
633
- (Game.isDisabledControlPressed(0, Control.PhoneUp) ||
634
- Game.isDisabledControlPressed(0, Control.CursorScrollUp)) &&
635
- this._lastUpDownNavigation + this._navigationDelay < Date.now()) {
636
- this._lastUpDownNavigation = Date.now();
637
- this.goUp();
638
- }
639
- // Down
640
- if (this.Controls.down.Enabled &&
641
- (Game.isDisabledControlPressed(0, Control.PhoneDown) ||
642
- Game.isDisabledControlPressed(0, Control.CursorScrollDown)) &&
643
- this._lastUpDownNavigation + this._navigationDelay < Date.now()) {
644
- this._lastUpDownNavigation = Date.now();
645
- this.goDown();
646
- }
647
- // Left
648
- if (this.Controls.left.Enabled &&
649
- Game.isDisabledControlPressed(0, Control.PhoneLeft) &&
650
- this._lastLeftRightNavigation + this._navigationDelay < Date.now()) {
651
- this._lastLeftRightNavigation = Date.now();
652
- this.goLeft();
653
- }
654
- // Right
655
- if (this.Controls.right.Enabled &&
656
- Game.isDisabledControlPressed(0, Control.PhoneRight) &&
657
- this._lastLeftRightNavigation + this._navigationDelay < Date.now()) {
658
- this._lastLeftRightNavigation = Date.now();
659
- this.goRight();
660
- }
661
- // Select
662
- if (this.Controls.select.Enabled &&
663
- Game.isDisabledControlJustPressed(0, Control.FrontendAccept)) {
664
- this.selectItem();
665
- }
666
- }
667
- _isThereAnyItemExcludingSeparators() {
668
- return !!this.items.filter((item) => !(item instanceof UIMenuSeparatorItem))
669
- .length;
670
- }
671
- _playSoundAndReleaseId(sound, set) {
672
- const soundId = Audio.playSoundFrontEnd(sound, set);
673
- Audio.releaseSound(soundId);
674
- }
675
- _disEnableControls() {
676
- Game.disableAllControlsThisFrame(InputMode.GamePad);
677
- for (const control of this._settings.enabledControls[Game.CurrentInputMode]) {
678
- Game.enableControlThisFrame(0, control);
679
- }
680
- }
681
- _recalculateUpAndDown() {
682
- const y = this._offset.Y;
683
- this._extraRectangleUp.pos.Y = 144 + 38 * (this._maxItemsOnScreen + 1) + y;
684
- this._extraRectangleDown.pos.Y =
685
- 144 + 18 + 38 * (this._maxItemsOnScreen + 1) + y;
686
- this._upAndDownSprite.pos.Y = 147 + 37 * (this._maxItemsOnScreen + 1) + y;
687
- }
688
- _recalculateDescriptionPosition() {
689
- let y = 149 + this._offset.Y;
690
- let count = this.items.length;
691
- if (count > this._maxItemsOnScreen + 1) {
692
- count = this._maxItemsOnScreen + 2;
693
- }
694
- y += 38 * count;
695
- this._descriptionBar.pos.Y = y;
696
- this._descriptionRectangle.pos.Y = y;
697
- this._descriptionText.pos.Y = y + 6;
698
- }
699
- _calculateItemHeight() {
700
- const y = 149 + this._offset.Y;
701
- let count = this.items.length;
702
- if (count > this._maxItemsOnScreen + 1) {
703
- count = this._maxItemsOnScreen + 2;
704
- }
705
- return y + 38 * count;
706
- }
707
- _calculatePanelPosition(hasDescription) {
708
- let height = 0;
709
- if (hasDescription) {
710
- height += this._descriptionRectangle.size.height + 5;
711
- }
712
- return this._calculateItemHeight() + height;
713
- }
714
- _render() {
715
- if (!this.visible || Game.IsPaused) {
716
- return;
717
- }
718
- if (this._justOpened) {
719
- if (this._logo != null && !this._logo.IsTextureDictionaryLoaded) {
720
- this._logo.loadTextureDictionary();
721
- }
722
- if (!this._background.IsTextureDictionaryLoaded) {
723
- this._background.loadTextureDictionary();
724
- }
725
- if (!this._descriptionRectangle.IsTextureDictionaryLoaded) {
726
- this._descriptionRectangle.loadTextureDictionary();
727
- }
728
- if (!this._upAndDownSprite.IsTextureDictionaryLoaded) {
729
- this._upAndDownSprite.loadTextureDictionary();
730
- }
731
- }
732
- SetScriptGfxAlign(this._alignment, 84);
733
- const menuWidth = (431 + this._widthOffset) / Menu.screenWidth;
734
- if (this.Settings.scaleWithSafezone) {
735
- SetScriptGfxAlignParams(0, 0, menuWidth, 0);
736
- const pos = GetScriptGfxPosition(0, 0);
737
- this._drawOffset.X = pos[0];
738
- this._drawOffset.Y = pos[1];
739
- }
740
- else {
741
- const sSize = (1 - GetSafeZoneSize()) / 2;
742
- if (this._alignment === MenuAlignment.Right) {
743
- SetScriptGfxAlignParams(sSize, -sSize, menuWidth, 0);
744
- const pos = GetScriptGfxPosition(0, 0);
745
- this._drawOffset.X = pos[0];
746
- this._drawOffset.Y = pos[1];
747
- }
748
- else {
749
- SetScriptGfxAlignParams(-sSize, -sSize, menuWidth, 0);
750
- const pos = GetScriptGfxPosition(0, 0);
751
- this._drawOffset.X = pos[0];
752
- this._drawOffset.Y = pos[1];
753
- }
754
- }
755
- this._mainMenu.draw(undefined, Menu.screenResolution);
756
- this._processControl();
757
- this._processMouse();
758
- if (this.Settings.controlDisablingEnabled) {
759
- this._disEnableControls();
760
- }
761
- this._background.size =
762
- this.items.length > this._maxItemsOnScreen + 1
763
- ? new Size(431 + this._widthOffset, 38 * (this._maxItemsOnScreen + 1))
764
- : new Size(431 + this._widthOffset, 38 * this.items.length);
765
- this._background.draw(Menu.screenResolution);
766
- if (this.items.length > 0) {
767
- let hasDescription = false;
768
- if (this.CurrentItem.Description && this.CurrentItem.Description !== "")
769
- hasDescription = true;
770
- this.CurrentItem.selected = true;
771
- if (hasDescription) {
772
- this._recalculateDescriptionPosition();
773
- this._descriptionText.caption = this.CurrentItem.FormattedDescription;
774
- const numLines = this._descriptionText.caption.split("\n").length;
775
- this._descriptionRectangle.size = new Size(431 + this._widthOffset, numLines * 25 + 15);
776
- this._descriptionBar.draw(undefined, Menu.screenResolution);
777
- this._descriptionRectangle.draw(Menu.screenResolution);
778
- this._descriptionText.draw(undefined, Menu.screenResolution);
779
- }
780
- if (this.CurrentItem.Panels && this.CurrentItem.Panels.length) {
781
- let offset = this._calculatePanelPosition(hasDescription);
782
- for (let i = 0; i < this.CurrentItem.Panels.length; i++) {
783
- if (i > 0) {
784
- offset += this.CurrentItem.Panels[i - 1].Height + 5;
785
- }
786
- this.CurrentItem.Panels[i].setVerticalPosition(offset);
787
- this.CurrentItem.Panels[i].draw();
788
- }
789
- }
790
- }
791
- if (this.items.length <= this._maxItemsOnScreen + 1) {
792
- let count = 0;
793
- for (const menuItem of this.items) {
794
- menuItem.setVerticalPosition(count * 38);
795
- menuItem.draw();
796
- count += 1;
797
- }
798
- if (this._counterText && this._counterOverride) {
799
- this._counterText.caption =
800
- this._counterPretext + this._counterOverride;
801
- this._counterText.draw(undefined, Menu.screenResolution);
802
- }
803
- }
804
- else {
805
- let count = 0;
806
- for (let index = this._minItem; index <= this._maxItem; index++) {
807
- const item = this.items[index];
808
- item.setVerticalPosition(count * 38);
809
- item.draw();
810
- count++;
811
- }
812
- this._recalculateUpAndDown();
813
- this._extraRectangleUp.draw(undefined, Menu.screenResolution);
814
- this._extraRectangleDown.draw(undefined, Menu.screenResolution);
815
- this._upAndDownSprite.draw(Menu.screenResolution);
816
- if (this._counterText) {
817
- if (!this._counterOverride) {
818
- const cap = `${this.CurrentSelection + 1} / ${this.items.length}`;
819
- this._counterText.caption = this._counterPretext + cap;
820
- }
821
- else {
822
- this._counterText.caption =
823
- this._counterPretext + this._counterOverride;
824
- }
825
- this._counterText.draw(undefined, Menu.screenResolution);
826
- }
827
- }
828
- this._logo.draw(Menu.screenResolution);
829
- ResetScriptGfxAlign();
830
- }
831
- }