slave-thistle/www/js/plugins/MOG_CursorBorder.js
2025-05-26 09:44:24 -05:00

503 lines
No EOL
15 KiB
JavaScript

//============================================================================
// MOG_CursorBorder.js
// Translate to Japanese : fungamemake.com
//============================================================================
/*:
* @plugindesc (v1.0) Adiciona bordas na seleção de comandos.
* @author Moghunter
*
* @param Border Visible
* @desc Apresentar o borda.
* @default true
*
* @param Border Line Visible
* @desc Apresentar a linha da borda.
* @default true
*
* @param Border Animation
* @desc Ativar animação de deslize.
* @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 - Cursor Border(v1.0) +++
* By Moghunter
* https://atelierrgss.wordpress.com/
* ===========================================================================
* Adiciona bordas na seleção de comandos.
* ===========================================================================
* UTILIZAÇÃO
* ===========================================================================
* Serão necessários as imagens. (/img/system/)
*
* CursorBorderA.png
* CursorBorderB.png
*
*/
/*:ja
* @plugindesc (v1.0) コマンド選択に境界線を追加します。
* @author Moghunter
*
* @param Border Visible
* @text 境界Aの有効化
* @default true
* @type boolean
* @on 有効
* @off 無効
*
* @param Border Line Visible
* @text 境界Bの有効化
* @default true
* @type boolean
* @on 有効
* @off 無効
*
* @param Border Animation
* @text 境界Aのアニメ有効化
* @default false
* @type boolean
* @on 有効
* @off 無効
*
* @param X-Axis Offset
* @text 境界のX軸位置
* @desc 正:右 / 負:左
* @type number
* @min -9007
* @max 9007
* @default 0
*
* @param Y-Axis Offset
* @text 境界のY軸位置
* @desc 正:下 / 負:上
* @type number
* @min -9007
* @max 9007
* @default 0
*
* @param Border X-Space
* @text 境界BからAへのX間隔量
* @desc 正:右 / 負:左
* @type number
* @min -9007
* @max 9007
* @default 4
*
* @param Border Y-Space
* @text 境界BからAへのY間隔量
* @desc 正:下 / 負:上
* @type number
* @min -9007
* @max 9007
* @default 4
*
* @help
* 翻訳:ムノクラ
* https://fungamemake.com/
* https://twitter.com/munokura/
*
* ===========================================================================
* +++ MOG - Cursor Border(v1.0) +++
* By Moghunter
* https://atelierrgss.wordpress.com/
* ===========================================================================
* コマンド選択に境界線を追加します。
* ===========================================================================
* 必要ファイル
* ===========================================================================
* 必要な画像ファイルを下記に保存してください。
* (/img/system/)
*
* CursorBorderA.png
* CursorBorderB.png
*
*/
//============================================================================
// ** PLUGIN PARAMETERS
//============================================================================
var Imported = Imported || {};
Imported.MOG_CursorBorder = true;
var Moghunter = Moghunter || {};
Moghunter.parameters = PluginManager.parameters('MOG_CursorBorder');
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);
//============================================================================
// ** Window Selectable
//============================================================================
//==============================
// * Initialize
//==============================
var _mog_sprSel_winSel_initialize = Window_Selectable.prototype.initialize;
Window_Selectable.prototype.initialize = function (x, y, width, height) {
_mog_sprSel_winSel_initialize.call(this, x, y, width, height);
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);
};
//==============================
// * 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;
};
//==============================
// * 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.loadSystem("CursorBorderA");
this._img1._fw = -1;
this._img2 = ImageManager.loadSystem("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.standardPadding()
};
//==============================
// * 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 };
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.y = this.rc().y + Moghunter.cborder_Yaxis;
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();
};