brainwashing-school/js/plugins/Mano_OneButtonCommonEventCall.js
2025-05-30 08:36:40 -05:00

429 lines
12 KiB
JavaScript

//=============================================================================
// Mano_SymbolCommonEventCall.js
// ----------------------------------------------------------------------------
// Copyright (c) 2017-2017 Sigureya
// This software is released under the MIT License.
// http://opensource.org/licenses/mit-license.php
// ----------------------------------------------------------------------------
// [Twitter]: https://twitter.com/Sigureya/
// [github]:https://github.com/Sigureya/RPGmakerMV
//=============================================================================
/*:
* @plugindesc マップ上で、1ボタンでコモンイベントを呼び出す機能を追加します。
* @target MZ
*
*
* @author しぐれん(魔のささやき)
*
* @param commonA
* @type struct<CommonDefine>
*
* @param commonB
* @type struct<CommonDefine>
*
* @param commonC
* @type struct<CommonDefine>
*
* @param commonD
* @type struct<CommonDefine>
*
* @param commonE
* @type struct<CommonDefine>
*
* @param commonF
* @type struct<CommonDefine>
*
* @param commonG
* @type struct<CommonDefine>
*
* @param commonH
* @type struct<CommonDefine>
*
* @param debugMode
* @desc デバッグモードです。
* 設定ミスがある場合、コンソールにエラー文章を表示します。
* @type boolean
* @default true
*
* @help
* 1ボタンでコモンイベントを呼び出せるようになります。
* ゲームパッドにも対応しています。
*
* マップ中でのみ有効です。
* Aから順に呼び出し判定を行います。
* 一つでも呼びだされた場合、残りは呼ばれません.
*
* 呼び出しのタイミングは、通常のコモンイベントの実行が終了したあとです。
*
* ゲームパッドのボタンですが、割り当てはGamepadAPIで調べてください。
* 16は意図的に割り当て不能にしています。
* 存在しない場合もあるためです。
* 12から15は十字キーなので不可。
* 元から機能が割り当てられている0~5への割り当ては、自己責任でお願いします。
*
* Mano_InputConfigよりも上に入れることで、
* Mano_InputConfig用の設定を自動で用意します。
*
* Mano_InputConfigと一緒に入れている状態で動かない場合、
* オプション画面を開いて初期設定に戻すを選択してください。
* 解決するかもしれません。
*
*
* ver 2.3 (2018/11/18)
* 旧方式を使いたいという声があったので、形を変えて復活
*
* ver 2.2
* キーコードの設定方法で、旧型式を完全に削除
*
* ver 2.1(2018/03/01) 更新
* 破壊的変更
* 割り込み設定のパラメータを追加
* アクションゲームで使っている方は要注意
* パラメータのデフォルト値を変更
* 自分で使っていて、ミスが多発したので
* ver 2.0(2018/02/01) 更新
* 破壊的変更
* キーコードの指定方法を変更 数字キーを押して、動作を確認してください。
*
* var 1.0(2017/10/17) 公開
*/
/**
* TODO:
* autoExportの無効化機能
*
*/
/*~struct~CommonDefine:
* @param text
* @desc コマンド名称です
*
* @param enabled
* @desc このパラメータがONの時だけ、機能します
* デバッグ用に機能を無効化する場合を想定しています
* @type boolean
* @default true
*
* @param enableSwitch
* @desc 指定したスイッチがONの時だけ、呼びだしを行います。
* 指定がない場合、チェックしません。
* @type switch
* @default 0
*
* @param event
* @desc 呼びだされるコモンイベント
* @type common_event
*
* @param symbol
* @desc Input.isTriggered()の引数として使われます。
* 他のプラグインと重複しないような名前を付けてください。
*
* @param interrupt
* @desc 他のイベントが実行されている時に割り込むかを決めます。
* アクションゲームの場合、trueにすると良いと思います。
* @on 割り込む
* @off 割り込まない(入力を無視)
* @type boolean
* @default false
*
* @param mandatory
* @desc inputConfigの方で必須指定されたものとして扱います。
* @type boolean
* @default false
*
*
* @param keyList
* @desc キーボードの割り当てです。(半角・大文字)
* ADと入れればAかDを押したときにイベントを実行します。
* @type string
*
* @param keycodeList
* @desc キーコードを数字で直接指定します。
* キーコードについては各自で検索してください。
* @type number[]
* @default []
*
* @param padButton
* @desc ゲームパッドの割り当てです
* カッコ内はツクールのデフォルトでの割り当てです
* @type select
* @default -1
* @option non(割り当てなし)
* @value -1
* @type select
* @option button6(L2)
* @value 6
* @option button7(R2)
* @value 7
* @option button8(select)
* @value 8
* @option button9(start)
* @value 9
* @option button10
* @value 10
* @option button11
* @value 11
* @option button0(ok/決定)
* @value 0
* @option button1(cancel/キャンセル)
* @value 1
* @option button2(shift/ダッシュ)
* @value 2
* @option button3(menu/メニュー)
* @value 3
* @option button4(pageup)
* @value 4
* @option button5(pagedown)
* @value 5
*
*/
var MA_InputSymbols =MA_InputSymbols||[];
var Mano_OneButtonCommonEventCall = (function () {
'use strict';
class MA_OneButtonCommonEvent {
/**
* @param {Number} settingId
*/
constructor(settingId) {
this._settingId = settingId;
this._interpreter = null;
this.refresh();
}
refresh() {
const def = this.mySetting();
if(!def){
this._interpreter =null;
return;
}
if (!this._interpreter) {
this._interpreter = new Game_Interpreter();
}
}
/**
* @return {RPG.Event}
*/
event() {
const eventId = this.mySetting().eventId;
return $dataCommonEvents[eventId];
}
commonEventId(){
return this._commonEventId;
}
/**
* @return {RPG.EventCommand[]}
*/
list() {
return this.event().list;
}
get switchId(){
return this.mySetting().enableSwitch;
}
isSwitchOk() {
const switchId =this.switchId;
return switchId === 0 || $gameSwitches.value(switchId);
}
isCallOK() {
const def = this.mySetting();
if (!Input.isTriggered(def.symbol)) {
return false;
}
return (!SceneManager.isSceneChanging())
&& (!this._interpreter.isRunning())
&& (def.interrupt || !$gameMap.isEventRunning())
&& this.isSwitchOk();
}
update() {
if (this._interpreter) {
if (this.isCallOK()) {
this._interpreter.setup(this.list());
}
this._interpreter.update();
}
}
onLoad(){
this.refresh();
}
mySetting(){
return setting.eventList[this._settingId];
}
settingId(){
return this._settingId;
}
}
window[MA_OneButtonCommonEvent.name] = MA_OneButtonCommonEvent;
const setting= (function(){
/**
* @return {Number[]}
* @param {String} text
*/
function parseNumbers(text){
if(!text){
return [];
}
const obj = JSON.parse(text);
if(!obj.map){
return [];
}
return obj.map(function(v){return Number(v);});
}
const params =PluginManager.parameters('Mano_OneButtonCommonEventCall')
const isDebug = Utils.isOptionValid("test") && (params.isDebug==='true');
function fetchCommonEvent(CommonDefine){
if(!CommonDefine){
return null;
}
const obj =JSON.parse(CommonDefine);
const enabled=(obj.enabled==='true');
if(!enabled){
// if(isDebug){
// console.log("無効だから無視したよ");
// }
return null;
}
const eventId_ = Number(obj.event);
if(!(eventId_>0)){
if(isDebug){
console.log("イベント番号が不正だからやめたよ")
}
return null;
}
if(!obj.symbol){
if(isDebug){
console.log("シンボルが設定されてないよ");
}
return null;
}
return {
enableSwitch:Number(obj.enableSwitch ||0 ),
symbol:String(obj.symbol),
text:String(obj.text),
eventId:eventId_,
keyList:String(obj.keyList),
keycodeList:parseNumbers(obj.keycodeList),
padButtonNumber:Number(obj.padButton),
mandatory:(obj.mandatory==='true'),
interrupt:(obj.interrupt==='true'),
};
}
function createCommonEventList(params){
return [
fetchCommonEvent(params.commonA),
fetchCommonEvent(params.commonB),
fetchCommonEvent(params.commonC),
fetchCommonEvent(params.commonD),
fetchCommonEvent(params.commonE),
fetchCommonEvent(params.commonF),
fetchCommonEvent(params.commonG),
fetchCommonEvent(params.commonH),
];//.filter(function(e){return !!e});
}
const result= {
eventList:createCommonEventList(params),
isDebug : isDebug,
};
return result
})();
(function(){
/**
* @param {Number} keycode
* @param {String} symbol
*/
function setKeySymbol(keycode,symbol){
const preDef =Input.keyMapper[keycode ];
if(preDef){
// console.log("上書き警告("+keycode+"):"+preDef+"を"+symbol+"に上書きしようとしています");
}
// console.log("keycode:"+keycode+"に"+symbol);
Input.keyMapper[keycode ] =symbol;
console.log(Input.keyMapper[keycode ]);
}
setting.eventList.forEach(function(data){
if(!data){return;}
const keyListLen = data.keyList.length;
for(var i=0; i < keyListLen; ++i){
setKeySymbol( data.keyList.charCodeAt(i) ,data.symbol);
}
for (const keycode of data.keycodeList) {
setKeySymbol(keycode,data.symbol);
}
if( ( data.padButtonNumber)>=0){
// console.log("button"+data.padButtonNumber+"="+data.symbol);
Input.gamepadMapper[ data.padButtonNumber]=data.symbol;
}
MA_InputSymbols.push({
mandatory:data.mandatory,
text:data.text,
symbol:data.symbol,
});
});
})();
function createOneButtonEvents2(){
return setting.eventList.map(function(e,index){
const result = new MA_OneButtonCommonEvent(index);
return result;
});
}
const Game_Map_initialize=Game_Map.prototype.initialize;
Game_Map.prototype.initialize =function(){
Game_Map_initialize.apply(this,arguments);
this.initOneButtonEvents();
};
Game_Map.prototype.initOneButtonEvents =function(){
if(!this._oneButtonEvents){
this._oneButtonEvents =createOneButtonEvents2();
}
};
const Game_Map_updateEvents=Game_Map.prototype.updateEvents;
Game_Map.prototype.updateEvents =function(){
for (const one of this._oneButtonEvents) {
if(one){
one.update();
}
}
Game_Map_updateEvents.call(this);
};
const DataManager_extractSaveContents=DataManager.extractSaveContents;
DataManager.extractSaveContents=function(contents){
DataManager_extractSaveContents.call(this,contents);
$gameMap.initOneButtonEvents();
for (const iterator of $gameMap._oneButtonEvents) {
iterator.onLoad();
}
};
return {
Event:MA_OneButtonCommonEvent,
};
})();