OMORI_Android/www.eng/js/plugins/WaitFPS.js
2024-01-15 18:44:53 +03:00

138 lines
4.2 KiB
JavaScript
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//========================================
// WaitFPS.js
// by Tsukimi
// Last Updated: 2018.10.22
// update history:
// 2018.11.09 v0.2 add max Wait Time
// 2018.10.22 v0.1 finished
//========================================
/*:en
* @plugindesc WaitFPS
* @author Tsukimi
*
* @param momentFPSThreshold
* @text 瞬間FPS閾値
* @type Number
* @default 57
*
* @param meanFPSFrames
* @text 平均FPS計測フレーム数
* @type Number
* @default 3
*
* @param meanFPSThreshold
* @text 平均FPS閾値
* @type Number
* @default 50
*
* @param maxWaitTime
* @text 最大待ち時間
* @type Number
* @default 60
*
* @help
*
* WaitFPS
* 作者:ツキミ
*
* FPSが安定するまで待つプラグインです。
* 主に「場所移動」後と重い処理後に使用されるかと思います。
*
* ***************************************************
* プラグインコマンド:
* イベントコマンド「プラグインコマンド」から実行。
* (パラメータの間は半角スペースで区切る)
*
*  WaitFPS
*   FPSが閾値を超えない限り、次のコマンドを実行しません。
*
*/
(function() {
'use strict';
//===========================
// plugin parameter
//===========================
var pluginName = 'WaitFPS';
var getParamString = function(paramNames) {
if (!Array.isArray(paramNames)) paramNames = [paramNames];
for (var i = 0; i < paramNames.length; i++) {
var name = PluginManager.parameters(pluginName)[paramNames[i]];
if (name) return name;
}
return null;
};
var getParamNumber = function(paramNames) {
return Number(getParamString(paramNames)) || 0;
};
var momentFPSThreshold = getParamNumber("momentFPSThreshold");
var meanFPSThreshold = getParamNumber("meanFPSThreshold");
var meanFPSFrames = getParamNumber("meanFPSFrames");
var maxWaitTime = getParamNumber("maxWaitTime");
//===========================
// Game_Interpreter
// Plugin Command setting.
//===========================
var _Game_Interpreter_clear = Game_Interpreter.prototype.clear;
Game_Interpreter.prototype.clear = function() {
_Game_Interpreter_clear.apply(this, arguments);
this._MFPSwait = maxWaitTime;
};
var _Game_Interpreter_pluginCommand = Game_Interpreter.prototype.pluginCommand;
Game_Interpreter.prototype.pluginCommand = function(command, args) {
_Game_Interpreter_pluginCommand.apply(this, arguments);
if((command || '').toUpperCase() !== "WAITFPS") return;
this._waitCount = 1;
this.setWaitMode("fps");
};
var _Game_Interpreter_updateWaitMode = Game_Interpreter.prototype.updateWaitMode;
Game_Interpreter.prototype.updateWaitMode = function() {
var waiting = false;
if(this._waitMode == "fps") {
this._MFPSwait--;
waiting = !SceneManager.meetFPSCondition();
if (!waiting || this._MFPSwait <= 0) {
this._waitMode = '';
this._MFPSwait = maxWaitTime;
}
}
else waiting = _Game_Interpreter_updateWaitMode.apply(this, arguments);
return waiting;
};
//===========================
// SceneManager
//===========================
SceneManager._momentFPS = 0;
SceneManager._meanFPSArr = [];
SceneManager.meetFPSCondition = function() {
var meanFPS = 0;
for(var i = 0; i < this._meanFPSArr.length; i++) {
meanFPS += this._meanFPSArr[i];
}
meanFPS /= this._meanFPSArr.length;
return (this._momentFPS > momentFPSThreshold && meanFPS > meanFPSThreshold);
};
var _SceneManager_updateMain = SceneManager.updateMain;
SceneManager.updateMain = function() {
var newTime = this._getTimeInMsWithoutMobileSafari();
var fTime = (newTime - this._currentTime) / 1000;
this._momentFPS = 1/fTime;
this._meanFPSArr.push(this._momentFPS);
if(this._meanFPSArr.length > meanFPSFrames) this._meanFPSArr.shift();
_SceneManager_updateMain.apply(this, arguments);
};
})();