princess-synergy/www/js/plugins/JsScript21Set.js
2026-02-05 14:03:22 -06:00

117 lines
4.7 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.

// Copyright (c) 2015-2016 Triacontane
// http://opensource.org/licenses/mit-license.php
// [Blog] : http://triacontane.blogspot.jp/
// [Twitter]: https://twitter.com/triacontane/
// [GitHub] : https://github.com/triacontane/
/*:
* @plugindesc
* @author triacontane
*
* @help
*/
/*:ja
* @plugindesc
* @author トリアコンタン
*
* @help
*/
(function() {
'use strict';
var metaTagPrefix = 'DS_';
var getCommandName = function(command) {
return (command || '').toUpperCase();
};
var getArgNumber = function(arg, min, max) {
if (arguments.length < 2) min = -Infinity;
if (arguments.length < 3) max = Infinity;
return (parseInt(convertEscapeCharacters(arg), 10) || 0).clamp(min, max);
};
var convertEscapeCharacters = function(text) {
if (text == null) text = '';
var windowLayer = SceneManager._scene._windowLayer;
return windowLayer ? windowLayer.children[0].convertEscapeCharacters(text) : text;
};
var _Game_Interpreter_pluginCommand = Game_Interpreter.prototype.pluginCommand;
Game_Interpreter.prototype.pluginCommand = function(command, args) {
_Game_Interpreter_pluginCommand.apply(this, arguments);
var commandPrefix = new RegExp('^' + metaTagPrefix);
if (!command.match(commandPrefix)) return;
try {
this.pluginCommandDirectivityShake(command.replace(commandPrefix, ''), args);
} catch (e) {
if ($gameTemp.isPlaytest() && Utils.isNwjs()) {
var window = require('nw.gui').Window.get();
if (!window.isDevToolsOpen()) {
var devTool = window.showDevTools();
devTool.moveTo(0, 0);
devTool.resizeTo(window.screenX + window.outerWidth, window.screenY + window.outerHeight);
window.focus();
}
}
console.log('プラグインコマンドの実行中にエラーが発生しました。');
console.log('- コマンド名  : ' + command);
console.log('- コマンド引数 : ' + args);
console.log('- エラー原因 : ' + e.stack || e.toString());
}
};
Game_Interpreter.prototype.pluginCommandDirectivityShake = function(command, args) {
switch (getCommandName(command)) {
case '方向設定' :
case 'SET_ROTATION' :
$gameScreen.setShakeRotation(getArgNumber(args[0]));
break;
case 'SIN振動' :
case 'SIN_WAVE' :
$gameScreen.setShakeSinWave();
break;
}
};
Game_Screen.prototype.getShakeRotation = function() {
return this._shakeRotation;
};
Game_Screen.prototype.setShakeRotation = function(value) {
this._shakeRotation = value * Math.PI / 180;
};
Game_Screen.prototype.setShakeSinWave = function() {
this._shakeSinWave = true;
};
var _Game_Screen_clearShake = Game_Screen.prototype.clearShake;
Game_Screen.prototype.clearShake = function() {
_Game_Screen_clearShake.apply(this, arguments);
this.clearDirectivityShake();
};
Game_Screen.prototype.clearDirectivityShake = function() {
this._shakeRotation = 0;
this._shakeSinWave = false;
};
var _Game_Screen_updateShake = Game_Screen.prototype.updateShake;
Game_Screen.prototype.updateShake = function() {
var wasShake = this.isNeedShakeUpdate();
if (this._shakeSinWave && wasShake) {
this.updateSinShake();
} else {
_Game_Screen_updateShake.apply(this, arguments);
}
if (wasShake && !this.isNeedShakeUpdate()) {
this.clearDirectivityShake();
}
};
Game_Screen.prototype.updateSinShake = function() {
this._shake = Math.sin(3 * this._shakeDuration * this._shakeSpeed * Math.PI / 180) * this._shakePower * 3;
this._shakeDuration--;
};
Game_Screen.prototype.isNeedShakeUpdate = function() {
return this._shakeDuration > 0 || this._shake !== 0;
};
var _Spriteset_Base_updatePosition = Spriteset_Base.prototype.updatePosition;
Spriteset_Base.prototype.updatePosition = function() {
_Spriteset_Base_updatePosition.apply(this, arguments);
var shakeRotation = $gameScreen.getShakeRotation();
if (shakeRotation) {
var shakeDistance = Math.round($gameScreen.shake());
this.x -= shakeDistance;
this.x += Math.cos(shakeRotation) * shakeDistance;
this.y += Math.sin(shakeRotation) * shakeDistance;
}
};
})();