460 lines
13 KiB
JavaScript
460 lines
13 KiB
JavaScript
//=============================================================================
|
|
// MOG_MenuScrollbar.js
|
|
//=============================================================================
|
|
|
|
/*:
|
|
* @target MZ
|
|
* @plugindesc (v1.0) Adiciona uma barra de rolamento nas janelas.
|
|
* @author Moghunter
|
|
* @url https://mogplugins.wordpress.com
|
|
*
|
|
* @param Always Visible
|
|
* @desc Deixar o medidor sempre visível.
|
|
* @default true
|
|
*
|
|
* @param X-Axis
|
|
* @desc Definição da posição X-Axis da barra.
|
|
* @default 0
|
|
*
|
|
* @param Y-Axis
|
|
* @desc Definição da posição Y-Axis da barra.
|
|
* @default 0
|
|
*
|
|
* @param Button X-Axis
|
|
* @desc Definição da posição X-Axis do botão.
|
|
* @default 1
|
|
*
|
|
* @param Button Y-Axis
|
|
* @desc Definição da posição Y-Axis da botão.
|
|
* @default 1
|
|
*
|
|
* @help
|
|
* =============================================================================
|
|
* ♦♦♦ MOG - Menu Scroll Bar ♦♦♦
|
|
* Author - Moghunter
|
|
* Version - 1.0
|
|
* Updated - 2020/10/18
|
|
* https://mogplugins.wordpress.com
|
|
* =============================================================================
|
|
* Adiciona uma barra de rolamento nas janelas.
|
|
*
|
|
* =============================================================================
|
|
* UTILIZAÇÃO
|
|
* =============================================================================
|
|
* Serão necessários as imagens. (/img/menus/)
|
|
*
|
|
* ScrollBarA.png
|
|
* ScrollBarB.png
|
|
*
|
|
*/
|
|
|
|
//=============================================================================
|
|
// ** PLUGIN PARAMETERS
|
|
//=============================================================================
|
|
var Imported = Imported || {};
|
|
Imported.MOG_MenuScrollbar = true;
|
|
var Moghunter = Moghunter || {};
|
|
|
|
Moghunter.parameters = PluginManager.parameters("MOG_MenuScrollbar");
|
|
Moghunter.scrollBarAlwaysVisible = String(
|
|
Moghunter.parameters["Always Visible"] || "true"
|
|
);
|
|
Moghunter.scrollBarX = Number(Moghunter.parameters["X-Axis"] || 0);
|
|
Moghunter.scrollBarY = Number(Moghunter.parameters["Y-Axis"] || 0);
|
|
Moghunter.scrollBar_ButtonX = Number(
|
|
Moghunter.parameters["Button X-Axis"] || 1
|
|
);
|
|
Moghunter.scrollBar_ButtonY = Number(
|
|
Moghunter.parameters["Button Y-Axis"] || 0
|
|
);
|
|
|
|
//=============================================================================
|
|
// ■■■ ImageManager ■■■
|
|
//=============================================================================
|
|
|
|
//==============================
|
|
// * Menus
|
|
//==============================
|
|
ImageManager.loadMenus = function (filename) {
|
|
return this.loadBitmap("img/menus/", filename);
|
|
};
|
|
|
|
//=============================================================================
|
|
// ** Window Selectable
|
|
//=============================================================================
|
|
|
|
//==============================
|
|
// * Initialize
|
|
//==============================
|
|
var _mog_scrollbar_winSel_initialize = Window_Selectable.prototype.initialize;
|
|
Window_Selectable.prototype.initialize = function (rect) {
|
|
_mog_scrollbar_winSel_initialize.call(this, rect);
|
|
this.createScrollBar();
|
|
};
|
|
|
|
//==============================
|
|
// * create Scroll Bar
|
|
//==============================
|
|
Window_Selectable.prototype.createScrollBar = function () {
|
|
this._refScroll = true;
|
|
this._scrollBar = new SpriteScrollBar(this);
|
|
var id = this.scrollBarSetChild();
|
|
this.addChildAt(this._scrollBar, id);
|
|
};
|
|
|
|
//==============================
|
|
// * scrollBarSetChild
|
|
//==============================
|
|
Window_Selectable.prototype.scrollBarSetChild = function () {
|
|
var id = 3;
|
|
if (id > this.children.length) {
|
|
id = this.children.length;
|
|
}
|
|
return id;
|
|
};
|
|
|
|
//==============================
|
|
// * set Cursor Rect
|
|
//==============================
|
|
var _mog_scroll_setCursorRect = Window_Selectable.prototype.setCursorRect;
|
|
Window_Selectable.prototype.setCursorRect = function (x, y, width, height) {
|
|
_mog_scroll_setCursorRect.call(this, x, y, width, height);
|
|
this._refScroll = true;
|
|
};
|
|
|
|
//==============================
|
|
// * select
|
|
//==============================
|
|
var _mog_scrollbar_wsel_select = Window_Selectable.prototype.select;
|
|
Window_Selectable.prototype.select = function (index) {
|
|
_mog_scrollbar_wsel_select.call(this, index);
|
|
if (this._scrollBar) {
|
|
this._scrollBar.update();
|
|
}
|
|
};
|
|
|
|
//=============================================================================
|
|
// ** Sprite Scroll Bar
|
|
//=============================================================================
|
|
function SpriteScrollBar() {
|
|
this.initialize.apply(this, arguments);
|
|
}
|
|
|
|
SpriteScrollBar.prototype = Object.create(Sprite.prototype);
|
|
SpriteScrollBar.prototype.constructor = SpriteScrollBar;
|
|
|
|
//==============================
|
|
// * Initialize
|
|
//==============================
|
|
SpriteScrollBar.prototype.initialize = function (win) {
|
|
Sprite.prototype.initialize.call(this);
|
|
this._window = win;
|
|
this.visible = false;
|
|
this._avisble =
|
|
String(Moghunter.scrollBarAlwaysVisible) === "true" ? true : false;
|
|
this.loadBitmaps();
|
|
this.createSprites();
|
|
};
|
|
|
|
//==============================
|
|
// * Load Bitmaps
|
|
//==============================
|
|
SpriteScrollBar.prototype.loadBitmaps = function () {
|
|
this._img1 = ImageManager.loadMenus("ScrollBarA");
|
|
this._img2 = ImageManager.loadMenus("ScrollBarB");
|
|
};
|
|
|
|
//==============================
|
|
// * rc
|
|
//==============================
|
|
SpriteScrollBar.prototype.rc = function () {
|
|
return this._window._cursorRect;
|
|
};
|
|
|
|
//==============================
|
|
// * create Sprites
|
|
//==============================
|
|
SpriteScrollBar.prototype.createSprites = function () {
|
|
this.createBack();
|
|
this.createButton();
|
|
};
|
|
|
|
//==============================
|
|
// * create Back
|
|
//==============================
|
|
SpriteScrollBar.prototype.createButton = function () {
|
|
this._button = [];
|
|
this._button._ny = 0;
|
|
this._button._maxItens = -1;
|
|
this._button._maxTopRow = -1;
|
|
for (var i = 0; i < 3; i++) {
|
|
this._button[i] = new Sprite(this._img2);
|
|
this._button[i].visible = false;
|
|
this.addChild(this._button[i]);
|
|
}
|
|
};
|
|
|
|
//==============================
|
|
// * refresh button
|
|
//==============================
|
|
SpriteScrollBar.prototype.refreshButton = function () {
|
|
var w = this._img2.width / 2;
|
|
var h = this._img2.height;
|
|
for (var i = 0; i < this._button.length; i++) {
|
|
var p = [0, -999];
|
|
var bx = Moghunter.scrollBar_ButtonX;
|
|
var by = this.buttonPos();
|
|
this._button[i].setFrame(0, 0, w, h);
|
|
this._button[i].visible = true;
|
|
if (i === 0) {
|
|
p = [bx, by - this._img2.height];
|
|
}
|
|
if (i === 1) {
|
|
p = [bx, by];
|
|
this._button[i].setFrame(w, 0, w, h);
|
|
}
|
|
if (i === 2) {
|
|
p = [bx, by + this.buttonSize() + this._img2.height];
|
|
}
|
|
this._button[i].x = p[0];
|
|
if (this._button._maxItens != this._window.maxItems()) {
|
|
this._button[i].y = p[1];
|
|
}
|
|
}
|
|
this.setScaleButton();
|
|
this._button._maxItens = this._window.maxItems();
|
|
};
|
|
|
|
//==============================
|
|
// * update Button
|
|
//==============================
|
|
SpriteScrollBar.prototype.updateButton = function () {
|
|
for (var i = 0; i < this._button.length; i++) {
|
|
var by = this.buttonPos();
|
|
if (i === 0) {
|
|
ny = by - this._img2.height;
|
|
}
|
|
if (i === 1) {
|
|
ny = by;
|
|
}
|
|
if (i === 2) {
|
|
ny = by + this.buttonSize() + this._img2.height;
|
|
}
|
|
this._button[i].y = this.moveto(this._button[i].y, ny);
|
|
}
|
|
};
|
|
|
|
//==============================
|
|
// * button Size
|
|
//==============================
|
|
SpriteScrollBar.prototype.buttonSize = function () {
|
|
var size = this.heightF() - this.padding() * this._window.maxTopRow();
|
|
return Math.min(Math.max(size, this.padding()), this.heightF());
|
|
};
|
|
|
|
//==============================
|
|
// * moveto
|
|
//==============================
|
|
SpriteScrollBar.prototype.moveto = function (value, real_value) {
|
|
if (value == real_value) {
|
|
return value;
|
|
}
|
|
var dnspeed = 3 + Math.abs(value - real_value) / 10;
|
|
if (value > real_value) {
|
|
value -= dnspeed;
|
|
if (value < real_value) {
|
|
value = real_value;
|
|
}
|
|
} else if (value < real_value) {
|
|
value += dnspeed;
|
|
if (value > real_value) {
|
|
value = real_value;
|
|
}
|
|
}
|
|
return Math.floor(value);
|
|
};
|
|
|
|
//==============================
|
|
// * scroll Bar Y
|
|
//==============================
|
|
SpriteScrollBar.prototype.scrollBarY = function () {
|
|
return Moghunter.scrollBar_ButtonY;
|
|
};
|
|
|
|
//==============================
|
|
// * button Pos
|
|
//==============================
|
|
SpriteScrollBar.prototype.buttonPos = function () {
|
|
var space_max = this.heightF() - this.buttonSize();
|
|
var space = space_max / this._window.maxTopRow();
|
|
var s = Math.min(Math.max(space, 0.001), space_max);
|
|
var y =
|
|
this.scrollBarY() +
|
|
s * Math.floor(this._window.topIndex() / this._window.maxCols());
|
|
return Math.min(Math.max(y, 0), space_max);
|
|
};
|
|
|
|
//==============================
|
|
// * set Scale Button
|
|
//==============================
|
|
SpriteScrollBar.prototype.setScaleButton = function () {
|
|
this._button[1].scale.y = this.buttonSize() / this._img2.height;
|
|
this._button[2].scale.y = -1.0;
|
|
};
|
|
|
|
//==============================
|
|
// * create Back
|
|
//==============================
|
|
SpriteScrollBar.prototype.createBack = function () {
|
|
this._back = [];
|
|
for (var i = 0; i < 3; i++) {
|
|
this._back[i] = new Sprite(this._img1);
|
|
this._back[i].visible = false;
|
|
this.addChild(this._back[i]);
|
|
}
|
|
};
|
|
|
|
//==============================
|
|
// * refresh Back
|
|
//==============================
|
|
SpriteScrollBar.prototype.refreshBack = function () {
|
|
var w = this._img1.width / 2;
|
|
var h = this._img1.height;
|
|
for (var i = 0; i < this._back.length; i++) {
|
|
var p = [0, 0];
|
|
this._back[i].setFrame(0, 0, w, h);
|
|
if (i === 0) {
|
|
p = [0, -this._img1.height];
|
|
}
|
|
if (i === 1) {
|
|
p = [0, 0];
|
|
this._back[i].setFrame(w, 0, w, h);
|
|
}
|
|
if (i === 2) {
|
|
p = [0, this.heightF() + this._img1.height];
|
|
}
|
|
this._back[i].x = p[0];
|
|
this._back[i].y = p[1];
|
|
this._back[i].visible = true;
|
|
}
|
|
this.setScaleBack();
|
|
};
|
|
|
|
//==============================
|
|
// * Set Scale Back
|
|
//==============================
|
|
SpriteScrollBar.prototype.setScaleBack = function () {
|
|
this._back[1].scale.y = this.heightF() / this._img1.height;
|
|
this._back[2].scale.y = -1.0;
|
|
};
|
|
|
|
//==============================
|
|
// * Padding
|
|
//==============================
|
|
SpriteScrollBar.prototype.padding = function () {
|
|
return this._window.padding;
|
|
};
|
|
|
|
//==============================
|
|
// * Pos X
|
|
//==============================
|
|
SpriteScrollBar.prototype.posX = function () {
|
|
return this._window.width - this.padding() + Moghunter.scrollBarX;
|
|
};
|
|
|
|
//==============================
|
|
// * Pos Y
|
|
//==============================
|
|
SpriteScrollBar.prototype.posY = function () {
|
|
return this.padding() + Moghunter.scrollBarY;
|
|
};
|
|
|
|
//==============================
|
|
// * Height F
|
|
//==============================
|
|
SpriteScrollBar.prototype.heightF = function () {
|
|
return this._window.height - this.padding() * 2;
|
|
};
|
|
|
|
//==============================
|
|
// * refresh Sprites
|
|
//==============================
|
|
SpriteScrollBar.prototype.refreshSprites = function () {
|
|
this._window._refScroll = false;
|
|
this._button._maxTopRow = this._window.maxTopRow();
|
|
this.refreshBack();
|
|
this.refreshButton();
|
|
};
|
|
|
|
//==============================
|
|
// * needRefresh
|
|
//==============================
|
|
SpriteScrollBar.prototype.needRefresh = function () {
|
|
if (this._window._refScroll) {
|
|
return true;
|
|
}
|
|
if (this._button._maxTopRow != this._window.maxTopRow()) {
|
|
return true;
|
|
}
|
|
return false;
|
|
};
|
|
|
|
//==============================
|
|
// * update Position
|
|
//==============================
|
|
SpriteScrollBar.prototype.updatePosition = function () {
|
|
if (this.needRefresh()) {
|
|
this.refreshSprites();
|
|
}
|
|
this.updateButton();
|
|
this.visible = this.isVisible();
|
|
this.x = this.posX();
|
|
this.y = this.posY();
|
|
this.opacity = this._window.contentsOpacity;
|
|
if (!this.visible) {
|
|
this._button._maxItens = -2;
|
|
}
|
|
};
|
|
|
|
//==============================
|
|
// * Is Visible
|
|
//==============================
|
|
SpriteScrollBar.prototype.isVisible = function () {
|
|
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._window.maxTopRow() === 0) {
|
|
return false;
|
|
}
|
|
if (!this._avisble && !this._window.active) {
|
|
return false;
|
|
}
|
|
return true;
|
|
};
|
|
|
|
//==============================
|
|
// * Update
|
|
//==============================
|
|
SpriteScrollBar.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();
|
|
};
|