You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

469 lines
15 KiB
JavaScript

//=============================================================================
// Salted Fish Plugins - Windows
// SF_Windows.js
//=============================================================================
"use strict";
var Imported = Imported || {};
Imported.SF_Windows = true;
var SF_Plugins = SF_Plugins || {};
//=============================================================================
/*:
* @plugindesc window base for salted fish plugins
* @author Salted Fish
*/
//=============================================================================
(function () {
var SF_Windows = {};
SF_Plugins.Windows = SF_Windows;
SF_Windows.version = 1.0;
//=============================================================================
// Window_SFBase
//=============================================================================
function Window_SFBase() {
this.initialize.apply(this, arguments);
}
SF_Windows.Window_SFBase = Window_SFBase;
window.Window_SFBase = Window_SFBase;
Window_SFBase.prototype = Object.create(Window_Base.prototype);
Window_SFBase.prototype.constructor = Window_SFBase;
Window_SFBase.prototype.initialize = function () {
var x = this.windowX();
var y = this.windowY();
var width = this.windowWidth();
var height = this.windowHeight();
Window_Base.prototype.initialize.call(this, x, y, width, height);
}
Window_SFBase.prototype.windowWidth = function () {
return Graphics.boxWidth;// overwrite this
}
Window_SFBase.prototype.windowHeight = function () {
return Graphics.boxHeight;// overwrite this
}
Window_SFBase.prototype.windowX = function () {
return 0;// overwrite this
}
Window_SFBase.prototype.windowY = function () {
return 0;// overwrite this
}
Window_SFBase.prototype.canUpdate = function () {
return this.active && this.visible && this.worldVisible;
}
Window_SFBase.prototype.containsPoint = function (point) {
var x = this.canvasToLocalX(point.x);
var y = this.canvasToLocalY(point.y);
return x >= 0 && y >= 0 && x < this.width && y < this.height;
}
//=============================================================================
// Window_PagingBase
//=============================================================================
function Window_PagingBase() {
this.initialize.apply(this, arguments);
}
SF_Windows.Window_PagingBase = Window_PagingBase;
window.Window_PagingBase = Window_PagingBase;
Window_PagingBase.prototype = Object.create(Window_SFBase.prototype);
Window_PagingBase.prototype.constructor = Window_PagingBase;
Window_PagingBase.prototype.initialize = function () {
Window_SFBase.prototype.initialize.call(this);
this._pageIndex = 0;
this._pageMax = 0;
this._pageUpButton = null;
this._pageDownButton = null;
this._pageIndexText = null;
this.createPageButtons();
this.createPageNumber();
this.setItemList(this.makeItemList());
this._state = 'pointer-out';// pointer-out, pointer-over, pointer-down
this._pointerIndex = -1;
}
Window_PagingBase.prototype.standardPadding = function () {
return 0;
}
Window_PagingBase.prototype.itemWidth = function () {
// overwrite this
return 0;
}
Window_PagingBase.prototype.itemHeight = function () {
// overwrite this
return 0;
}
Window_PagingBase.prototype.maxCols = function () {
// overwrite this
return 1;
}
Window_PagingBase.prototype.maxRows = function () {
// overwrite this
return 1;
}
Window_PagingBase.prototype.maxPageItems = function () {
return this.maxCols() * this.maxRows();
}
Window_PagingBase.prototype.maxItems = function () {
return this._itemList.length;
}
Window_PagingBase.prototype.itemPadding = function () {
// overwrite this
return new Point(0, 0);
}
Window_PagingBase.prototype.itemStartPosition = function () {
// overwrite this
return new Point(0, 0);
}
Window_PagingBase.prototype.itemPaddingWidth = function () {
return this.itemPadding().x;
}
Window_PagingBase.prototype.itemPaddingHeight = function () {
return this.itemPadding().y;
}
Window_PagingBase.prototype.itemRect = function (index) {
var maxPageItems = this.maxPageItems();
index = index % maxPageItems;
var rect = new Rectangle();
var maxCols = this.maxCols();
var itemWidth = this.itemWidth();
var itemHeight = this.itemHeight();
var itemPaddingWidth = this.itemPaddingWidth();
var itemPaddingHeight = this.itemPaddingHeight();
var startPosition = this.itemStartPosition();
rect.width = itemWidth;
rect.height = itemHeight;
rect.x = index % maxCols * (itemWidth + itemPaddingWidth) + startPosition.x;
rect.y = Math.floor(index / maxCols) * (itemHeight + itemPaddingHeight) + startPosition.y;
return rect;
}
Window_PagingBase.prototype.pageUpPosition = function () {
// overwrite this
return new Point(0, 0);
}
Window_PagingBase.prototype.pageUpBitmap = function () {
// overwrite this
var bitmap = new Bitmap(32, 32);
bitmap.fillAll('white');
return { "cold": bitmap, "hot": bitmap };
}
Window_PagingBase.prototype.pageDownPosition = function () {
// overwrite this
return new Point(0, 0);
}
Window_PagingBase.prototype.pageDownBitmap = function () {
// overwrite this
var bitmap = new Bitmap(32, 32);
bitmap.fillAll('white');
return { "cold": bitmap, "hot": bitmap };
}
Window_PagingBase.prototype.isShowPageButton = function () {
return true;
}
Window_PagingBase.prototype.isShowPageNumber = function () {
return true;
}
Window_PagingBase.prototype.pageNumberPosition = function () {
// overwrite this
return new Point(0, 0);
}
Window_PagingBase.prototype.pageNumberStyle = function () {
return new PIXI.TextStyle();
}
Window_PagingBase.prototype.updatePageNumber = function (text, pageIndex, pageCount) {
// overwrite this
text.text = `${pageIndex + 1}/${pageCount}`;
}
Window_PagingBase.prototype.createPageButtons = function () {
var bitmaps = null;
var position = null;
this._pageUpButton = new Sprite_SFButton();
this._pageUpButton.setClickHandler(this.onPageUpButtonClick.bind(this));
bitmaps = this.pageUpBitmap();
this._pageUpButton.setColdBitmap(bitmaps.cold);
this._pageUpButton.setHotBitmap(bitmaps.hot);
position = this.pageUpPosition();
this._pageUpButton.move(position.x, position.y);
this._pageUpButton.visible = false;
this._pageUpButton.refresh();
this._pageDownButton = new Sprite_SFButton();
this._pageDownButton.setClickHandler(this.onPageDownButtonClick.bind(this));
bitmaps = this.pageDownBitmap();
this._pageDownButton.setColdBitmap(bitmaps.cold);
this._pageDownButton.setHotBitmap(bitmaps.hot);
position = this.pageDownPosition();
this._pageDownButton.move(position.x, position.y);
this._pageDownButton.visible = false;
this._pageDownButton.refresh();
this.addChild(this._pageUpButton);
this.addChild(this._pageDownButton);
}
Window_PagingBase.prototype.createPageNumber = function () {
var style = this.pageNumberStyle();
var position = this.pageNumberPosition();
this._pageIndexText = new PIXI.Text('', style);
this._pageIndexText.anchor.set(0.5, 0.5);
this._pageIndexText.position.set(position.x, position.y);
this._pageIndexText.visible = false;
this.addChild(this._pageIndexText);
}
Window_PagingBase.prototype.makeItemList = function () {
// overwrite this
return [];
}
Window_PagingBase.prototype.setItemList = function (itemList) {
this._itemList = itemList;
this._pageMax = Math.ceil(this._itemList.length / this.maxPageItems());
this._pageIndex = 0;
// this.refresh();
}
Window_PagingBase.prototype.setPageIndex = function (pageIndex) {
this._pageIndex = pageIndex.clamp(0, this._pageMax);
this.refresh();
}
Window_PagingBase.prototype.refresh = function () {
this.refreshItem();
this.refreshPageNumber();
this.refreshPageButton();
this.setStateToItem(-1, 'pointer-out');
}
Window_PagingBase.prototype.refreshItem = function () {
this.contents.clear();
this.drawAllItems();
}
Window_PagingBase.prototype.refreshPageNumber = function () {
if (!this.isShowPageNumber()) return;
var text = this._pageIndexText;
var pageIndex = this._pageIndex;
var pageCount = this._pageMax;
this.updatePageNumber(text, pageIndex, pageCount);
}
Window_PagingBase.prototype.refreshPageButton = function () {
if (!this.isShowPageButton()) return;
var pageIndex = this._pageIndex;
var pageCount = this._pageMax;
var pageUpButton = this._pageUpButton;
var pageDownButton = this._pageDownButton;
pageUpButton.visible = pageIndex > 0;
pageDownButton.visible = pageIndex < pageCount - 1;
if (!pageUpButton.visible) pageUpButton.releasePointer();
if (!pageDownButton.visible) pageDownButton.releasePointer();
}
Window_PagingBase.prototype.onPageUpButtonClick = function () {
this.setPageIndex(this._pageIndex - 1);
}
Window_PagingBase.prototype.onPageDownButtonClick = function () {
this.setPageIndex(this._pageIndex + 1);
}
Window_PagingBase.prototype.drawAllItems = function () {
var index = this._pageIndex * this.maxPageItems();
var maxItems = this.maxPageItems();
for (var i = 0; i < maxItems; i++) {
this.drawItem(index + i);
}
}
Window_PagingBase.prototype.getItem = function (index) {
return this._itemList[index];
}
Window_PagingBase.prototype.drawItem = function (index) {
// overwrite this
}
Window_PagingBase.prototype.update = function () {
if (this.canUpdate()) {
Window_Base.prototype.update.call(this);
if (this._state !== 'pointer-out') {
this.onItemPointerOver(this._pointerIndex);
}
this.updatePointer();
}
}
Window_PagingBase.prototype.updatePointer = function () {
var pointer = this.getPointer();
if (pointer) {
var x = this.canvasToLocalX(pointer.x);
var y = this.canvasToLocalY(pointer.y);
var maxItems = this.maxPageItems();
var inFrame = false;
var baseIndex = this._pageIndex * maxItems;
for (var i = 0; i < maxItems; i++) {
var rect = this.itemRect(i);
if (rect.contains(x, y)) {
this.setPointerIndex(i + baseIndex, pointer);
inFrame = true;
break;
}
}
if (!inFrame) {
this.setPointerIndex(-1, pointer);
pointer.removeUser();
} else {
pointer.setUser(this);
}
}
}
Window_PagingBase.prototype.setPointerIndex = function (index, pointer) {
if (this._pointerIndex !== index) {
this.setStateToItem(index, 'pointer-over');
}
if (index === -1) {
return;
}
var events = pointer.getEvents();
for (var i = 0; i < events.length; i++) {
var event = events[i];
if (event === 'pointer-down') {
this.setStateToItem(index, 'pointer-down');
} else if (event === 'pointer-up') {
this.setStateToItem(index, 'pointer-over');
} else if (event === 'pointer-cancel') {
this.setStateToItem(index, 'pointer-out');
}
}
}
Window_PagingBase.prototype.setStateToItem = function (index, state) {
if (index !== this._pointerIndex && this._pointerIndex !== -1) {
if (this._state === 'pointer-down') {
this._state = 'pointer-over';
this.onItemPointerUp(this._pointerIndex);
}
if (this._state === 'pointer-over') {
this._state = 'pointer-out';
this.onItemPointerLeave(this._pointerIndex);
}
}
this._pointerIndex = index;
if (this._pointerIndex === -1 || this._state === state) {
return;
}
if (state === 'pointer-out') {
if (this._state === 'pointer-down') {
this._state = 'pointer-over';
this.onItemPointerUp(this._pointerIndex);
}
if (this._state === 'pointer-over') {
this._state = 'pointer-out';
this.onItemPointerLeave(this._pointerIndex);
}
} else if (state === 'pointer-down') {
if (this._state === 'pointer-out') {
this._state = 'pointer-over';
this.onItemPointerEnter(this._pointerIndex);
}
if (this._state === 'pointer-over') {
this._state = 'pointer-down';
this.onItemPointerDown(this._pointerIndex);
}
} else if (state === 'pointer-over') {
if (this._state === 'pointer-out') {
this._state = 'pointer-over';
this.onItemPointerEnter(this._pointerIndex);
}
if (this._state === 'pointer-down') {
this._state = 'pointer-over';
this.onItemPointerUp(this._pointerIndex);
this.onItemClick(this._pointerIndex);
}
}
}
Window_PagingBase.prototype.onItemPointerDown = function (index) {
// overwrite this
}
Window_PagingBase.prototype.onItemPointerUp = function (index) {
// overwrite this
}
Window_PagingBase.prototype.onItemPointerMove = function (index) {
// overwrite this
}
Window_PagingBase.prototype.onItemPointerOver = function (index) {
// overwrite this
}
Window_PagingBase.prototype.onItemPointerEnter = function (index) {
// overwrite this
}
Window_PagingBase.prototype.onItemPointerLeave = function (index) {
// overwrite this
}
Window_PagingBase.prototype.onItemClick = function (index) {
// overwrite this
}
Window_PagingBase.prototype.releasePointer = function () {
Window_SFBase.prototype.releasePointer.call(this);
this.setStateToItem(-1, 'pointer-out');
}
})();