fivem-js
Version:
Javascript/Typescript wrapper for the FiveM natives
126 lines (125 loc) • 5.97 kB
JavaScript
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.UIMenuPercentagePanel = void 0;
const utils_1 = require("../../../../utils");
const _1 = require("./");
const __1 = require("../../../");
const enums_1 = require("../../../../enums");
const __2 = require("../../../../");
class UIMenuPercentagePanel extends _1.AbstractUIMenuPanel {
constructor(title, percentage = 0, minText, maxText) {
super();
this._pressed = false;
this.background = new __1.Sprite('commonmenu', 'gradient_bgd', new utils_1.Point(), new utils_1.Size(431, 76));
const barSize = new utils_1.Size(413, 10);
this._activeBar = new __1.Rectangle(new utils_1.Point(), barSize, utils_1.Color.fromRgb(245, 245, 245));
this._backgroundBar = new __1.Rectangle(new utils_1.Point(), Object.assign({}, barSize), utils_1.Color.fromRgb(87, 87, 87));
this._title = new __1.Text('', new utils_1.Point(), 0.35, utils_1.Color.white, enums_1.Font.ChaletLondon, enums_1.Alignment.Centered);
this._minText = new __1.Text('', new utils_1.Point(), 0.35, utils_1.Color.white, enums_1.Font.ChaletLondon, enums_1.Alignment.Centered);
this._maxText = new __1.Text('', new utils_1.Point(), 0.35, utils_1.Color.white, enums_1.Font.ChaletLondon, enums_1.Alignment.Centered);
this.Title = title;
this.MinText = minText || '0%';
this.MaxText = maxText || '100%';
this.Percentage = percentage;
}
get Title() {
return this._title.caption;
}
set Title(value) {
this._title.caption = value ? value.trim() : '';
}
get MinText() {
return this._minText.caption;
}
set MinText(value) {
this._minText.caption = value ? value.trim() : '';
}
get MaxText() {
return this._maxText.caption;
}
set MaxText(value) {
this._maxText.caption = value ? value.trim() : '';
}
get Percentage() {
const progress = this._activeBar.size.width / this._backgroundBar.size.width;
return Math.round(progress * 100) / 100;
}
set Percentage(value) {
value = value || 0;
value = value < 0 ? 0 : value > 1 ? 1 : value;
this._activeBar.size.width = this._backgroundBar.size.width * value;
}
updateParentItem() {
const last = this._lastPercentage;
const current = this.Percentage;
if (last !== current) {
this._lastPercentage = current;
this.ParentMenu.panelActivated.emit(this.parentItem, this, current);
this.parentItem.panelActivated.emit(this, current);
}
}
setVerticalPosition(y) {
super.setVerticalPosition(y);
this._activeBar.pos.Y = y + 50;
this._backgroundBar.pos.Y = y + 50;
y += 15;
this._minText.pos.Y = y;
this._title.pos.Y = y;
this._maxText.pos.Y = y;
}
draw() {
if (this.enabled) {
super.draw();
const x = this.parentItem.offset.X + this.ParentMenu.WidthOffset / 2;
this._activeBar.pos.X = x + 9;
this._backgroundBar.pos.X = x + 9;
this._minText.pos.X = x + 25;
this._title.pos.X = x + 215.5;
this._maxText.pos.X = x + 398;
this._backgroundBar.draw(undefined, __1.Menu.screenResolution);
this._activeBar.draw(undefined, __1.Menu.screenResolution);
this._minText.draw(undefined, __1.Menu.screenResolution);
this._title.draw(undefined, __1.Menu.screenResolution);
this._maxText.draw(undefined, __1.Menu.screenResolution);
this._processControls();
}
}
_processControls() {
if (!this._pressed &&
__2.Game.isDisabledControlJustPressed(0, enums_1.Control.Attack) &&
this.ParentMenu.isMouseInBounds(new utils_1.Point(this._backgroundBar.pos.X, this._backgroundBar.pos.Y - 4), new utils_1.Size(this._backgroundBar.size.width, this._backgroundBar.size.height + 8))) {
this._pressed = true;
(() => __awaiter(this, void 0, void 0, function* () {
while (__2.Game.isDisabledControlPressed(0, enums_1.Control.Attack)) {
yield new Promise(resolve => setTimeout(resolve, 0));
this._activeBar.size.width = this._getProgress();
}
this.updateParentItem();
this._pressed = false;
}))();
const interval = setInterval(() => __awaiter(this, void 0, void 0, function* () {
if (__2.Game.isDisabledControlPressed(0, enums_1.Control.Attack)) {
this.updateParentItem();
}
else {
clearInterval(interval);
}
}), 75);
}
}
_getProgress() {
const drawOffset = this.ParentMenu.DrawOffset;
const progress = (GetControlNormal(0, 239) - drawOffset.X) * __1.Menu.screenWidth - this._activeBar.pos.X;
return progress < 0 ? 0 : progress > 413 ? 413 : progress;
}
}
exports.UIMenuPercentagePanel = UIMenuPercentagePanel;