//=============================================================================
// FPSLimitSettings.js 1.01
//=============================================================================

/*:ja
 * @plugindesc ゲームのフレームレート最大値設定をオプション項目に加えます。variablesには任意の変数の値を入れて下さい。
 * @author econa(ecoddr)　http://ecoddr.blog.jp/
 * 
 * ver1.01 2016/11/22 カーソル操作の左右を反対に設定しました。
 * @param variables
 * @desc フレームレートの制御用に使用する変数の番号です。
 * @default 123
 *
 *
 * @help
 *
 * ゲームのフレームレート最大値設定をオプション項目に加えます。
 * variablesには任意の変数の値を入れて下さい。
 * 変数を制御することでゲーム内のイベントでも変更できます。
 *
 * 【備考】
 * コメント部分は削除不可。
 * その他、制限はありません。
 *
 */


(function() {

    var parameters = PluginManager.parameters('FPSLimitSettings');	
	var v = Number(parameters['variables']);
	var _Scene_Base_create = Scene_Base.prototype.create;
	

	Graphics.render = function(stage) {
    	if (this._skipCount === 0) {
        	var startTime = Date.now();
        	if (stage) {
            	this._renderer.render(stage);
        	}
        	var endTime = Date.now();
        	var elapsed = endTime - startTime;
        	this._skipCount = Math.min(Math.floor(elapsed / 15), this._maxSkip) + $gameVariables.value(v);
        	this._rendered = true;
    	} else {
        	this._skipCount--;
        	this._rendered = false;
    	}
    	this.frameCount++;
	};


//-----------------------------------------------------------------------------
// Window_Options
//
// The window for changing various settings on the options screen.

	Window_Options.prototype.makeCommandList = function() {
	    this.addGeneralOptions();
	    this.addVolumeOptions();
	    this.addFpsOptions();
	};

	Window_Options.prototype.addFpsOptions = function() {
	    this.addCommand("FPS最大値", 'fpsLimit');
	    if (ConfigManager['fpsLimit'] == null) {ConfigManager['fpsLimit'] = 0;}
	};

	Window_Options.prototype.statusText = function(index) {
	    var symbol = this.commandSymbol(index);
	    var value = this.getConfigValue(symbol);
	    if (this.isFpsLimitSymbol(symbol)) {
	    	return this.fpsLimitText(value);
	    } else if (this.isVolumeSymbol(symbol)) {
	        return this.volumeStatusText(value);
	    } else {
	        return this.booleanStatusText(value);
	    }
	};

	Window_Options.prototype.isFpsLimitSymbol = function(symbol) {
	    return symbol.contains('fps');
	};

	Window_Options.prototype.fpsLimitText = function(value) {
	    switch ($gameVariables.value(v)) {
	    case 0:
	    	return "60fps";
	    	break;
	    case 1:
	    	return "30fps";
	    	break;
	    case 2:
	    	return "20fps";
	    	break;
	    case 3:
	    	return "15fps";
	    	break;
	    }
	};

	Window_Options.prototype.processOk = function() {
	    var index = this.index();
	    var symbol = this.commandSymbol(index);
	    var value = this.getConfigValue(symbol);
	    if (this.isFpsLimitSymbol(symbol)) {
	    	$gameVariables.setValue(v,value + 1);
	    	if ($gameVariables.value(v) < 0) {
	    		$gameVariables.setValue(v,0);
	    	} else if ($gameVariables.value(v) > 3){
	    		$gameVariables.setValue(v,0);
	    	}
	        this.changeValue(symbol, $gameVariables.value(v));
	    } else if (this.isVolumeSymbol(symbol)) {
	        value += this.volumeOffset();
	        if (value > 100) {
	            value = 0;
	        }
	        value = value.clamp(0, 100);
	        this.changeValue(symbol, value);
	    } else {
	        this.changeValue(symbol, !value);
	    }
	};

	Window_Options.prototype.cursorRight = function(wrap) {
	    var index = this.index();
	    var symbol = this.commandSymbol(index);
	    var value = this.getConfigValue(symbol);
	    if (this.isFpsLimitSymbol(symbol)) {
	    	$gameVariables.setValue(v,value - 1);
	    	if ($gameVariables.value(v) < 0) {
	    		$gameVariables.setValue(v,0);
	    	} else if ($gameVariables.value(v) > 3){
	    		$gameVariables.setValue(v,3);
	    	}
	        this.changeValue(symbol, $gameVariables.value(v));
	    } else if (this.isVolumeSymbol(symbol)) {
	        value += this.volumeOffset();
	        value = value.clamp(0, 100);
	        this.changeValue(symbol, value);
	    } else {
	        this.changeValue(symbol, true);
	    }
	};

	Window_Options.prototype.cursorLeft = function(wrap) {
	    var index = this.index();
	    var symbol = this.commandSymbol(index);
	    var value = this.getConfigValue(symbol);
	    if (this.isFpsLimitSymbol(symbol)) {
	    	$gameVariables.setValue(v,value + 1);
	    	if ($gameVariables.value(v) < 0) {
	    		$gameVariables.setValue(v,0);
	    	} else if ($gameVariables.value(v) > 3){
	    		$gameVariables.setValue(v,3);
	    	}
	        this.changeValue(symbol, $gameVariables.value(v));
	    } else if (this.isVolumeSymbol(symbol)) {
	        value -= this.volumeOffset();
	        value = value.clamp(0, 100);
	        this.changeValue(symbol, value);
 	    } else {
	        this.changeValue(symbol, false);
	    }
	};

})();