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

137 lines
No EOL
4.9 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// Copyright (c) 2017 fuku
// This software is released under the MIT License.
// http://opensource.org/licenses/mit-license.php
//
// 最新版は↓から
// http://www5f.biglobe.ne.jp/~fuku-labo/library/etc/
/*:
* @plugindesc イベントを震えさせる v1.00
* @author fuku
*
* @help プレイヤーキャラクターやイベントを震えさせます。
* イベントを震えさせた場合、マップを切り替えると効果が切れます。
*
* 使い方:全てスクリプトベースで操作します。
*
* 震え開始(イベントID指定)
* Fuku_Plugins.EventTremble.start(number イベントID,number 震え強度,number 震え速度 [,number 実行周期])
*
* 「イベントID」のイベント(-1でプレイヤー)を震えさせます。
* 強度は震える幅で、速度は小数を使えます。
* 実行周期は左右に一回震えて戻るまでを1として、指定した周期分震えたら停止します。
* 実行周期を省略した場合、停止させるまで永続して震えます。
* 例Fuku_Plugins.EventTremble.start(-1,8,0.8);
*
*
* 震え停止(イベントID指定)
* Fuku_Plugins.EventTremble.stop(number イベントID)
*
* このプラグインで震えさせている「イベントID」のイベント(-1でプレイヤー)の震えを止めます。
* 例Fuku_Plugins.EventTremble.stop(-1);
*
*
* 震え開始(イベントオブジェクト指定)
* Fuku_Plugins.EventTremble.startObject(Game_CharacterBase イベント,number 震え強度,number 震え速度 [,number 実行周期])
*
* 指定したイベントを震えさせます。強度は震える幅で、速度は小数を使えます。
* 実行周期は左右に一回震えて戻るまでを1として、指定した周期分震えたら停止します。
* 実行周期を省略した場合、停止させるまで永続して震えます。
* 例Fuku_Plugins.EventTremble.startObject($gamePlayer,8,0.8);
*
*
* 震え停止(イベントオブジェクト指定)
* Fuku_Plugins.EventTremble.stopObject(Game_CharacterBase イベント)
*
* このプラグインで震えさせている、指定したイベントの震えを止めます。
* 例Fuku_Plugins.EventTremble.stopObject($gamePlayer);
*/
var Fuku_Plugins=Fuku_Plugins||{};
Fuku_Plugins.EventTremble={Version:100};
(function(){
'use strict';
var dm_extractSaveContents=DataManager.extractSaveContents;
DataManager.extractSaveContents=function(contents){
dm_extractSaveContents.apply(this,arguments);
var restore=function(ev){
if(!ev) {return;}
if(ev._fuku_trembleinfo){
var power,speed,stop_cycle;
power=ev._fuku_trembleinfo.power;
speed=ev._fuku_trembleinfo.speed;
stop_cycle=ev._fuku_trembleinfo.stop_cycle;
ev._fuku_trembleinfo=undefined;
if(power){
Fuku_Plugins.EventTremble.startObject(ev,power,speed,stop_cycle);
}
}
};
restore($gamePlayer);
$gameMap.events().forEach(restore);
};
var hook_screenX=function(){
return this._fuku_trembleinfo.screenX.call(this)+this._fuku_trembleinfo.offsetx;
};
var hook_update=function(){
var trembleinfo=this._fuku_trembleinfo;
trembleinfo.update.apply(this,arguments);
if(!trembleinfo.power)return;
trembleinfo.ang+=trembleinfo.speed;
trembleinfo.offsetx=Math.round(Math.sin(trembleinfo.ang)*trembleinfo.power);
if(trembleinfo.stop_ang && (trembleinfo.ang>trembleinfo.stop_ang)){
Fuku_Plugins.EventTremble.stopObject(this);
}
};
Fuku_Plugins.EventTremble.startObject=function(event,power,speed,stop_cycle){
if(!event._fuku_trembleinfo){
event._fuku_trembleinfo={ang:0.0,offsetx:0,screenX:event.screenX,update:event.update};
event.screenX=hook_screenX;
event.update=hook_update;
}
event._fuku_trembleinfo.power=power;
event._fuku_trembleinfo.speed=speed;
if(stop_cycle){
event._fuku_trembleinfo.stop_cycle=stop_cycle;
event._fuku_trembleinfo.stop_ang=event._fuku_trembleinfo.ang+stop_cycle*Math.PI*2;
}
else{
event._fuku_trembleinfo.stop_cycle=null;
event._fuku_trembleinfo.stop_ang=null;
}
return true;
};
Fuku_Plugins.EventTremble.start=function(eventid,power,speed,stop_cycle){
var event=(eventid<0?$gamePlayer:$gameMap.event(eventid));
if(!event)return false;
return Fuku_Plugins.EventTremble.startObject(event,power,speed,stop_cycle);
};
Fuku_Plugins.EventTremble.stopObject=function(event){
if(!event._fuku_trembleinfo)return false;
if((event.screenX===hook_screenX)&&(event.update===hook_update)){
event.screenX=event._fuku_trembleinfo.screenX;
event.update=event._fuku_trembleinfo.update;
event._fuku_trembleinfo=undefined;
}
else{
event._fuku_trembleinfo.power=null;
event._fuku_trembleinfo.ang=0.0;
event._fuku_trembleinfo.offsetx=0;
}
return true;
};
Fuku_Plugins.EventTremble.stop=function(eventid){
var event=(eventid<0?$gamePlayer:$gameMap.event(eventid));
if(!event)return false;
return Fuku_Plugins.EventTremble.stopObject(event);
};
Fuku_Plugins.EventTremble.speed2cycleframe=function(speed){
return Math.PI*2/speed;
};
})();