@nativewrappers/client
Version:
Javascript/Typescript wrapper for the FiveM natives
1,091 lines (1,090 loc) • 43.7 kB
JavaScript
import { Menu } from '../';
import { Rectangle, Sprite, Text } from '../../';
import { Alignment, BadgeStyle, Font } from '../../../enums';
import { Color, Crypto, LiteEvent, Point, Size, String } from '../../../utils';
export class UIMenuItem {
constructor(text, description) {
this.id = Crypto.uuidv4();
this.enabled = true;
this.selected = false;
this.hovered = false;
this.offset = new Point(0, 0);
this.activated = new LiteEvent();
this.panelActivated = new LiteEvent();
this.supportsDescription = true;
this.supportsPanels = true;
this.supportsLeftBadge = true;
this.supportsRightBadge = true;
this.supportsRightLabel = true;
this._description = '';
this._formattedDescription = '';
this._backColor = UIMenuItem.defaultBackColor;
this._highlightedBackColor = UIMenuItem.defaultHighlightedBackColor;
this._foreColor = UIMenuItem.defaultForeColor;
this._highlightedForeColor = UIMenuItem.defaultHighlightedForeColor;
this._leftBadge = BadgeStyle.None;
this._rightBadge = BadgeStyle.None;
this._event = { event: '', args: [] };
this._panels = [];
this.rectangle = new Rectangle(new Point(), new Size(431, 38), this._backColor);
this.text = new Text('', new Point(), 0.33, this._foreColor, Font.ChaletLondon, Alignment.Left);
this.selectedSprite = new Sprite('commonmenu', 'gradient_nav', new Point(), new Size(431, 38), 0, this._highlightedBackColor);
this.badgeLeft = new Sprite('', '');
this.badgeRight = new Sprite('', '');
this.labelText = new Text('', new Point(), 0.35, this._foreColor, 0, Alignment.Right);
this.Text = text;
this.Description = description ?? '';
}
static badgeToTextureDict(badge) {
switch (badge) {
case BadgeStyle.Male:
case BadgeStyle.Female:
case BadgeStyle.AudioMute:
case BadgeStyle.AudioInactive:
case BadgeStyle.AudioVol1:
case BadgeStyle.AudioVol2:
case BadgeStyle.AudioVol3:
return 'mpleaderboard';
case BadgeStyle.InvArmWrestling:
case BadgeStyle.InvBasejump:
case BadgeStyle.InvMission:
case BadgeStyle.InvDarts:
case BadgeStyle.InvDeathmatch:
case BadgeStyle.InvDrug:
case BadgeStyle.InvCastle:
case BadgeStyle.InvGolf:
case BadgeStyle.InvBike:
case BadgeStyle.InvBoat:
case BadgeStyle.InvAnchor:
case BadgeStyle.InvCar:
case BadgeStyle.InvDollar:
case BadgeStyle.InvCoke:
case BadgeStyle.InvKey:
case BadgeStyle.InvData:
case BadgeStyle.InvHeli:
case BadgeStyle.InvHeorin:
case BadgeStyle.InvKeycard:
case BadgeStyle.InvMeth:
case BadgeStyle.InvBriefcase:
case BadgeStyle.InvLink:
case BadgeStyle.InvPerson:
case BadgeStyle.InvPlane:
case BadgeStyle.InvPlane2:
case BadgeStyle.InvQuestionmark:
case BadgeStyle.InvRemote:
case BadgeStyle.InvSafe:
case BadgeStyle.InvSteerWheel:
case BadgeStyle.InvWeapon:
case BadgeStyle.InvWeed:
case BadgeStyle.InvRaceFlagPlane:
case BadgeStyle.InvRaceFlagBicycle:
case BadgeStyle.InvRaceFlagBoatAnchor:
case BadgeStyle.InvRaceFlagPerson:
case BadgeStyle.InvRaceFlagCar:
case BadgeStyle.InvRaceFlagHelmet:
case BadgeStyle.InvShootingRange:
case BadgeStyle.InvSurvival:
case BadgeStyle.InvTeamDeathmatch:
case BadgeStyle.InvTennis:
case BadgeStyle.InvVehicleDeathmatch:
return 'mpinventory';
case BadgeStyle.Adversary:
case BadgeStyle.BaseJumping:
case BadgeStyle.Briefcase:
case BadgeStyle.MissionStar:
case BadgeStyle.Deathmatch:
case BadgeStyle.Castle:
case BadgeStyle.Trophy:
case BadgeStyle.RaceFlag:
case BadgeStyle.RaceFlagPlane:
case BadgeStyle.RaceFlagBicycle:
case BadgeStyle.RaceFlagPerson:
case BadgeStyle.RaceFlagCar:
case BadgeStyle.RaceFlagBoatAnchor:
case BadgeStyle.Rockstar:
case BadgeStyle.Stunt:
case BadgeStyle.StuntPremium:
case BadgeStyle.RaceFlagStuntJump:
case BadgeStyle.Shield:
case BadgeStyle.TeamDeathmatch:
case BadgeStyle.VehicleDeathmatch:
return 'commonmenutu';
case BadgeStyle.MpAmmoPickup:
case BadgeStyle.MpAmmo:
case BadgeStyle.MpCash:
case BadgeStyle.MpRp:
case BadgeStyle.MpSpectating:
return 'mphud';
case BadgeStyle.Sale:
return 'mpshopsale';
case BadgeStyle.GlobeWhite:
case BadgeStyle.GlobeRed:
case BadgeStyle.GlobeBlue:
case BadgeStyle.GlobeYellow:
case BadgeStyle.GlobeGreen:
case BadgeStyle.GlobeOrange:
return 'mprankbadge';
case BadgeStyle.CountryUsa:
case BadgeStyle.CountryUk:
case BadgeStyle.CountrySweden:
case BadgeStyle.CountryKorea:
case BadgeStyle.CountryJapan:
case BadgeStyle.CountryItaly:
case BadgeStyle.CountryGermany:
case BadgeStyle.CountryFrance:
case BadgeStyle.BrandAlbany:
case BadgeStyle.BrandAnnis:
case BadgeStyle.BrandBanshee:
case BadgeStyle.BrandBenefactor:
case BadgeStyle.BrandBf:
case BadgeStyle.BrandBollokan:
case BadgeStyle.BrandBravado:
case BadgeStyle.BrandBrute:
case BadgeStyle.BrandBuckingham:
case BadgeStyle.BrandCanis:
case BadgeStyle.BrandChariot:
case BadgeStyle.BrandCheval:
case BadgeStyle.BrandClassique:
case BadgeStyle.BrandCoil:
case BadgeStyle.BrandDeclasse:
case BadgeStyle.BrandDewbauchee:
case BadgeStyle.BrandDilettante:
case BadgeStyle.BrandDinka:
case BadgeStyle.BrandDundreary:
case BadgeStyle.BrandEmporer:
case BadgeStyle.BrandEnus:
case BadgeStyle.BrandFathom:
case BadgeStyle.BrandGalivanter:
case BadgeStyle.BrandGrotti:
case BadgeStyle.BrandHijak:
case BadgeStyle.BrandHvy:
case BadgeStyle.BrandImponte:
case BadgeStyle.BrandInvetero:
case BadgeStyle.BrandJacksheepe:
case BadgeStyle.BrandJobuilt:
case BadgeStyle.BrandKarin:
case BadgeStyle.BrandLampadati:
case BadgeStyle.BrandMaibatsu:
case BadgeStyle.BrandMammoth:
case BadgeStyle.BrandMtl:
case BadgeStyle.BrandNagasaki:
case BadgeStyle.BrandObey:
case BadgeStyle.BrandOcelot:
case BadgeStyle.BrandOverflod:
case BadgeStyle.BrandPed:
case BadgeStyle.BrandPegassi:
case BadgeStyle.BrandPfister:
case BadgeStyle.BrandPrincipe:
case BadgeStyle.BrandProgen:
case BadgeStyle.BrandSchyster:
case BadgeStyle.BrandShitzu:
case BadgeStyle.BrandSpeedophile:
case BadgeStyle.BrandStanley:
case BadgeStyle.BrandTruffade:
case BadgeStyle.BrandUbermacht:
case BadgeStyle.BrandVapid:
case BadgeStyle.BrandVulcar:
case BadgeStyle.BrandWeeny:
case BadgeStyle.BrandWestern:
case BadgeStyle.BrandWesternmotorcycle:
case BadgeStyle.BrandWillard:
case BadgeStyle.BrandZirconium:
return 'mpcarhud';
case BadgeStyle.BrandGrotti2:
case BadgeStyle.BrandLcc:
case BadgeStyle.BrandProgen2:
case BadgeStyle.BrandRune:
return 'mpcarhud2';
case BadgeStyle.Info:
return 'shared';
default:
return 'commonmenu';
}
}
static getBadgeSpriteWidthOffset(sprite) {
return (40 - sprite.size.width) / 2;
}
static getBadgeSpriteHeightOffset(sprite) {
return (40 - sprite.size.height) / 2;
}
static getBadgeSize(badge) {
switch (badge) {
case BadgeStyle.Cash:
case BadgeStyle.Coke:
case BadgeStyle.Crown:
case BadgeStyle.Heroin:
case BadgeStyle.Meth:
case BadgeStyle.Weed:
case BadgeStyle.Adversary:
case BadgeStyle.BaseJumping:
case BadgeStyle.Briefcase:
case BadgeStyle.MissionStar:
case BadgeStyle.Deathmatch:
case BadgeStyle.Castle:
case BadgeStyle.Trophy:
case BadgeStyle.RaceFlag:
case BadgeStyle.RaceFlagPlane:
case BadgeStyle.RaceFlagBicycle:
case BadgeStyle.RaceFlagPerson:
case BadgeStyle.RaceFlagCar:
case BadgeStyle.RaceFlagBoatAnchor:
case BadgeStyle.Rockstar:
case BadgeStyle.Stunt:
case BadgeStyle.StuntPremium:
case BadgeStyle.RaceFlagStuntJump:
case BadgeStyle.Shield:
case BadgeStyle.TeamDeathmatch:
case BadgeStyle.VehicleDeathmatch:
case BadgeStyle.AudioMute:
case BadgeStyle.AudioInactive:
case BadgeStyle.AudioVol1:
case BadgeStyle.AudioVol2:
case BadgeStyle.AudioVol3:
case BadgeStyle.BrandAlbany:
case BadgeStyle.BrandAnnis:
case BadgeStyle.BrandBanshee:
case BadgeStyle.BrandBenefactor:
case BadgeStyle.BrandBf:
case BadgeStyle.BrandBollokan:
case BadgeStyle.BrandBravado:
case BadgeStyle.BrandBrute:
case BadgeStyle.BrandBuckingham:
case BadgeStyle.BrandCanis:
case BadgeStyle.BrandChariot:
case BadgeStyle.BrandCheval:
case BadgeStyle.BrandClassique:
case BadgeStyle.BrandCoil:
case BadgeStyle.BrandDeclasse:
case BadgeStyle.BrandDewbauchee:
case BadgeStyle.BrandDilettante:
case BadgeStyle.BrandDinka:
case BadgeStyle.BrandDundreary:
case BadgeStyle.BrandEmporer:
case BadgeStyle.BrandEnus:
case BadgeStyle.BrandFathom:
case BadgeStyle.BrandGalivanter:
case BadgeStyle.BrandGrotti:
case BadgeStyle.BrandHijak:
case BadgeStyle.BrandHvy:
case BadgeStyle.BrandImponte:
case BadgeStyle.BrandInvetero:
case BadgeStyle.BrandJacksheepe:
case BadgeStyle.BrandJobuilt:
case BadgeStyle.BrandKarin:
case BadgeStyle.BrandLampadati:
case BadgeStyle.BrandMaibatsu:
case BadgeStyle.BrandMammoth:
case BadgeStyle.BrandMtl:
case BadgeStyle.BrandNagasaki:
case BadgeStyle.BrandObey:
case BadgeStyle.BrandOcelot:
case BadgeStyle.BrandOverflod:
case BadgeStyle.BrandPed:
case BadgeStyle.BrandPegassi:
case BadgeStyle.BrandPfister:
case BadgeStyle.BrandPrincipe:
case BadgeStyle.BrandProgen:
case BadgeStyle.BrandSchyster:
case BadgeStyle.BrandShitzu:
case BadgeStyle.BrandSpeedophile:
case BadgeStyle.BrandStanley:
case BadgeStyle.BrandTruffade:
case BadgeStyle.BrandUbermacht:
case BadgeStyle.BrandVapid:
case BadgeStyle.BrandVulcar:
case BadgeStyle.BrandWeeny:
case BadgeStyle.BrandWestern:
case BadgeStyle.BrandWesternmotorcycle:
case BadgeStyle.BrandWillard:
case BadgeStyle.BrandZirconium:
case BadgeStyle.BrandGrotti2:
case BadgeStyle.BrandLcc:
case BadgeStyle.BrandProgen2:
case BadgeStyle.BrandRune:
case BadgeStyle.CountryUsa:
case BadgeStyle.CountryUk:
case BadgeStyle.CountrySweden:
case BadgeStyle.CountryKorea:
case BadgeStyle.CountryJapan:
case BadgeStyle.CountryItaly:
case BadgeStyle.CountryGermany:
case BadgeStyle.CountryFrance:
return new Size(30, 30);
case BadgeStyle.MedalSilver:
case BadgeStyle.MpAmmoPickup:
case BadgeStyle.MpAmmo:
case BadgeStyle.MpCash:
case BadgeStyle.MpRp:
case BadgeStyle.GlobeWhite:
case BadgeStyle.GlobeBlue:
case BadgeStyle.GlobeGreen:
case BadgeStyle.GlobeOrange:
case BadgeStyle.GlobeRed:
case BadgeStyle.GlobeYellow:
case BadgeStyle.InvArmWrestling:
case BadgeStyle.InvBasejump:
case BadgeStyle.InvMission:
case BadgeStyle.InvDarts:
case BadgeStyle.InvDeathmatch:
case BadgeStyle.InvDrug:
case BadgeStyle.InvCastle:
case BadgeStyle.InvGolf:
case BadgeStyle.InvBike:
case BadgeStyle.InvBoat:
case BadgeStyle.InvAnchor:
case BadgeStyle.InvCar:
case BadgeStyle.InvDollar:
case BadgeStyle.InvCoke:
case BadgeStyle.InvKey:
case BadgeStyle.InvData:
case BadgeStyle.InvHeli:
case BadgeStyle.InvHeorin:
case BadgeStyle.InvKeycard:
case BadgeStyle.InvMeth:
case BadgeStyle.InvBriefcase:
case BadgeStyle.InvLink:
case BadgeStyle.InvPerson:
case BadgeStyle.InvPlane:
case BadgeStyle.InvPlane2:
case BadgeStyle.InvQuestionmark:
case BadgeStyle.InvRemote:
case BadgeStyle.InvSafe:
case BadgeStyle.InvSteerWheel:
case BadgeStyle.InvWeapon:
case BadgeStyle.InvWeed:
case BadgeStyle.InvRaceFlagPlane:
case BadgeStyle.InvRaceFlagBicycle:
case BadgeStyle.InvRaceFlagBoatAnchor:
case BadgeStyle.InvRaceFlagPerson:
case BadgeStyle.InvRaceFlagCar:
case BadgeStyle.InvRaceFlagHelmet:
case BadgeStyle.InvShootingRange:
case BadgeStyle.InvSurvival:
case BadgeStyle.InvTeamDeathmatch:
case BadgeStyle.InvTennis:
case BadgeStyle.InvVehicleDeathmatch:
return new Size(25, 25);
default:
return new Size(40, 40);
}
}
get Text() {
return this.text.caption;
}
set Text(value) {
this.text.caption = value ? value.trim() : '';
}
get Description() {
if (!this.supportsDescription) {
return '';
}
return this._description;
}
set Description(value) {
if (!this.supportsDescription) {
throw new Error('This item does not support description');
}
this._description = value ? value.trim() : '';
this.formatDescription();
}
get FormattedDescription() {
return this._formattedDescription;
}
get BackColor() {
return this._backColor;
}
set BackColor(value) {
value = value || this._backColor;
this._backColor = value;
this.rectangle.color = value;
}
get HighlightedBackColor() {
return this._highlightedBackColor;
}
set HighlightedBackColor(value) {
value = value || this._highlightedBackColor;
this._highlightedBackColor = value;
this.selectedSprite.color = value;
}
get ForeColor() {
return this._foreColor;
}
set ForeColor(value) {
value = value || this._foreColor;
this._foreColor = value;
this.text.color = value;
}
get HighlightedForeColor() {
return this._highlightedForeColor;
}
set HighlightedForeColor(value) {
this._highlightedForeColor = value || this._highlightedForeColor;
}
get LeftBadge() {
if (!this.supportsLeftBadge) {
return BadgeStyle.None;
}
return this._leftBadge;
}
set LeftBadge(value) {
if (!this.supportsLeftBadge) {
throw new Error('This item does not support left badge');
}
value = Number(value);
this._leftBadge = value;
this.badgeLeft.TextureDict = UIMenuItem.badgeToTextureDict(value);
this.badgeLeft.size = UIMenuItem.getBadgeSize(value);
}
get RightBadge() {
if (!this.supportsRightBadge) {
return BadgeStyle.None;
}
return this._rightBadge;
}
set RightBadge(value) {
if (!this.supportsRightBadge) {
throw new Error('This item does not support right badge');
}
value = Number(value);
this._rightBadge = value;
this.badgeRight.TextureDict = UIMenuItem.badgeToTextureDict(value);
this.badgeRight.size = UIMenuItem.getBadgeSize(value);
}
get RightLabel() {
if (!this.supportsRightLabel) {
return '';
}
return this.labelText.caption;
}
set RightLabel(value) {
if (!this.supportsRightLabel) {
throw new Error('This item does not support right label');
}
this.labelText.caption = value ? value.trim() : '';
}
get IsMouseInBounds() {
return this.parent
? this.parent.isMouseInBounds(this.rectangle.pos, this.rectangle.size)
: false;
}
get Panels() {
if (!this.supportsPanels) {
return [];
}
return this._panels;
}
set Panels(value) {
if (!this.supportsPanels) {
throw new Error('This item does not support panels');
}
this._panels = value;
}
addPanel(panel) {
if (!this.supportsPanels) {
throw new Error('This item does not support panels');
}
const panels = Array.isArray(panel) ? panel : [panel];
panels.forEach(p => {
p.ParentItem = this;
});
this._panels.push(...panels);
}
findPanelIndex(panel) {
if (!this.supportsPanels) {
throw new Error('This item does not support panels');
}
const index = this._panels.findIndex(p => p.id === panel.id);
return index !== -1 ? index : 0;
}
removePanel(panelOrIndex) {
if (!this.supportsPanels) {
throw new Error('This item does not support panels');
}
if (typeof panelOrIndex === 'number') {
this._panels = this._panels.filter((p, index) => index !== panelOrIndex);
}
else {
this._panels = this._panels.filter(p => p.id !== panelOrIndex.id);
}
}
addEvent(event, ...args) {
this._event = { event, args };
}
fireEvent() {
if (this._event) {
TriggerEvent(this._event.event, ...this._event.args);
}
}
formatDescription() {
if (!this.parent) {
return;
}
let input = this._description;
if (input.length > 99) {
input = input.slice(0, 99);
}
const maxPixelsPerLine = 425 + this.parent.WidthOffset;
let aggregatePixels = 0;
let output = '';
const words = input.split(' ');
const spaceWidth = String.measureString(' ', Font.ChaletLondon, 0.33, Menu.screenWidth);
for (const word of words) {
const offset = String.measureString(word, Font.ChaletLondon, 0.33, Menu.screenWidth);
aggregatePixels += offset;
if (aggregatePixels > maxPixelsPerLine) {
output = `${output} \n${word} `;
aggregatePixels = offset + spaceWidth;
}
else {
output = `${output}${word} `;
aggregatePixels += spaceWidth;
}
}
this._formattedDescription = output;
}
badgeToTextureName(badge) {
const selected = this.selected;
switch (badge) {
case BadgeStyle.None:
return '';
case BadgeStyle.Ammo:
return selected ? 'shop_ammo_icon_b' : 'shop_ammo_icon_a';
case BadgeStyle.Armor:
return selected ? 'shop_armour_icon_b' : 'shop_armour_icon_a';
case BadgeStyle.Barber:
return selected ? 'shop_barber_icon_b' : 'shop_barber_icon_a';
case BadgeStyle.Bike:
return selected ? 'shop_garage_bike_icon_b' : 'shop_garage_bike_icon_a';
case BadgeStyle.Car:
return selected ? 'shop_garage_icon_b' : 'shop_garage_icon_a';
case BadgeStyle.Cash:
return 'mp_specitem_cash';
case BadgeStyle.Clothing:
return selected ? 'shop_clothing_icon_b' : 'shop_clothing_icon_a';
case BadgeStyle.Coke:
return 'mp_specitem_coke';
case BadgeStyle.Crown:
return 'mp_hostcrown';
case BadgeStyle.Franklin:
return selected ? 'shop_franklin_icon_b' : 'shop_franklin_icon_a';
case BadgeStyle.Gun:
return selected ? 'shop_gunclub_icon_b' : 'shop_gunclub_icon_a';
case BadgeStyle.HealthHeart:
return selected ? 'shop_health_icon_b' : 'shop_health_icon_a';
case BadgeStyle.Heroin:
return 'mp_specitem_heroin';
case BadgeStyle.Lock:
return 'shop_lock';
case BadgeStyle.MakeupBrush:
return selected ? 'shop_makeup_icon_b' : 'shop_makeup_icon_a';
case BadgeStyle.Mask:
return selected ? 'shop_mask_icon_b' : 'shop_mask_icon_a';
case BadgeStyle.MedalBronze:
return 'mp_medal_bronze';
case BadgeStyle.MedalGold:
return 'mp_medal_gold';
case BadgeStyle.MedalSilver:
return 'mp_medal_silver';
case BadgeStyle.Meth:
return 'mp_specitem_meth';
case BadgeStyle.Michael:
return selected ? 'shop_michael_icon_b' : 'shop_michael_icon_a';
case BadgeStyle.Star:
return 'shop_new_star';
case BadgeStyle.Tattoo:
return selected ? 'shop_tattoos_icon_b' : 'shop_tattoos_icon_a';
case BadgeStyle.Tick:
return 'shop_tick_icon';
case BadgeStyle.Trevor:
return selected ? 'shop_trevor_icon_b' : 'shop_trevor_icon_a';
case BadgeStyle.Warning:
return 'mp_alerttriangle';
case BadgeStyle.Weed:
return 'mp_specitem_weed';
case BadgeStyle.Male:
return 'leaderboard_male_icon';
case BadgeStyle.Female:
return 'leaderboard_female_icon';
case BadgeStyle.LockArena:
return 'shop_lock_arena';
case BadgeStyle.Adversary:
return 'adversary';
case BadgeStyle.BaseJumping:
return 'base_jumping';
case BadgeStyle.Briefcase:
return 'capture_the_flag';
case BadgeStyle.MissionStar:
return 'custom_mission';
case BadgeStyle.Deathmatch:
return 'deathmatch';
case BadgeStyle.Castle:
return 'gang_attack';
case BadgeStyle.Trophy:
return 'last_team_standing';
case BadgeStyle.RaceFlag:
return 'race';
case BadgeStyle.RaceFlagPlane:
return 'race_air';
case BadgeStyle.RaceFlagBicycle:
return 'race_bicycle';
case BadgeStyle.RaceFlagPerson:
return 'race_foot';
case BadgeStyle.RaceFlagCar:
return 'race_land';
case BadgeStyle.RaceFlagBoatAnchor:
return 'race_water';
case BadgeStyle.Rockstar:
return 'rockstar';
case BadgeStyle.Stunt:
return 'stunt';
case BadgeStyle.StuntPremium:
return 'stunt_premium';
case BadgeStyle.RaceFlagStuntJump:
return 'stunt_race';
case BadgeStyle.Shield:
return 'survival';
case BadgeStyle.TeamDeathmatch:
return 'team_deathmatch';
case BadgeStyle.VehicleDeathmatch:
return 'vehicle_deathmatch';
case BadgeStyle.MpAmmoPickup:
return 'ammo_pickup';
case BadgeStyle.MpAmmo:
return 'mp_anim_ammo';
case BadgeStyle.MpCash:
return 'mp_anim_cash';
case BadgeStyle.MpRp:
return 'mp_anim_rp';
case BadgeStyle.MpSpectating:
return 'spectating';
case BadgeStyle.Sale:
return 'saleicon';
case BadgeStyle.GlobeWhite:
case BadgeStyle.GlobeRed:
case BadgeStyle.GlobeBlue:
case BadgeStyle.GlobeYellow:
case BadgeStyle.GlobeGreen:
case BadgeStyle.GlobeOrange:
return 'globe';
case BadgeStyle.InvArmWrestling:
return 'arm_wrestling';
case BadgeStyle.InvBasejump:
return 'basejump';
case BadgeStyle.InvMission:
return 'custom_mission';
case BadgeStyle.InvDarts:
return 'darts';
case BadgeStyle.InvDeathmatch:
return 'deathmatch';
case BadgeStyle.InvDrug:
return 'drug_trafficking';
case BadgeStyle.InvCastle:
return 'gang_attack';
case BadgeStyle.InvGolf:
return 'golf';
case BadgeStyle.InvBike:
return 'mp_specitem_bike';
case BadgeStyle.InvBoat:
return 'mp_specitem_boat';
case BadgeStyle.InvAnchor:
return 'mp_specitem_boatpickup';
case BadgeStyle.InvCar:
return 'mp_specitem_car';
case BadgeStyle.InvDollar:
return 'mp_specitem_cash';
case BadgeStyle.InvCoke:
return 'mp_specitem_coke';
case BadgeStyle.InvKey:
return 'mp_specitem_cuffkeys';
case BadgeStyle.InvData:
return 'mp_specitem_data';
case BadgeStyle.InvHeli:
return 'mp_specitem_heli';
case BadgeStyle.InvHeorin:
return 'mp_specitem_heroin';
case BadgeStyle.InvKeycard:
return 'mp_specitem_keycard';
case BadgeStyle.InvMeth:
return 'mp_specitem_meth';
case BadgeStyle.InvBriefcase:
return 'mp_specitem_package';
case BadgeStyle.InvLink:
return 'mp_specitem_partnericon';
case BadgeStyle.InvPerson:
return 'mp_specitem_ped';
case BadgeStyle.InvPlane:
return 'mp_specitem_plane';
case BadgeStyle.InvPlane2:
return 'mp_specitem_plane2';
case BadgeStyle.InvQuestionmark:
return 'mp_specitem_randomobject';
case BadgeStyle.InvRemote:
return 'mp_specitem_remote';
case BadgeStyle.InvSafe:
return 'mp_specitem_safe';
case BadgeStyle.InvSteerWheel:
return 'mp_specitem_steer_wheel';
case BadgeStyle.InvWeapon:
return 'mp_specitem_weapons';
case BadgeStyle.InvWeed:
return 'mp_specitem_weed';
case BadgeStyle.InvRaceFlagPlane:
return 'race_air';
case BadgeStyle.InvRaceFlagBicycle:
return 'race_bike';
case BadgeStyle.InvRaceFlagBoatAnchor:
return 'race_boat';
case BadgeStyle.InvRaceFlagPerson:
return 'race_foot';
case BadgeStyle.InvRaceFlagCar:
return 'race_land';
case BadgeStyle.InvRaceFlagHelmet:
return 'race_offroad';
case BadgeStyle.InvShootingRange:
return 'shooting_range';
case BadgeStyle.InvSurvival:
return 'survival';
case BadgeStyle.InvTeamDeathmatch:
return 'team_deathmatch';
case BadgeStyle.InvTennis:
return 'tennis';
case BadgeStyle.InvVehicleDeathmatch:
return 'vehicle_deathmatch';
case BadgeStyle.AudioMute:
return 'leaderboard_audio_mute';
case BadgeStyle.AudioInactive:
return 'leaderboard_audio_inactive';
case BadgeStyle.AudioVol1:
return 'leaderboard_audio_1';
case BadgeStyle.AudioVol2:
return 'leaderboard_audio_2';
case BadgeStyle.AudioVol3:
return 'leaderboard_audio_3';
case BadgeStyle.CountryUsa:
return 'vehicle_card_icons_flag_usa';
case BadgeStyle.CountryUk:
return 'vehicle_card_icons_flag_uk';
case BadgeStyle.CountrySweden:
return 'vehicle_card_icons_flag_sweden';
case BadgeStyle.CountryKorea:
return 'vehicle_card_icons_flag_korea';
case BadgeStyle.CountryJapan:
return 'vehicle_card_icons_flag_japan';
case BadgeStyle.CountryItaly:
return 'vehicle_card_icons_flag_italy';
case BadgeStyle.CountryGermany:
return 'vehicle_card_icons_flag_germany';
case BadgeStyle.CountryFrance:
return 'vehicle_card_icons_flag_france';
case BadgeStyle.BrandAlbany:
return 'albany';
case BadgeStyle.BrandAnnis:
return 'annis';
case BadgeStyle.BrandBanshee:
return 'banshee';
case BadgeStyle.BrandBenefactor:
return 'benefactor';
case BadgeStyle.BrandBf:
return 'bf';
case BadgeStyle.BrandBollokan:
return 'bollokan';
case BadgeStyle.BrandBravado:
return 'bravado';
case BadgeStyle.BrandBrute:
return 'brute';
case BadgeStyle.BrandBuckingham:
return 'buckingham';
case BadgeStyle.BrandCanis:
return 'canis';
case BadgeStyle.BrandChariot:
return 'chariot';
case BadgeStyle.BrandCheval:
return 'cheval';
case BadgeStyle.BrandClassique:
return 'classique';
case BadgeStyle.BrandCoil:
return 'coil';
case BadgeStyle.BrandDeclasse:
return 'declasse';
case BadgeStyle.BrandDewbauchee:
return 'dewbauchee';
case BadgeStyle.BrandDilettante:
return 'dilettante';
case BadgeStyle.BrandDinka:
return 'dinka';
case BadgeStyle.BrandDundreary:
return 'dundreary';
case BadgeStyle.BrandEmporer:
return 'emporer';
case BadgeStyle.BrandEnus:
return 'enus';
case BadgeStyle.BrandFathom:
return 'fathom';
case BadgeStyle.BrandGalivanter:
return 'galivanter';
case BadgeStyle.BrandGrotti:
return 'grotti';
case BadgeStyle.BrandHijak:
return 'hijak';
case BadgeStyle.BrandHvy:
return 'hvy';
case BadgeStyle.BrandImponte:
return 'imponte';
case BadgeStyle.BrandInvetero:
return 'invetero';
case BadgeStyle.BrandJacksheepe:
return 'jacksheepe';
case BadgeStyle.BrandJobuilt:
return 'jobuilt';
case BadgeStyle.BrandKarin:
return 'karin';
case BadgeStyle.BrandLampadati:
return 'lampadati';
case BadgeStyle.BrandMaibatsu:
return 'maibatsu';
case BadgeStyle.BrandMammoth:
return 'mammoth';
case BadgeStyle.BrandMtl:
return 'mtl';
case BadgeStyle.BrandNagasaki:
return 'nagasaki';
case BadgeStyle.BrandObey:
return 'obey';
case BadgeStyle.BrandOcelot:
return 'ocelot';
case BadgeStyle.BrandOverflod:
return 'overflod';
case BadgeStyle.BrandPed:
return 'ped';
case BadgeStyle.BrandPegassi:
return 'pegassi';
case BadgeStyle.BrandPfister:
return 'pfister';
case BadgeStyle.BrandPrincipe:
return 'principe';
case BadgeStyle.BrandProgen:
return 'progen';
case BadgeStyle.BrandSchyster:
return 'schyster';
case BadgeStyle.BrandShitzu:
return 'shitzu';
case BadgeStyle.BrandSpeedophile:
return 'speedophile';
case BadgeStyle.BrandStanley:
return 'stanley';
case BadgeStyle.BrandTruffade:
return 'truffade';
case BadgeStyle.BrandUbermacht:
return 'ubermacht';
case BadgeStyle.BrandVapid:
return 'vapid';
case BadgeStyle.BrandVulcar:
return 'vulcar';
case BadgeStyle.BrandWeeny:
return 'weeny';
case BadgeStyle.BrandWestern:
return 'western';
case BadgeStyle.BrandWesternmotorcycle:
return 'westernmotorcycle';
case BadgeStyle.BrandWillard:
return 'willard';
case BadgeStyle.BrandZirconium:
return 'zirconium';
case BadgeStyle.BrandGrotti2:
return 'grotti_2';
case BadgeStyle.BrandLcc:
return 'lcc';
case BadgeStyle.BrandProgen2:
return 'progen';
case BadgeStyle.BrandRune:
return 'rune';
case BadgeStyle.Info:
return 'info_icon_32';
default:
return '';
}
}
badgeToColor(badge) {
const selected = this.selected;
const enabled = this.enabled;
switch (badge) {
case BadgeStyle.Crown:
case BadgeStyle.Tick:
case BadgeStyle.Male:
case BadgeStyle.Female:
case BadgeStyle.Lock:
case BadgeStyle.LockArena:
case BadgeStyle.Adversary:
case BadgeStyle.BaseJumping:
case BadgeStyle.Briefcase:
case BadgeStyle.MissionStar:
case BadgeStyle.Deathmatch:
case BadgeStyle.Castle:
case BadgeStyle.Trophy:
case BadgeStyle.RaceFlag:
case BadgeStyle.RaceFlagPlane:
case BadgeStyle.RaceFlagBicycle:
case BadgeStyle.RaceFlagPerson:
case BadgeStyle.RaceFlagCar:
case BadgeStyle.RaceFlagBoatAnchor:
case BadgeStyle.Rockstar:
case BadgeStyle.Stunt:
case BadgeStyle.StuntPremium:
case BadgeStyle.RaceFlagStuntJump:
case BadgeStyle.Shield:
case BadgeStyle.TeamDeathmatch:
case BadgeStyle.VehicleDeathmatch:
case BadgeStyle.MpSpectating:
case BadgeStyle.GlobeWhite:
case BadgeStyle.AudioMute:
case BadgeStyle.AudioInactive:
case BadgeStyle.AudioVol1:
case BadgeStyle.AudioVol2:
case BadgeStyle.AudioVol3:
case BadgeStyle.BrandAlbany:
case BadgeStyle.BrandAnnis:
case BadgeStyle.BrandBanshee:
case BadgeStyle.BrandBenefactor:
case BadgeStyle.BrandBf:
case BadgeStyle.BrandBollokan:
case BadgeStyle.BrandBravado:
case BadgeStyle.BrandBrute:
case BadgeStyle.BrandBuckingham:
case BadgeStyle.BrandCanis:
case BadgeStyle.BrandChariot:
case BadgeStyle.BrandCheval:
case BadgeStyle.BrandClassique:
case BadgeStyle.BrandCoil:
case BadgeStyle.BrandDeclasse:
case BadgeStyle.BrandDewbauchee:
case BadgeStyle.BrandDilettante:
case BadgeStyle.BrandDinka:
case BadgeStyle.BrandDundreary:
case BadgeStyle.BrandEmporer:
case BadgeStyle.BrandEnus:
case BadgeStyle.BrandFathom:
case BadgeStyle.BrandGalivanter:
case BadgeStyle.BrandGrotti:
case BadgeStyle.BrandHijak:
case BadgeStyle.BrandHvy:
case BadgeStyle.BrandImponte:
case BadgeStyle.BrandInvetero:
case BadgeStyle.BrandJacksheepe:
case BadgeStyle.BrandJobuilt:
case BadgeStyle.BrandKarin:
case BadgeStyle.BrandLampadati:
case BadgeStyle.BrandMaibatsu:
case BadgeStyle.BrandMammoth:
case BadgeStyle.BrandMtl:
case BadgeStyle.BrandNagasaki:
case BadgeStyle.BrandObey:
case BadgeStyle.BrandOcelot:
case BadgeStyle.BrandOverflod:
case BadgeStyle.BrandPed:
case BadgeStyle.BrandPegassi:
case BadgeStyle.BrandPfister:
case BadgeStyle.BrandPrincipe:
case BadgeStyle.BrandProgen:
case BadgeStyle.BrandSchyster:
case BadgeStyle.BrandShitzu:
case BadgeStyle.BrandSpeedophile:
case BadgeStyle.BrandStanley:
case BadgeStyle.BrandTruffade:
case BadgeStyle.BrandUbermacht:
case BadgeStyle.BrandVapid:
case BadgeStyle.BrandVulcar:
case BadgeStyle.BrandWeeny:
case BadgeStyle.BrandWestern:
case BadgeStyle.BrandWesternmotorcycle:
case BadgeStyle.BrandWillard:
case BadgeStyle.BrandZirconium:
case BadgeStyle.BrandGrotti2:
case BadgeStyle.BrandLcc:
case BadgeStyle.BrandProgen2:
case BadgeStyle.BrandRune:
return selected
? enabled
? Color.black
: Color.fromRgb(50, 50, 50)
: enabled
? Color.white
: Color.fromRgb(109, 109, 109);
case BadgeStyle.GlobeBlue:
return enabled ? Color.fromRgb(10, 103, 166) : Color.fromRgb(11, 62, 117);
case BadgeStyle.GlobeGreen:
return enabled ? Color.fromRgb(10, 166, 85) : Color.fromRgb(5, 71, 22);
case BadgeStyle.GlobeOrange:
return enabled ? Color.fromRgb(232, 145, 14) : Color.fromRgb(133, 77, 12);
case BadgeStyle.GlobeRed:
return enabled ? Color.fromRgb(207, 43, 31) : Color.fromRgb(110, 7, 7);
case BadgeStyle.GlobeYellow:
return enabled ? Color.fromRgb(232, 207, 14) : Color.fromRgb(131, 133, 12);
default:
return enabled ? Color.white : Color.fromRgb(109, 109, 109);
}
}
setVerticalPosition(y) {
const yOffset = y + this.offset.Y;
this.rectangle.pos.Y = yOffset + 144;
this.selectedSprite.pos.Y = yOffset + 144;
this.text.pos.Y = yOffset + 147;
this.badgeLeft.pos.Y = yOffset + 142 + UIMenuItem.getBadgeSpriteHeightOffset(this.badgeLeft);
this.badgeRight.pos.Y = yOffset + 142 + UIMenuItem.getBadgeSpriteHeightOffset(this.badgeRight);
this.labelText.pos.Y = yOffset + 148;
}
draw() {
if (this.selected) {
this.selectedSprite.size.width = 431 + (this.parent ? this.parent.WidthOffset : 0);
this.selectedSprite.pos.X = this.offset.X;
this.selectedSprite.draw(Menu.screenResolution);
}
else {
this.rectangle.size.width = 431 + (this.parent ? this.parent.WidthOffset : 0);
this.rectangle.pos.X = this.offset.X;
this.rectangle.color = this.hovered ? UIMenuItem.defaultHoveredBackColor : this._backColor;
this.rectangle.draw(undefined, Menu.screenResolution);
}
this.text.color = this.enabled
? this.selected
? this._highlightedForeColor
: this.hovered
? UIMenuItem.defaultHoveredForeColor
: this._foreColor
: new Color(255, 163, 159, 148);
if (this.supportsLeftBadge && this._leftBadge !== BadgeStyle.None) {
const widthOffset = UIMenuItem.getBadgeSpriteWidthOffset(this.badgeLeft);
this.badgeLeft.pos.X = this.offset.X + widthOffset;
this.text.pos.X = this.offset.X + 40;
this.badgeLeft.textureName = this.badgeToTextureName(this._leftBadge);
this.badgeLeft.color = this.badgeToColor(this._leftBadge);
this.badgeLeft.draw(Menu.screenResolution);
}
else {
this.text.pos.X = this.offset.X + 8;
}
if (this.supportsRightBadge && this._rightBadge !== BadgeStyle.None) {
this.labelText.pos.X = -40;
const widthOffset = UIMenuItem.getBadgeSpriteWidthOffset(this.badgeRight);
this.badgeRight.pos.X = 431 + this.offset.X + (this.parent ? this.parent.WidthOffset : 0);
this.badgeRight.pos.X -= this.badgeRight.size.width + widthOffset;
this.badgeRight.textureName = this.badgeToTextureName(this._rightBadge);
this.badgeRight.color = this.badgeToColor(this._rightBadge);
this.badgeRight.draw(Menu.screenResolution);
}
else {
this.labelText.pos.X = -11;
}
if (this.supportsRightLabel && this.labelText.caption !== '') {
this.labelText.pos.X += 431 + this.offset.X + (this.parent ? this.parent.WidthOffset : 0);
this.labelText.color = this.text.color;
this.labelText.draw(undefined, Menu.screenResolution);
}
this.text.draw(undefined, Menu.screenResolution);
}
}
UIMenuItem.defaultBackColor = Color.empty;
UIMenuItem.defaultHighlightedBackColor = Color.white;
UIMenuItem.defaultHoveredBackColor = new Color(20, 255, 255, 255);
UIMenuItem.defaultForeColor = Color.whiteSmoke;
UIMenuItem.defaultHoveredForeColor = UIMenuItem.defaultForeColor;
UIMenuItem.defaultHighlightedForeColor = Color.black;