//============================================================================= // 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 * */ /*:ja * @target MZ * @plugindesc (v1.0) ウィンドウにスクロールバーを追加します。 * @author Moghunter * @url https://raw.githubusercontent.com/harizumi/Moghunter-MZ-jp/main/MOG_MenuScrollbar.js * * @param Always Visible * @text メーターの表示 * @type boolean * @on 表示 * @off 非表示 * @default true * * @param X-Axis * @text バーのX軸位置 * @desc 正:右 / 負:左 * @default 0 * * @param Y-Axis * @text バーのY軸位置 * @desc 正:下 / 負:上 * @default 0 * * @param Button X-Axis * @text ボタンのX軸位置 * @desc 正:右 / 負:左 * @default 1 * * @param Button Y-Axis * @text ボタンのY軸位置 * @desc 正:下 / 負:上 * @default 1 * * @help * 翻訳: * https://fungamemake.com/ * * ============================================================================ * ♦♦♦ MOG - Menu Scroll Bar ♦♦♦ * Author - Moghunter * Version - 1.0 * Updated - 2020/10/18 * https://mogplugins.wordpress.com * ============================================================================ * ウィンドウにスクロールバーを追加します。 * * =========================================================================== * 必要ファイル * =========================================================================== * 下記の画像ファイルが必要になります。 (/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.00; }; //============================== // * 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.00; }; //============================== // * 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(); };