446 lines
No EOL
14 KiB
JavaScript
446 lines
No EOL
14 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.00;
|
||
};
|
||
};
|
||
|
||
//==============================
|
||
// * 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();
|
||
};
|
||
|
||
})(); |