brainwashing-school/js/plugins/MOG_MenuCursorBorder.js
2025-02-25 10:53:19 -06:00

520 lines
16 KiB
JavaScript

//=============================================================================
// MOG_MenuCursorBorder.js
//=============================================================================
/*:
* @target MZ
* @plugindesc (v1.0) Adiciona bordas na seleção de comandos.
* @author Moghunter
* @url https://mogplugins.wordpress.com
*
* @param Border Visible
* @desc Apresentar o borda.
* @type boolean
* @default true
*
* @param Border Line Visible
* @desc Apresentar a linha da borda.
* @type boolean
* @default true
*
* @param Border Animation
* @desc Ativar animação de deslize.
* @type boolean
* @default false
*
* @param X-Axis Offset
* @desc Definição X-axis do cursor.
* @default 0
*
* @param Y-Axis Offset
* @desc Definição Y-axis do cursor.
* @default 0
*
* @param Border X-Space
* @desc Definição X-axis da borda cursor.
* @default 4
*
* @param Border Y-Space
* @desc Definição Y-axis da borda cursor.
* @default 4
*
* @help
* =============================================================================
* ♦♦♦ MOG - Menu Cursor Border ♦♦♦
* Author - Moghunter
* Version - 1.0
* Updated - 2020/10/18
* https://mogplugins.wordpress.com
* =============================================================================
* Adiciona bordas na seleção de comandos.
* =============================================================================
* UTILIZAÇÃO
* =============================================================================
* Serão necessários as imagens. (/img/menus/)
*
* CursorBorderA.png
* CursorBorderB.png
*
*/
(() => {
//=============================================================================
// ** PLUGIN PARAMETERS
//=============================================================================
var Imported = Imported || {};
Imported.MOG_MenuSelectBorder = true;
var Moghunter = Moghunter || {};
Moghunter.parameters = PluginManager.parameters("MOG_MenuCursorBorder");
Moghunter.cborder_Visible = String(
Moghunter.parameters["Border Visible"] || "true"
);
Moghunter.cborder_Slide = String(
Moghunter.parameters["Border Animation"] || "false"
);
Moghunter.cborder_Line = String(
Moghunter.parameters["Border Line Visible"] || "true"
);
Moghunter.cborder_Xaxis = Number(Moghunter.parameters["X-Axis Offset"] || 0);
Moghunter.cborder_Yaxis = Number(Moghunter.parameters["Y-Axis Offset"] || 0);
Moghunter.cborder_LayoutXaxis = Number(
Moghunter.parameters["Border X-Space"] || 4
);
Moghunter.cborder_LayoutYaxis = Number(
Moghunter.parameters["Border Y-Space"] || 4
);
//=============================================================================
// ■■■ ImageManager ■■■
//=============================================================================
//==============================
// * Menus
//==============================
ImageManager.loadMenus = function (filename) {
return this.loadBitmap("img/menus/", filename);
};
//=============================================================================
// ■■■ Window Selectable ■■■
//=============================================================================
//==============================
// ♦ ALIAS ♦ Initialize
//==============================
var _mog_sprSel_winSel_initialize = Window_Selectable.prototype.initialize;
Window_Selectable.prototype.initialize = function (rect) {
_mog_sprSel_winSel_initialize.call(this, rect);
this.createSprSelMenu();
};
//==============================
// * cursor Border Set Child
//==============================
Window_Selectable.prototype.cursorBorderSetChild = function () {
var id = 3;
if (Imported.MOG_Scrollbar) {
id = 4;
}
if (id > this.children.length) {
id = this.children.length;
}
return id;
};
//==============================
// * Create Spr Sel
//==============================
Window_Selectable.prototype.createSprSelMenu = function () {
this._refCursorSel = false;
this._spriteSelMenu = new SpriteSelectionMenu(this);
var id = this.cursorBorderSetChild();
this.addChildAt(this._spriteSelMenu, id);
};
//==============================
// ♦ ALIAS ♦ set Cursor Rect
//==============================
var _mog_sprSel_setCursorRect = Window_Selectable.prototype.setCursorRect;
Window_Selectable.prototype.setCursorRect = function (x, y, width, height) {
_mog_sprSel_setCursorRect.call(this, x, y, width, height);
this._refCursorSel = true;
};
//==============================
// ♦ ALIAS ♦ select
//==============================
var _mog_sprSel_wsel_select = Window_Selectable.prototype.select;
Window_Selectable.prototype.select = function (index) {
_mog_sprSel_wsel_select.call(this, index);
if (this._spriteSelMenu) {
this._spriteSelMenu.update();
}
};
//=============================================================================
// ■■■ Sprite Selection Menu ■■■
//=============================================================================
function SpriteSelectionMenu() {
this.initialize.apply(this, arguments);
}
SpriteSelectionMenu.prototype = Object.create(Sprite.prototype);
SpriteSelectionMenu.prototype.constructor = SpriteSelectionMenu;
//==============================
// ♦♦ Initialize
//==============================
SpriteSelectionMenu.prototype.initialize = function (win) {
Sprite.prototype.initialize.call(this);
this._window = win;
this.visible = false;
this.loadBitmaps();
this.createSprites();
};
//==============================
// * rc
//==============================
SpriteSelectionMenu.prototype.rc = function () {
return this._window._cursorRect;
};
//==============================
// * Load Bitmaps
//==============================
SpriteSelectionMenu.prototype.loadBitmaps = function () {
this._img1 = ImageManager.loadMenus("CursorBorderA");
this._img1._fw = -1;
this._img2 = ImageManager.loadMenus("CursorBorderB");
};
//==============================
// * create Sprites
//==============================
SpriteSelectionMenu.prototype.createSprites = function () {
this.createLines();
this.createBorder();
};
//==============================
// * create Border
//==============================
SpriteSelectionMenu.prototype.createBorder = function () {
this._borderAnime =
String(Moghunter.cborder_Slide) === "true" ? true : false;
this._border = [];
this._border._visible =
String(Moghunter.cborder_Visible) === "true" ? true : false;
this._border._rectX = -1;
this._border._rectY = -1;
this._border._ani = [0, 0, 0];
for (var i = 0; i < 4; i++) {
this._border[i] = new Sprite(this._img1);
this._border[i]._org = [0, 0];
this._border[i].visible = this._border._visible;
this.addChild(this._border[i]);
}
};
//==============================
// * Set Frames For Border
//==============================
SpriteSelectionMenu.prototype.setFramesForBorder = function () {
for (var i = 0; i < this._border.length; i++) {
var wd = this._img1._fw * i;
this._border[i].setFrame(wd, 0, this._img1._fw, this._img1.height);
}
};
//==============================
// * Set Border Position
//==============================
SpriteSelectionMenu.prototype.setBorderPosition = function () {
this._border._ani = [0, 0, 0];
for (var i = 0; i < this._border.length; i++) {
var p = [0, 0];
var a = [
this.padding() - this._img1._fw / 2,
this.padding() - this._img1.height / 2,
];
var bx = Moghunter.cborder_LayoutXaxis;
var by = Moghunter.cborder_LayoutYaxis;
if (i === 0) {
p = [a[0] - bx, a[1] - by];
}
if (i === 1) {
p = [a[0] - bx, a[1] + this.heightF() + by];
}
if (i === 2) {
p = [a[0] + bx + this.widthF(), a[1] - by];
}
if (i === 3) {
p = [a[0] + bx + this.widthF(), a[1] + this.heightF() + by];
}
this._border[i].x = p[0];
this._border[i].y = p[1];
this._border[i]._org = [p[0], p[1]];
}
this._border._rectX = this.rc().width;
this._border._rectY = this.rc().height;
};
//==============================
// * update Slide Animation
//==============================
SpriteSelectionMenu.prototype.updateSlideAnimation = function () {
this._border._ani[2]++;
if (this._border._ani[2] < 3) {
return;
}
this._border._ani[2] = 0;
this._border._ani[1]++;
if (this._border._ani[1] < 10) {
this._border._ani[0]--;
} else if (this._border._ani[1] < 20) {
this._border._ani[0]++;
} else {
this._border._ani = [0, 0, 0];
}
};
//==============================
// * update Border
//==============================
SpriteSelectionMenu.prototype.updateBorder = function () {
this.updateSlideAnimation();
for (var i = 0; i < this._border.length; i++) {
if (i === 0) {
nx = this._border[i]._org[0] - this._border._ani[0];
ny = this._border[i]._org[1] - this._border._ani[0];
}
if (i === 1) {
nx = this._border[i]._org[0] - this._border._ani[0];
ny = this._border[i]._org[1] + this._border._ani[0];
}
if (i === 2) {
nx = this._border[i]._org[0] + this._border._ani[0];
ny = this._border[i]._org[1] - this._border._ani[0];
}
if (i === 3) {
nx = this._border[i]._org[0] + this._border._ani[0];
ny = this._border[i]._org[1] + this._border._ani[0];
}
if (!this._window.active) {
nx = this._border[i]._org[0];
ny = this._border[i]._org[1];
}
this._border[i].x = nx;
this._border[i].y = ny;
}
};
//==============================
// * create Lines
//==============================
SpriteSelectionMenu.prototype.createLines = function () {
this._lines = [];
this._lines._visible =
String(Moghunter.cborder_Line) === "true" ? true : false;
for (var i = 0; i < 4; i++) {
this._lines[i] = new Sprite(this._img2);
this._lines[i].anchor.y = 0.5;
this._lines[i].visible = this._lines._visible;
this._lines[i].rotation = i < 2 ? 0 : (90 * Math.PI) / 180;
this.addChild(this._lines[i]);
}
};
//==============================
// * Padding
//==============================
SpriteSelectionMenu.prototype.padding = function () {
return this._window.padding;
};
//==============================
// * Height R
//==============================
SpriteSelectionMenu.prototype.heightR = function () {
return this.rc().height;
};
//==============================
// * Height F
//==============================
SpriteSelectionMenu.prototype.heightF = function () {
if (this.heightR() > this._window.height - this.padding() * 2) {
return this._window.height - this.padding() * 2;
}
return this.heightR();
};
//==============================
// * Width R
//==============================
SpriteSelectionMenu.prototype.widthR = function () {
return this.rc().width;
};
//==============================
// * Width F
//==============================
SpriteSelectionMenu.prototype.widthF = function () {
if (this.heightR() > this._window.width - this.padding() * 2) {
return this._window.width - this.padding() * 2;
}
return this.widthR();
};
//==============================
// * Set Line Position
//==============================
SpriteSelectionMenu.prototype.setLinesPosition = function () {
for (var i = 0; i < this._lines.length; i++) {
var p = [0, 0];
var a = [this.padding(), this.padding()];
if (i === 0) {
p = [a[0], a[1]];
}
if (i === 1) {
p = [a[0], a[1] + this.heightF()];
}
if (i === 2) {
p = [a[0], a[1]];
}
if (i === 3) {
p = [a[0] + this.widthF(), a[1]];
}
this._lines[i].x = p[0];
this._lines[i].y = p[1];
}
};
//==============================
// * Set Line Zoom
//==============================
SpriteSelectionMenu.prototype.setLinesZoom = function () {
for (var i = 0; i < this._lines.length; i++) {
if (i < 2) {
var z = this.widthF() / this._img2.width;
} else {
var z = this.heightF() / this._img2.width;
}
this._lines[i].scale.x = z;
this._lines[i].scale.y = 1.0;
}
};
//==============================
// * set Frames For Sprites
//==============================
SpriteSelectionMenu.prototype.setFramesForSprites = function () {
this._img1._fw = this._img1.width / 4;
this.setFramesForBorder();
};
//==============================
// * refresh Sprites
//==============================
SpriteSelectionMenu.prototype.refreshSprites = function () {
this._window._refCursorSel = false;
this.setFramesForSprites();
if (this.needRefreshBorderPosition()) {
this.setBorderPosition();
}
this.setLinesPosition();
this.setLinesZoom();
};
//==============================
// * Is Visible
//==============================
SpriteSelectionMenu.prototype.needRefreshBorderPosition = function () {
if (this._border._rectX != this.rc().width) {
return true;
}
if (this._border._rectY != this.rc().height) {
return true;
}
return false;
};
//==============================
// * Is Visible
//==============================
SpriteSelectionMenu.prototype.isVisible = function () {
if (this.rc().width <= 0) {
return false;
}
if (this.rc().height <= 0) {
return false;
}
if (this._window.index() < 0) {
return false;
}
if (this._window._opening) {
return false;
}
if (this._window._closing) {
return false;
}
if (this._window.openness <= 0) {
return false;
}
if (!this._window.visible) {
return false;
}
if (this.y < 0) {
return false;
}
if (this.x < 0) {
return false;
}
return true;
};
//==============================
// * needRefresh
//==============================
SpriteSelectionMenu.prototype.needRefresh = function () {
if (this._window._refCursorSel) {
return true;
}
return false;
};
//==============================
// * update Position
//==============================
SpriteSelectionMenu.prototype.updatePosition = function () {
if (this.needRefresh()) {
this.refreshSprites();
}
if (this._borderAnime) {
this.updateBorder();
}
this.visible = this.isVisible();
this.x = this.rc().x + Moghunter.cborder_Xaxis - this._window.origin.x;
this.y = this.rc().y + Moghunter.cborder_Yaxis - this._window.origin.y;
this.opacity = this._window.contentsOpacity;
};
//==============================
// ♦♦ Update
//==============================
SpriteSelectionMenu.prototype.update = function () {
Sprite.prototype.update.call(this);
if (!this._img1) {
return;
}
if (!this._img1.isReady()) {
return;
}
if (!this.rc()) {
this.visible = false;
return;
}
this.updatePosition();
};
})();