@nativewrappers/fivem 0.0.80 → 0.0.82

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