kakuriyo/js/plugins/MPP_SimpleTouch3.js
2023-06-29 14:42:52 -05:00

1146 lines
39 KiB
JavaScript

//=============================================================================
// MPP_SimpleTouch3.js
//=============================================================================
// Copyright (c) 2016-2020 Mokusei Penguin
// Released under the MIT license
// http://opensource.org/licenses/mit-license.php
//=============================================================================
/*:
* @plugindesc 【ver.3.19】マウスやタッチ操作を変更します。
* @author 木星ペンギン
*
* @help プラグインコマンド:
* CancelOff # 次の[選択肢の表示]でキャンセルSEを鳴らさない
*
* ================================
* 本プラグインを導入した場合、以下のように機能が変更・追加されます
*
* --------------------------------
* ●カーソル移動
* プラグインパラメータ[Select Type Default]にて、
* [カーソル移動]方法を変更できます。
* この設定はゲーム内のオプションからでも変更可能です。
*
* ▽0 (タッチ)
* 項目をタッチした時点でカーソル移動を行います。
*
* ▽1 (追従)
* 常にマウスの位置にカーソルが移動します。
*
* --------------------------------
* ●決定操作
* プラグインパラメータ[Ok Type Default]にて、[決定操作]方法を変更できます。
* この設定はゲーム内のオプションからでも変更可能です。
*
* ▽0 (デフォルト)
* カーソルとタッチした項目が一致していれば【決定】、
* そうでなければ【カーソル移動】のみとなります。
*
* ツクールMVのデフォルト操作と似ていますが、
* 【決定】は短くタッチした際に行われ、長押しでは何も行いません。
*
* ▽1 (シングル)
* 項目を短くタッチすると【決定】を行います。
* 長押しでは何も行いません。
*
* ▽2 (ダブル)
* 同じ項目で短いタッチを二度行うと【決定】を行います。
* 長押しでは何も行いません。
*
* --------------------------------
* ●スクロール
* ウィンドウをタッチしたまま上下にスライドすると、スクロールを行います。
* フリック操作でしばらく自動でスクロールを行います。
*
* プラグインパラメータ[Scroll Warp?]を有効にした場合、
* 最初の項目が表示されている状態で下にスクロールすると最後の項目に、
* 最後の項目が表示されている状態で上にスクロールすると最初の項目に移動します。
*
* --------------------------------
* ●キャンセル操作
* ▽プラグインパラメータ[Cancel Enabled?]により、
* 右クリックや二本指タップによるウィンドウのキャンセルを
* 無効にすることができます。
*
* ▽プラグインパラメータ[Outside Tap Default]により、
* ウィンドウの外側をタップした際に【キャンセル】を行う機能を追加できます。
* この設定はゲーム内のオプションからでも変更可能です。
*
* --------------------------------
* ●ページ切り替え
* 画面をタッチした後、左右にスワイプすると【ページ切り替え】を行います。
*
* この操作は【外側タップ】の【キャンセル】操作より優先されているため、
* ウィンドウの外側でスワイプしても機能します。
*
* --------------------------------
* ●その他補足
* ステータス画面で画面をタッチすると【キャンセル】を行います。
*
* ================================
* 制作 : 木星ペンギン
* URL : http://woodpenguin.blog.fc2.com/
*
* @param Cancel Enabled?
* @type boolean
* @desc 右クリックまたは二本指タップによるキャンセルの有効/無効
* @default true
*
* @param Double Tap Interval
* @type number
* @desc ダブルタップの間隔
* @default 30
*
* @param Cursor SE Always?
* @type boolean
* @desc タッチした際、常にカーソルSEを鳴らすかどうか
* @default false
*
* @param Scroll Warp?
* @type boolean
* @desc スクロールワープの有効/無効
* @default false
*
* @param Scroll Warp SE
* @type struct<SE>
* @desc スクロールワープ時のSE
* @default {"Name":"","Volume":"90","Pitch":"100","Pan":"0"}
* @parent Scroll Warp?
*
* @param Smooth Scroll?
* @type boolean
* @desc スクロールのスムーズな動作
* @default true
*
*
* @param === Default ===
*
* @param Long Press Time
* @type number
* @desc 決定を取り消すまでの長押しの時間 (フレーム数)
* @default 12
* @parent === Default ===
*
* @param Select Type Default
* @type number
* @max 1
* @desc [カーソル移動]のデフォルト値
* (0:タッチ, 1:追従)
* @default 1
* @parent === Default ===
*
* @param Ok Type Default
* @type number
* @max 2
* @desc [決定操作]のデフォルト値
* (0:デフォルト, 1:シングル, 2:ダブル)
* @default 0
* @parent === Default ===
*
* @param Outside Tap Default
* @type number
* @max 1
* @desc [外側タップ]のデフォルト値
* (0:無効, 1:キャンセル)
* @default 1
* @parent === Default ===
*
*
* @param === Option ===
*
* @param Long Press Name
* @desc オプション画面に表示する[長押し時間]の名前
* (空の場合は表示しない)
* @default
* @parent === Option ===
*
* @param Select Type Name
* @desc オプション画面に表示する[カーソル移動]の名前
* (空の場合は表示しない)
* @default
* @parent === Option ===
*
* @param Select Type Status
* @type string[]
* @desc オプション画面に表示する[カーソル移動]のステータス名
* @default ["タッチ","追従"]
* @parent Select Type Name
*
* @param Ok Type Name
* @desc オプション画面に表示する[決定操作]の名前
* (空の場合は表示しない)
* @default 決定操作
* @parent === Option ===
*
* @param Ok Type Status _v3
* @type string[]
* @desc オプション画面に表示する[決定操作]のステータス名
* (カンマで区切ってください)
* @default ["デフォルト","シングル","ダブル"]
* @parent Ok Type Name
*
* @param Outside Tap Name
* @desc オプション画面に表示する[外側タップ]の名前
* (空の場合は表示しない)
* @default
* @parent === Option ===
*
* @param Outside Tap Status _v3
* @type string[]
* @desc オプション画面に表示する[外側タップ]のステータス名
* (カンマで区切ってください)
* @default ["無効","キャンセル"]
* @parent Outside Tap Name
*
* @param === Command ===
*
* @param Plugin Commands
* @type struct<Plugin>
* @desc プラグインコマンド名
* @default {"CancelOff":"CancelOff"}
* @parent === Command ===
*
*
*
*/
/*~struct~SE:
* @param Name
* @desc ファイル名
* @default
* @require 1
* @dir audio/se
* @type file
*
* @param Volume
* @type number
* @max 100
* @desc 音量
* @default 90
*
* @param Pitch
* @type number
* @min 50
* @max 150
* @desc ピッチ
* @default 100
*
* @param Pan
* @type number
* @min -100
* @max 100
* @desc 位相
* @default 0
*
*/
/*~struct~Plugin:
* @param CancelOff
* @desc 次の[選択肢の表示]でキャンセルSEを鳴らさない
* @default CancelOff
*
*/
//=============================================================================
// Main
//=============================================================================
(function (exports) {
'use strict';
const Params = {};
{
let parameters = PluginManager.parameters('MPP_SimpleTouch3');
Params.CancelEnabled = !!eval(parameters['Cancel Enabled?']);
Params.LongPressTime = Number(parameters['Long Press Time'] || 15);
Params.DoubleTapInterval = Number(parameters['Double Tap Interval'] || 30);
Params.CursorSeAlways = !!eval(parameters['Cursor SE Always?']);
Params.ScrollWarp = !!eval(parameters['Scroll Warp?']);
let param = JSON.parse(parameters['Scroll Warp SE']);
Params.ScrollWarpSE = {
name: param.Name || "",
volume: Number(param.Volume || 90),
pitch: Number(param.Pitch || 100),
pan: Number(param.Pan || 0)
};
Params.SmoothScroll = !!eval(parameters['Smooth Scroll?'] || "true");
// === Default ===
Params.SelectTypeDefault = Number(parameters['Select Type Default'] || 1);
Params.OkTypeDefault = Number(parameters['Ok Type Default'] || 0);
Params.OutsideTapDefault = Number(parameters['Outside Tap Default'] || 1);
// === Option ===
Params.LongPressName = parameters['Long Press Name'] || "";
Params.SelectTypeName = parameters['Select Type Name'] || "";
Params.SelectTypeStatus = JSON.parse(parameters['Select Type Status'] || "[]");
Params.OkTypeName = parameters['Ok Type Name'] || '';
Params.OkTypeStatus = JSON.parse(parameters['Ok Type Status _v3'] || "[]");
Params.OutsideTapName = parameters['Outside Tap Name'] || '';
Params.OutsideTapStatus = JSON.parse(parameters['Outside Tap Status _v3'] || "[]");
// === Command ===
Params.PluginCommands = JSON.parse(parameters['Plugin Commands']);
}
const Alias = {};
const Method = {};
//=============================================================================
// Option
//=============================================================================
//-----------------------------------------------------------------------------
// MppOptions
function MppOptions() {
throw new Error('This is a static class');
}
MppOptions.params = [];
MppOptions.params.push({
symbol: 'mppLongPress',
name: Params.LongPressName,
status: [],
def: Params.LongPressTime
}, {
symbol: 'mppSelectType',
name: Params.SelectTypeName,
status: Params.SelectTypeStatus,
def: Params.SelectTypeDefault
}, {
symbol: 'mppOkType',
name: Params.OkTypeName,
status: Params.OkTypeStatus,
def: Params.OkTypeDefault
}, {
symbol: 'mppOutsideTap',
name: Params.OutsideTapName,
status: Params.OutsideTapStatus,
def: Params.OutsideTapDefault
});
Object.defineProperties(MppOptions, {
longPress: { get: function () { return this.getter('mppLongPress'); } },
selectType: { get: function () { return this.getter('mppSelectType'); } },
okType: { get: function () { return this.getter('mppOkType'); } },
outsideTap: { get: function () { return this.getter('mppOutsideTap'); } }
});
MppOptions.isSymbol = function (symbol) {
return this.params.some((param) => param.symbol === symbol);
};
MppOptions.getStatus = function (symbol) {
for (var i = 0; i < this.params.length; i++) {
if (this.params[i].symbol === symbol)
return this.params[i].status;
}
return [];
};
MppOptions.getter = function (symbol) {
for (var i = 0; i < this.params.length; i++) {
var param = this.params[i];
if (param.symbol === symbol) {
return param.name ? ConfigManager[param.symbol] : param.def;
}
}
return 0;
};
//-----------------------------------------------------------------------------
// ConfigManager
for (let i = 0; i < MppOptions.params.length; i++) {
let param = MppOptions.params[i];
ConfigManager[param.symbol] = param.def;
}
//71
Alias.CoMa_makeData = ConfigManager.makeData;
ConfigManager.makeData = function () {
var config = Alias.CoMa_makeData.call(this);
var params = MppOptions.params;
for (var i = 0; i < params.length; i++) {
var symbol = params[i].symbol;
config[symbol] = this[symbol];
}
return config;
};
//82
Alias.CoMa_applyData = ConfigManager.applyData;
ConfigManager.applyData = function (config) {
Alias.CoMa_applyData.call(this, config);
var params = MppOptions.params;
for (var i = 0; i < params.length; i++) {
var symbol = params[i].symbol;
if (typeof config[symbol] === 'number')
this[symbol] = config[symbol];
}
};
//-----------------------------------------------------------------------------
// Window_Options
//31
Alias.WiOp_makeCommandList = Window_Options.prototype.makeCommandList;
Window_Options.prototype.makeCommandList = function () {
var params = MppOptions.params;
for (var i = 0; i < params.length; i++) {
if (params[i].name)
this.addCommand(params[i].name, params[i].symbol);
}
Alias.WiOp_makeCommandList.call(this);
};
//62
Alias.WiOp_statusText = Window_Options.prototype.statusText;
Window_Options.prototype.statusText = function (index) {
var symbol = this.commandSymbol(index);
if (symbol === "mppLongPress") {
return this.getConfigValue(symbol);
} else if (MppOptions.isSymbol(symbol)) {
var status = MppOptions.getStatus(symbol);
var value = this.getConfigValue(symbol);
return status[value];
} else {
return Alias.WiOp_statusText.call(this, index);
}
};
//84
Alias.WiOp_processOk = Window_Options.prototype.processOk;
Window_Options.prototype.processOk = function () {
var index = this.index();
var symbol = this.commandSymbol(index);
if (symbol === "mppLongPress") {
var value = this.getConfigValue(symbol);
value += 3;
if (value > 30) value = 6;
this.changeValue(symbol, value);
} else if (MppOptions.isSymbol(symbol)) {
var status = MppOptions.getStatus(symbol);
var value = this.getConfigValue(symbol);
value++;
if (value >= status.length) value = 0;
value = value.clamp(0, status.length - 1);
this.changeValue(symbol, value);
} else {
Alias.WiOp_processOk.call(this);
}
};
//100
Alias.WiOp_cursorRight = Window_Options.prototype.cursorRight;
Window_Options.prototype.cursorRight = function (wrap) {
var index = this.index();
var symbol = this.commandSymbol(index);
if (symbol === "mppLongPress") {
var value = this.getConfigValue(symbol);
value += 3;
if (value > 30) value = 6;
this.changeValue(symbol, value);
} else if (MppOptions.isSymbol(symbol)) {
var status = MppOptions.getStatus(symbol);
var value = this.getConfigValue(symbol);
value++;
value = value.clamp(0, status.length - 1);
this.changeValue(symbol, value);
} else {
Alias.WiOp_cursorRight.call(this, wrap);
}
};
//113
Alias.WiOp_cursorLeft = Window_Options.prototype.cursorLeft;
Window_Options.prototype.cursorLeft = function (wrap) {
var index = this.index();
var symbol = this.commandSymbol(index);
if (symbol === "mppLongPress") {
var value = this.getConfigValue(symbol);
value -= 3;
if (value < 6) value = 30;
this.changeValue(symbol, value);
} else if (MppOptions.isSymbol(symbol)) {
var status = MppOptions.getStatus(symbol);
var value = this.getConfigValue(symbol);
value--;
value = value.clamp(0, status.length - 1);
this.changeValue(symbol, value);
} else {
Alias.WiOp_cursorLeft.call(this, wrap);
}
};
//=============================================================================
// Main
//=============================================================================
//-----------------------------------------------------------------------------
// Window
//6718
Window.prototype._refreshCursor = function () {
var w = this._cursorRect.width;
var h = this._cursorRect.height;
var m = 4;
var bitmap = new Bitmap(w, h);
this._windowCursorSprite.bitmap = bitmap;
if (w > 0 && h > 0 && this._windowskin) {
var skin = this._windowskin;
var p = 96;
var q = 48;
bitmap.blt(skin, p + m, p + m, q - m * 2, q - m * 2, m, m, w - m * 2, h - m * 2);
bitmap.blt(skin, p + m, p + 0, q - m * 2, m, m, 0, w - m * 2, m);
bitmap.blt(skin, p + m, p + q - m, q - m * 2, m, m, h - m, w - m * 2, m);
bitmap.blt(skin, p + 0, p + m, m, q - m * 2, 0, m, m, h - m * 2);
bitmap.blt(skin, p + q - m, p + m, m, q - m * 2, w - m, m, m, h - m * 2);
bitmap.blt(skin, p + 0, p + 0, m, m, 0, 0, m, m);
bitmap.blt(skin, p + q - m, p + 0, m, m, w - m, 0, m, m);
bitmap.blt(skin, p + 0, p + q - m, m, m, 0, h - m, m, m);
bitmap.blt(skin, p + q - m, p + q - m, m, m, w - m, h - m, m, m);
}
this._updateCursorPos();
};
//6804
Alias.Wi_updateCursor = Window.prototype._updateCursor;
Window.prototype._updateCursor = function () {
Alias.Wi_updateCursor.call(this);
this._updateCursorPos();
};
Window.prototype._updateCursorPos = function () {
var pad = this._padding;
var x = this._cursorRect.x + pad - this.origin.x;
var y = this._cursorRect.y + pad - this.origin.y;
var w = this._cursorRect.width;
var h = this._cursorRect.height;
var x2 = Math.max(x, pad);
var y2 = Math.max(y, pad);
var ox = x2 - x;
var oy = y2 - y;
var w2 = Math.min(w, this._width - pad - x2);
var h2 = Math.min(h, this._height - pad - y2);
this._windowCursorSprite.setFrame(ox, oy, w2, h2);
this._windowCursorSprite.move(x2, y2);
};
//-----------------------------------------------------------------------------
// TouchInput
//3487
Alias.ToIn_clear = TouchInput.clear;
TouchInput.clear = function () {
Alias.ToIn_clear.call(this);
this.mppStartX = 0;
this.mppStartY = 0;
this._mppLeftSwipe = false;
this._mppRightSwipe = false;
this._mppOk = false;
this._mppDoubleTap = false;
this._mppInterval = -1;
};
//3515
Alias.ToIn_update = TouchInput.update;
TouchInput.update = function () {
Alias.ToIn_update.call(this);
if (this.isReleased()) {
if (this._pressedTime >= 6) {
var sx = (this._x - this.mppStartX) / this._pressedTime;
this._mppLeftSwipe = sx < -6;
this._mppRightSwipe = sx > 6;
} else {
this._mppLeftSwipe = false;
this._mppRightSwipe = false;
}
if (!this._mppLeftSwipe && !this._mppRightSwipe &&
this._pressedTime <= MppOptions.longPress) {
this._mppOk = true;
var i = this._mppInterval;
this._mppDoubleTap = (i >= 0 && i < Params.DoubleTapInterval);
this._mppInterval = 0;
} else {
this._mppOk = false;
this._mppDoubleTap = false;
this._mppInterval = -1;
}
} else {
this._mppLeftSwipe = false;
this._mppRightSwipe = false;
this._mppOk = false;
this._mppDoubleTap = false;
if (this._mppInterval >= 0) this._mppInterval++;
}
};
TouchInput.isMppLeftSwipe = function () {
return this._mppLeftSwipe;
};
TouchInput.isMppRightSwipe = function () {
return this._mppRightSwipe;
};
TouchInput.isMppOk = function () {
return this._mppOk;
};
TouchInput.isMppDoubleTap = function () {
return this._mppDoubleTap;
};
//3763
Alias.ToIn__onMouseMove = TouchInput._onMouseMove;
TouchInput._onMouseMove = function (event) {
if (MppOptions.selectType === 0) {
Alias.ToIn__onMouseMove.apply(this, arguments);
} else {
var x = Graphics.pageToCanvasX(event.pageX);
var y = Graphics.pageToCanvasY(event.pageY);
if (Graphics.isInsideCanvas(x, y)) {
this._onMove(x, y);
this._date = Date.now();
}
}
};
//3891
Alias.ToIn__onTrigger = TouchInput._onTrigger;
TouchInput._onTrigger = function (x, y) {
Alias.ToIn__onTrigger.apply(this, arguments);;
this.mppStartX = x;
this.mppStartY = y;
};
TouchInput.clearMppInterval = function () {
this._mppInterval = -1;
};
//-----------------------------------------------------------------------------
// SoundManager
//37
Alias.SoMa_playCancel = SoundManager.playCancel;
SoundManager.playCancel = function () {
if (!$gameMessage.cancelOff) Alias.SoMa_playCancel.call(this);
};
//-----------------------------------------------------------------------------
// Game_Message
//15
Alias.GaMe_clear = Game_Message.prototype.clear;
Game_Message.prototype.clear = function () {
Alias.GaMe_clear.call(this);
this.cancelOff = false;
};
//-----------------------------------------------------------------------------
// Game_Interpreter
//1739
Alias.GaIn_pluginCommand = Game_Interpreter.prototype.pluginCommand;
Game_Interpreter.prototype.pluginCommand = function (command, args) {
Alias.GaIn_pluginCommand.call(this, command, args);
switch (command) {
case Params.PluginCommands.CancelOff:
case 'CancelOff':
$gameMessage.cancelOff = true;
}
};
//-----------------------------------------------------------------------------
// Window_Selectable
//13
Alias.WiSe_initialize = Window_Selectable.prototype.initialize;
Window_Selectable.prototype.initialize = function (x, y, width, height) {
Alias.WiSe_initialize.apply(this, arguments);
this._originYSpeed = [];
this._scrollOyDuration = 0;
this._targetOy = 0;
this._cursorMoveDuration = 0;
this._cursorX = -1;
this._cursorY = -1;
this._targetCursorX = -1;
this._targetCursorY = -1;
};
//
if (Window_Selectable.prototype.hasOwnProperty('contentsHeight')) {
Alias.WiSe_contentsHeight = Window_Selectable.prototype.contentsHeight;
}
Window_Selectable.prototype.contentsHeight = function () {
if (Alias.WiSe_contentsHeight) {
return Alias.WiSe_contentsHeight.call(this) + this.itemHeight();
} else {
return Window_Base.prototype.contentsHeight.call(this) + this.itemHeight();
}
};
//110
Alias.WiSe_setTopRow = Window_Selectable.prototype.setTopRow;
Window_Selectable.prototype.setTopRow = function (row) {
if (this.isSmoothScroll()) {
this.startScrollOy(row * this.itemHeight());
} else {
Alias.WiSe_setTopRow.apply(this, arguments);
this.resetOy();
}
};
Window_Selectable.prototype.isSmoothScroll = function () {
return (Params.SmoothScroll && this.visible && this.isOpen());
};
Window_Selectable.prototype.isTouchFollowing = function () {
return (TouchInput.date > Input.date && MppOptions.selectType === 1);
};
Window_Selectable.prototype.skipSmoothScroll = function () {
if (this._scrollOyDuration > 0) {
this._scrollOyDuration = 0;
this.gainOy(this._targetOy - this._scrollY - this.origin.y);
}
if (this._cursorMoveDuration > 0) {
this._cursorMoveDuration = 0;
this._cursorX = this._targetCursorX;
this._cursorY = this._targetCursorY;
this.refreshSmoothCursor();
}
};
Window_Selectable.prototype.startScrollOy = function (oy) {
this._scrollOyDuration = 6;
this._targetOy = oy.clamp(0, this.maxTopRow() * this.itemHeight());
};
//119
Alias.WiSe_resetScroll = Window_Selectable.prototype.resetScroll;
Window_Selectable.prototype.resetScroll = function () {
Alias.WiSe_resetScroll.call(this);
this.resetOy();
};
//140
Window_Selectable.prototype.setBottomRow = function (row) {
var oy = (row + 1) * this.itemHeight() - this.height + this.padding * 2;
if (this.isSmoothScroll()) {
this.startScrollOy(oy);
} else {
this.setOy(oy - this._scrollY);
}
};
Window_Selectable.prototype.resetOy = function () {
this.origin.y = 0;
this._originYSpeed = [];
this._scrollOyDuration = 0;
};
Window_Selectable.prototype.setOy = function (oy) {
var sr = Math.floor(oy / this.itemHeight());
var topRow = this.topRow();
if (sr !== 0) Alias.WiSe_setTopRow.call(this, topRow + sr);
if ((topRow <= 0 && oy < 0) ||
(this.topRow() >= this.maxTopRow() && oy > 0)) {
this.resetOy();
} else {
this.origin.y = oy.mod(this.itemHeight());
}
};
Window_Selectable.prototype.gainOy = function (amount) {
this.setOy(Math.floor(this.origin.y + amount));
};
//258
Alias.WiSe_scrollDown = Window_Selectable.prototype.scrollDown;
Window_Selectable.prototype.scrollDown = function () {
if (this.isSmoothScroll()) {
this.setTopRow(this.targetTopRow() + 1);
} else {
Alias.WiSe_scrollDown.call(this);
this.resetOy();
}
};
//264
Alias.WiSe_scrollUp = Window_Selectable.prototype.scrollUp;
Window_Selectable.prototype.scrollUp = function () {
if (this.isSmoothScroll()) {
if (this._scrollOyDuration === 0 && this.origin.y > 0) {
this.setTopRow(this.topRow());
} else {
this.setTopRow(this.targetTopRow() - 1);
}
} else if (this.origin.y > 0) {
this.resetOy();
} else {
Alias.WiSe_scrollUp.call(this);
this.resetOy();
}
};
Window_Selectable.prototype.targetTopRow = function () {
if (this._scrollOyDuration > 0) {
return Math.floor(this._targetOy / this.itemHeight());
} else {
return this.topRow();
}
};
//270
Alias.WiSe_update = Window_Selectable.prototype.update;
Window_Selectable.prototype.update = function () {
Alias.WiSe_update.call(this);
this.updateSmoothScroll();
this.updateSmoothCursor();
};
//280
Alias.WiSe_updateArrows = Window_Selectable.prototype.updateArrows;
Window_Selectable.prototype.updateArrows = function () {
Alias.WiSe_updateArrows.call(this);
var bottomY = this.maxRows() * this.itemHeight();
var realY = this._scrollY + this.origin.y + this.height - this.padding * 2;
this.downArrowVisible = this.downArrowVisible && bottomY > realY;
this.upArrowVisible = (this.upArrowVisible || this.origin.y > 0);
};
//340
Window_Selectable.prototype.processTouch = function () {
if (this.isOpenAndActive()) {
if (TouchInput.isTriggered()) {
this._touching = true;
this._selecting = true;
this._touchLastY = TouchInput.y;
this._touchInsided = this.isTouchedInsideFrame();
this._touchWarpUp = false;
this._touchWarpDown = false;
if (Params.ScrollWarp && this._touchInsided &&
this.origin.y === 0 && this.maxRows() > this.maxPageRows()) {
this._touchWarpUp = this.topRow() === 0;
this._touchWarpDown = this.topRow() === this.maxTopRow();
}
this._originYSpeed = [];
} else if (TouchInput.isCancelled()) {
if (Params.CancelEnabled && this.isCancelEnabled()) {
this.processCancel();
}
}
if (this._touching) {
if (TouchInput.isTriggered()) {
this.onTouch(false);
} else if (TouchInput.isPressed()) {
if (this.touchScroll()) {
this._selecting = false;
}
} else {
this.touchSwipe();
if (this._selecting && TouchInput.isMppOk()) {
this.onTouch(true);
} else {
TouchInput.clearMppInterval();
}
this._touching = false;
this._selecting = false;
}
}
if (!this._touching) {
if (this._originYSpeed.length > 0) {
this.addOriginYSpeed(this._originYSpeed[0] * 0.9);
if (Math.abs(this.originYSpeed()) < 2) this._originYSpeed = [];
} else if (this.isTouchFollowing() && TouchInput.isMoved()) {
this.onTouch(false);
}
}
this.updateTouchScroll();
} else {
this._touching = false;
this._selecting = false;
this._touchInside = false;
this._touchWarpUp = false;
this._touchWarpDown = false;
}
};
Window_Selectable.prototype.addOriginYSpeed = function (speed) {
this._originYSpeed.push(speed);
if (this._originYSpeed.length > 3) {
this._originYSpeed.shift();
}
};
Window_Selectable.prototype.originYSpeed = function () {
if (this._touching) {
return this._originYSpeed[this._originYSpeed.length - 1] || 0;
}
var speed = 0;
for (var i = 0; i < this._originYSpeed.length; i++) {
speed += this._originYSpeed[i];
}
return speed / (this._originYSpeed.length || 1);
};
Window_Selectable.prototype.touchScroll = function () {
if (this._touchInsided) {
this.addOriginYSpeed(this._touchLastY - TouchInput.y);
this._touchLastY = TouchInput.y;
return (Math.abs(TouchInput.y - TouchInput.mppStartY) > 12);
}
return false;
};
Window_Selectable.prototype.touchSwipe = function () {
if (TouchInput.isMppLeftSwipe()) {
if (this.isHandled('pageup')) this.processPageup();
} else if (TouchInput.isMppRightSwipe()) {
if (this.isHandled('pagedown')) this.processPagedown();
}
};
Window_Selectable.prototype.updateTouchScroll = function () {
if (this._touchWarpUp || this._touchWarpDown) {
var height = this.itemHeight();
if (TouchInput.mppStartY - TouchInput.y < -height) {
if (this._touchWarpUp) {
AudioManager.playStaticSe(Params.ScrollWarpSE);
this.setTopRow(this.maxTopRow());
this._touching = false;
this._originYSpeed = [];
if (!this.isSmoothScroll()) this.resetOy();
}
this._touchWarpUp = false;
this._touchWarpDown = false;
} else if (TouchInput.mppStartY - TouchInput.y > height) {
if (this._touchWarpDown) {
AudioManager.playStaticSe(Params.ScrollWarpSE);
this.setTopRow(0);
this._touching = false;
this._originYSpeed = [];
if (!this.isSmoothScroll()) this.resetOy();
}
this._touchWarpUp = false;
this._touchWarpDown = false;
}
}
if (this._touchInsided && this._originYSpeed.length > 0) {
this.gainOy(this.originYSpeed());
}
};
//368
Alias.WiSe_onTouch = Window_Selectable.prototype.onTouch;
Window_Selectable.prototype.onTouch = function (triggered) {
if (triggered) {
if (MppOptions.outsideTap === 1 &&
!this._touchInsided && !this.isTouchedInsideFrame()) {
if (this.isCancelEnabled()) this.processCancel();
} else if (MppOptions.okType < 2 || TouchInput.isMppDoubleTap()) {
TouchInput.clearMppInterval();
this._stayCount = 0;
Alias.WiSe_onTouch.call(this, triggered);
}
} else {
var lastIndex = this.index();
this._stayCount = 0;
Alias.WiSe_onTouch.call(this, triggered);
if (this.index() !== lastIndex) {
TouchInput.clearMppInterval();
if (MppOptions.okType === 0) {
this._selecting = false;
}
} else if (Params.CursorSeAlways) {
var x = this.canvasToLocalX(TouchInput.x);
var y = this.canvasToLocalY(TouchInput.y);
if (this.isContentsArea(x, y)) {
SoundManager.playCursor();
}
}
}
};
//393
Window_Selectable.prototype.hitTest = function (x, y) {
if (this.isContentsArea(x, y)) {
var cx = x - this.padding;
var cy = y - this.padding + this.origin.y;
var topIndex = this.topIndex();
var maxPageItems = this.maxPageItems() + this.maxCols();
for (var i = 0; i < maxPageItems; i++) {
var index = topIndex + i;
if (index < this.maxItems()) {
var rect = this.itemRect(index);
var right = rect.x + rect.width;
var bottom = rect.y + rect.height;
if (cx >= rect.x && cy >= rect.y && cx < right && cy < bottom) {
return index;
}
}
}
}
return -1;
};
//494
Alias.WiSe_updateCursor = Window_Selectable.prototype.updateCursor;
Window_Selectable.prototype.updateCursor = function () {
Alias.WiSe_updateCursor.call(this);
if (!this._cursorAll) {
var rect = this.itemRect(this.index());
this._targetCursorX = rect.x + this._scrollX;
this._targetCursorY = rect.y + this._scrollY;
if (this.isSmoothScroll() && this._cursorX >= 0 && this._cursorY >= 0 &&
this.index() >= 0) {
this._cursorMoveDuration = 6;
} else {
this._cursorX = this._targetCursorX;
this._cursorY = this._targetCursorY;
}
this.refreshSmoothCursor();
} else {
this.resetOy();
}
};
//507
Window_Selectable.prototype.isCursorVisible = function () {
var row = this.row();
return row >= this.topRow() && row <= this.bottomRow() + 1;
};
Window_Selectable.prototype.updateSmoothScroll = function () {
if (this._scrollOyDuration > 0) {
var d = this._scrollOyDuration;
var realOy = this._scrollY + this.origin.y;
this.gainOy((this._targetOy - realOy) * d / Method.tri(d));
this._scrollOyDuration--;
if (this._scrollOyDuration === 0 && this.isTouchFollowing()) {
this.onTouch(false);
}
}
};
Method.tri = function (n) {
return n * (n + 1) / 2;
};
Window_Selectable.prototype.updateSmoothCursor = function () {
if (this._cursorMoveDuration > 0) {
var d = this._cursorMoveDuration;
this._cursorX += (this._targetCursorX - this._cursorX) * d / Method.tri(d);
this._cursorY += (this._targetCursorY - this._cursorY) * d / Method.tri(d);
this._cursorMoveDuration--;
this.refreshSmoothCursor();
}
};
Window_Selectable.prototype.refreshSmoothCursor = function () {
var rect = this.itemRect(this.index());
var cy = this._cursorY - this._scrollY;
var pageHeight = this.height - this.padding * 2;
if (cy + rect.height >= 0 && cy < pageHeight + rect.height) {
var cx = this._cursorX - this._scrollX;
this.setCursorRect(cx, cy, rect.width, rect.height);
} else {
this.setCursorRect(0, 0, 0, 0);
}
};
//512
Alias.WiSe_ensureCursorVisible = Window_Selectable.prototype.ensureCursorVisible;
Window_Selectable.prototype.ensureCursorVisible = function () {
Alias.WiSe_ensureCursorVisible.call(this);
if (this.row() === this.topRow()) {
this.setTopRow(this.targetTopRow());
}
};
//541
Alias.WiSe_drawAllItems = Window_Selectable.prototype.drawAllItems;
Window_Selectable.prototype.drawAllItems = function () {
Alias.WiSe_drawAllItems.call(this);
var topIndex = this.topIndex() + this.maxPageItems();
for (var i = 0; i < this.maxCols(); i++) {
var index = topIndex + i;
if (index < this.maxItems()) {
this.drawItem(index);
}
}
};
//-----------------------------------------------------------------------------
// Window_ChoiceList
//99
Alias.WiChLi_contentsHeight = Window_ChoiceList.prototype.contentsHeight;
Window_ChoiceList.prototype.contentsHeight = function () {
return Alias.WiChLi_contentsHeight.call(this) + this.itemHeight();
};
//
if (Window_ChoiceList.prototype.hasOwnProperty('processCancel')) {
Alias.WiChLi_processCancel = Window_ChoiceList.prototype.processCancel;
}
Window_ChoiceList.prototype.processCancel = function () {
SoundManager.cancelOff = $gameMessage.cancelOff;
if (Alias.WiChLi_processCancel) {
Alias.WiChLi_processCancel.call(this);
} else {
Window_Command.prototype.processCancel.call(this);
}
SoundManager.cancelOff = false;
};
//-----------------------------------------------------------------------------
// Window_Status
Window_Status.prototype.isTouchedInsideFrame = function () {
return false;
};
//-----------------------------------------------------------------------------
// Window_ShopStatus
//48
Alias.WiShSt_changePage = Window_ShopStatus.prototype.changePage;
Window_ShopStatus.prototype.changePage = function () {
Alias.WiShSt_changePage.call(this);
Input.update();
TouchInput.update();
};
//-----------------------------------------------------------------------------
// Scene_Base
//96
Alias.ScBa_start = Scene_Base.prototype.start;
Scene_Base.prototype.start = function () {
Alias.ScBa_start.apply(this, arguments);
if (this._windowLayer) {
this._windowLayer.children.forEach(window => {
if (typeof window.skipSmoothScroll === "function") {
window.skipSmoothScroll();
}
});
}
};
})(this);