357 lines
16 KiB
JavaScript
357 lines
16 KiB
JavaScript
//Copyright (c) 2018 蔦森くいな
|
||
//http://opensource.org/licenses/mit-license.php
|
||
//blog : http://paradre.com/
|
||
//Twitter: https://twitter.com/Kuina_T
|
||
/*:
|
||
* @plugindesc
|
||
* @author 蔦森くいな
|
||
*
|
||
* @help
|
||
*/
|
||
(function() {
|
||
Game_Event.prototype.pd_TE_resetPropaty = function() {
|
||
this.__pd_TE.touchTriggerType = 0;
|
||
this.__pd_TE.touchSwitchIndex = ['',''];
|
||
this.__pd_TE.Hash = {};
|
||
this.__pd_TE.triggerDisable = false;
|
||
this.__pd_TE.tag = [];
|
||
this.__pd_TE.ETE_TriggerType = 0;
|
||
this.__pd_TE.ETE_Tag = [];
|
||
this.__pd_TE.ETE_SwitchIndex = ['',''];
|
||
this.__pd_TE.EFE_TriggerType = 0;
|
||
this.__pd_TE.EFE_Tag = [];
|
||
this.__pd_TE.EFE_SwitchIndex = ['',''];
|
||
this.__pd_TE.EFE_exception = false;
|
||
this.__pd_TE.Touch_forceRun = false;
|
||
this.__pd_TE.lastTouchedEvent = null;
|
||
this.__pd_TE.ETR_TriggerType = 0;
|
||
this.__pd_TE.ETR_Num = [];
|
||
this.__pd_TE.ETR_SwitchIndex = ['',''];
|
||
};
|
||
var pd_TE_Game_Event_initialize = Game_Event.prototype.initialize;
|
||
Game_Event.prototype.initialize = function(mapId, eventId) {
|
||
this.__pd_TE = {};
|
||
this.pd_TE_resetPropaty();
|
||
pd_TE_Game_Event_initialize.call(this, mapId, eventId);
|
||
};
|
||
var pd_TE_Game_Map_setupEvents = Game_Map.prototype.setupEvents;
|
||
Game_Map.prototype.setupEvents = function() {
|
||
if($gameMap._pd_TE_EFE_Enable === true){
|
||
$gameMap._pd_TE_EFE_Enable = false;
|
||
}
|
||
pd_TE_Game_Map_setupEvents.call(this);
|
||
};
|
||
var pd_TE_Game_Event_clearPageSettings = Game_Event.prototype.clearPageSettings;
|
||
Game_Event.prototype.clearPageSettings = function() {
|
||
pd_TE_Game_Event_clearPageSettings.call(this);
|
||
this.pd_TE_resetPropaty();
|
||
};
|
||
var pd_TE_Game_Event_setupPageSettings = Game_Event.prototype.setupPageSettings;
|
||
Game_Event.prototype.setupPageSettings = function() {
|
||
pd_TE_Game_Event_setupPageSettings.call(this);
|
||
this.pd_TE_resetPropaty();
|
||
var Command_List = this.list();
|
||
var index = 0;
|
||
while(Command_List[index].code === 108 || Command_List[index].code === 408){
|
||
var command = Command_List[index].parameters[0].toLowerCase().replace(/ /g,' ').split(' ');
|
||
for(var i = 0, len = command.length; i < len; i++){
|
||
var param = command[i].replace(/:/g,',').replace(/:/g,',').split(',');
|
||
var header = param[0].substr(0,1);
|
||
if(header === '#') param[0] = param[0].substr(1);
|
||
switch(param[0]){
|
||
case 'タッチ':
|
||
case 'touch':
|
||
if(param.length > 1){
|
||
if(header === '#'){
|
||
this.__pd_TE.touchTriggerType = 2;
|
||
}else{
|
||
this.__pd_TE.touchTriggerType = 1;
|
||
}
|
||
this.__pd_TE.touchSwitchIndex = this.pd_TE_CheckSwitchIndex(param[1]);
|
||
}else{
|
||
this.__pd_TE.touchTriggerType = 1;
|
||
}
|
||
break;
|
||
case 'バルーン':
|
||
if (param.length > 1) {
|
||
this.TCkBlnNo = Number(param[1]);
|
||
}
|
||
break;
|
||
case '距離':
|
||
if (param.length > 1) {
|
||
this.TCkKyori = Number(param[1]);
|
||
}
|
||
break;
|
||
case 'タップ':
|
||
case 'tap':
|
||
if(param.length > 1){
|
||
if(header === '#'){
|
||
this.__pd_TE.touchTriggerType = 4;
|
||
}else{
|
||
this.__pd_TE.touchTriggerType = 3;
|
||
}
|
||
this.__pd_TE.touchSwitchIndex = this.pd_TE_CheckSwitchIndex(param[1]);
|
||
}else{
|
||
this.__pd_TE.touchTriggerType = 3;
|
||
}
|
||
break;
|
||
case 'タグ':
|
||
case 'tag':
|
||
if(param.length > 1){
|
||
for(var j = 1, len2 = param.length; j < len2; j++){
|
||
this.__pd_TE.tag[j-1] = param[j];
|
||
}
|
||
}else{
|
||
throw new Error('TriggerExtension Plugin : タグに名前が設定されていません');
|
||
}
|
||
break;
|
||
case 'トリガー無効':
|
||
case 'triggerdisable':
|
||
this.__pd_TE.triggerDisable = true;
|
||
break;
|
||
case 'イベントに接触':
|
||
case 'toevent':
|
||
if(param.length > 1){
|
||
if(header === '#'){
|
||
this.__pd_TE.ETE_TriggerType = 2;
|
||
}else{
|
||
this.__pd_TE.ETE_TriggerType = 1;
|
||
}
|
||
this.__pd_TE.ETE_SwitchIndex = this.pd_TE_CheckSwitchIndex(param[1]);
|
||
if(param.length > 2){
|
||
for(var j = 2, len2 = param.length; j < len2; j++){
|
||
this.__pd_TE.ETE_Tag[j-2] = param[j];
|
||
}
|
||
}else{
|
||
this.__pd_TE.ETE_Tag[0] = '';
|
||
}
|
||
}else{
|
||
this.__pd_TE.ETE_Tag[0] = '';
|
||
}
|
||
break;
|
||
case 'イベントが接触':
|
||
case 'fromevent':
|
||
if(param.length > 1){
|
||
if(header === '#'){
|
||
this.__pd_TE.EFE_TriggerType = 2;
|
||
}else{
|
||
this.__pd_TE.EFE_TriggerType = 1;
|
||
}
|
||
this.__pd_TE.EFE_SwitchIndex = this.pd_TE_CheckSwitchIndex(param[1]);
|
||
$gameMap._pd_TE_EFE_Enable = true;
|
||
if(param.length > 2){
|
||
for(var j = 2, len2 = param.length; j < len2; j++){
|
||
this.__pd_TE.EFE_Tag[j-2] = param[j];
|
||
}
|
||
}else{
|
||
this.__pd_TE.EFE_Tag[0] = '';
|
||
}
|
||
}else{
|
||
this.__pd_TE.EFE_Tag[0] = '';
|
||
$gameMap._pd_TE_EFE_Enable = true;
|
||
}
|
||
break;
|
||
case 'リージョンに接触':
|
||
case 'toregion':
|
||
if(param.length > 1){
|
||
if(header === '#'){
|
||
this.__pd_TE.ETR_TriggerType = 2;
|
||
}else{
|
||
this.__pd_TE.ETR_TriggerType = 1;
|
||
}
|
||
this.__pd_TE.ETR_SwitchIndex = this.pd_TE_CheckSwitchIndex(param[1]);
|
||
if(param.length > 2){
|
||
for(var j = 2, len2 = param.length; j < len2; j++){
|
||
this.__pd_TE.ETR_Num[j-2] = param[j];
|
||
}
|
||
}else{
|
||
this.__pd_TE.ETR_Num[0] = '';
|
||
}
|
||
}else{
|
||
this.__pd_TE.ETR_Num[0] = '';
|
||
}
|
||
break;
|
||
case '除外':
|
||
case 'exception':
|
||
this.__pd_TE.EFE_exception = true;
|
||
break;
|
||
case '強制実行':
|
||
case 'forcerun':
|
||
this.__pd_TE.Touch_forceRun = true;
|
||
break;
|
||
}
|
||
}
|
||
index = index + 1;
|
||
}
|
||
};
|
||
Game_Event.prototype.pd_TE_CheckSwitchIndex = function(switchIndex) {
|
||
if(isNaN(switchIndex)){
|
||
if(switchIndex === ''){
|
||
return ['', ''];
|
||
}
|
||
else if(switchIndex.contains('=')){
|
||
switchIndex = switchIndex.split('=');
|
||
if(switchIndex.length > 2){
|
||
throw new Error('TriggerExtension Plugin : 「=」の数が多すぎます');
|
||
}else{
|
||
return switchIndex;
|
||
}
|
||
}
|
||
else if(switchIndex === 'a' || switchIndex === 'b' || switchIndex === 'c' || switchIndex === 'd'){
|
||
return ['SelfSwitch', switchIndex.toUpperCase()];
|
||
}else{
|
||
throw new Error('TriggerExtension Plugin : セルフスイッチに指定できる文字はA,B,C,Dだけです : ['+switchIndex.toUpperCase()+']');
|
||
}
|
||
}else{
|
||
return ['Switch', switchIndex];
|
||
}
|
||
};
|
||
var pd_TE_Game_Event_update = Game_Event.prototype.update;
|
||
Game_Event.prototype.update = function() {
|
||
pd_TE_Game_Event_update.call(this);
|
||
if (!$gameMap.isEventRunning()) {
|
||
if (this.pd_TE_CheckTouchEvent()) {
|
||
this.pd_TE_SetSwitchIndex(this.__pd_TE.touchSwitchIndex);
|
||
if (this.__pd_TE.touchTriggerType === 1 || this.__pd_TE.touchTriggerType === 3) {
|
||
this.start('pd_TE_enable');
|
||
this.unlock(false);
|
||
}
|
||
}
|
||
}
|
||
};
|
||
Game_Event.prototype.pd_TE_CheckTouchEvent = function() {
|
||
if(this.__pd_TE.touchTriggerType >= 3){
|
||
if (TouchInput.isTriggered()) {
|
||
if($gameTemp._pd_TE_realTouchMapX >= this._realX && $gameTemp._pd_TE_realTouchMapX < this._realX + 1 &&
|
||
$gameTemp._pd_TE_realTouchMapY >= this._realY && $gameTemp._pd_TE_realTouchMapY < this._realY + 1){
|
||
$gameTemp._pd_TE_touchTriggerTime = Date.now();
|
||
}
|
||
}else if(TouchInput.isReleased() && Date.now() - $gameTemp._pd_TE_touchTriggerTime <= 500){
|
||
if($gameTemp._pd_TE_realTouchMapX >= this._realX && $gameTemp._pd_TE_realTouchMapX < this._realX + 1 &&
|
||
$gameTemp._pd_TE_realTouchMapY >= this._realY && $gameTemp._pd_TE_realTouchMapY < this._realY + 1){
|
||
$gameTemp._pd_TE_touchTriggerTime = 0;
|
||
return true;
|
||
}
|
||
}
|
||
}
|
||
else if(this.__pd_TE.touchTriggerType >= 1){
|
||
if (TouchInput.isTriggered()) {
|
||
if($gameTemp._pd_TE_realTouchMapX >= this._realX && $gameTemp._pd_TE_realTouchMapX < this._realX + 1 &&
|
||
$gameTemp._pd_TE_realTouchMapY >= this._realY && $gameTemp._pd_TE_realTouchMapY < this._realY + 1){
|
||
return true;
|
||
}
|
||
}
|
||
}
|
||
return false;
|
||
};
|
||
var pd_TE_Game_Event_start = Game_Event.prototype.start;
|
||
Game_Event.prototype.start = function() {
|
||
if(this.__pd_TE.triggerDisable && arguments[0] != 'pd_TE_enable'){
|
||
return;
|
||
}
|
||
pd_TE_Game_Event_start.call(this);
|
||
};
|
||
var pd_TE_Game_Event_moveStraight = Game_Event.prototype.moveStraight;
|
||
Game_Event.prototype.moveStraight = function(d) {
|
||
var _pd_TE_x = $gameMap.roundXWithDirection(this._x, d);
|
||
var _pd_TE_y = $gameMap.roundYWithDirection(this._y, d);
|
||
pd_TE_Game_Event_moveStraight.call(this, d);
|
||
if(this.__pd_TE.ETE_Tag.length >= 1 ||
|
||
($gameMap._pd_TE_EFE_Enable === true && this.__pd_TE.EFE_exception === false)){
|
||
$gameMap.eventsXy(_pd_TE_x, _pd_TE_y).forEach(function(event) {
|
||
if(event != this){
|
||
if (this.__pd_TE.ETE_Tag.length >= 1 && (this.__pd_TE.ETE_Tag[0] === '' || this.pd_TE_CheckTag(this.__pd_TE.ETE_Tag, event.__pd_TE.tag))) {
|
||
this.pd_TE_EventTouchEvent_Start(this, this.__pd_TE.ETE_SwitchIndex, event, this.__pd_TE.ETE_TriggerType);
|
||
}
|
||
else if($gameMap._pd_TE_EFE_Enable === true && event.__pd_TE.EFE_Tag.length >= 1 && this.__pd_TE.EFE_exception === false && (event.__pd_TE.EFE_Tag[0] === '' || this.pd_TE_CheckTag(this.__pd_TE.tag, event.__pd_TE.EFE_Tag))){
|
||
this.pd_TE_EventTouchEvent_Start(event, event.__pd_TE.EFE_SwitchIndex, this, event.__pd_TE.EFE_TriggerType);
|
||
}
|
||
}
|
||
} , this);
|
||
}
|
||
if (this.__pd_TE.ETR_Num.length >= 1 && (!$gameMap.isEventRunning() || this.__pd_TE.Touch_forceRun === true) && this.pd_TE_CheckRegionId(this.__pd_TE.ETR_Num, _pd_TE_x, _pd_TE_y)) {
|
||
if (!this.isJumping()) {
|
||
this.pd_TE_SetSwitchIndex(this.__pd_TE.ETR_SwitchIndex);
|
||
if(this.__pd_TE.ETR_TriggerType === 1){
|
||
this.start('pd_TE_enable');
|
||
this.unlock(false);
|
||
}
|
||
}
|
||
}
|
||
};
|
||
Game_Event.prototype.pd_TE_CheckTag = function(tagList1, tagList2) {
|
||
for(var i = 0, len = tagList1.length; i < len; i++){
|
||
for(var j = 0, len2 = tagList2.length; j < len2; j++){
|
||
if(tagList1[i] === tagList2[j]) return true;
|
||
}
|
||
}
|
||
return false;
|
||
};
|
||
Game_Event.prototype.pd_TE_CheckRegionId = function(regionList, x, y) {
|
||
var reg = $gameMap.regionId(x, y);
|
||
if(regionList[0] === ''){
|
||
if(reg >= 1) return true;
|
||
}else{
|
||
for(var i = 0, len = regionList.length; i < len; i++){
|
||
if(regionList[i] == reg) return true;
|
||
}
|
||
}
|
||
return false;
|
||
};
|
||
Game_Event.prototype.pd_TE_EventTouchEvent_Start = function(obj, indexVar, touchEvent, triggerType) {
|
||
if (!$gameMap.isEventRunning() || obj.__pd_TE.Touch_forceRun === true) {
|
||
if (!obj.isJumping()) {
|
||
obj.__pd_TE.lastTouchedEvent = touchEvent;
|
||
obj.pd_TE_SetSwitchIndex(indexVar);
|
||
if(triggerType === 1){
|
||
obj.start('pd_TE_enable');
|
||
obj.unlock(false);
|
||
}
|
||
}
|
||
}
|
||
};
|
||
Game_Event.prototype.pd_TE_SetSwitchIndex = function(indexVar) {
|
||
if(indexVar[0] === ''){
|
||
}
|
||
else if(indexVar[0] === 'Switch'){
|
||
$gameSwitches.setValue(indexVar[1], true);
|
||
}
|
||
else if(indexVar[0] === 'SelfSwitch'){
|
||
$gameSelfSwitches.setValue([this._mapId, this.eventId(), indexVar[1]], true);
|
||
}
|
||
else if(indexVar[0].substr(0,1) === 'v'){
|
||
if(isNaN(indexVar[1])){
|
||
$gameVariables.setValue(parseInt(indexVar[0].substr(1)), indexVar[1]);
|
||
}else{
|
||
$gameVariables.setValue(parseInt(indexVar[0].substr(1)), parseInt(indexVar[1]));
|
||
}
|
||
}
|
||
else{
|
||
this.__pd_TE.Hash[indexVar[0]] = indexVar[1];
|
||
}
|
||
}
|
||
var pd_TE_Game_Temp_initialize = Game_Temp.prototype.initialize;
|
||
Game_Temp.prototype.initialize = function() {
|
||
pd_TE_Game_Temp_initialize.call(this);
|
||
this._pd_TE_realTouchMapX = null;
|
||
this._pd_TE_realTouchMapY = null;
|
||
this._pd_TE_touchTriggerTime = 0;
|
||
};
|
||
var pd_TE_Game_Map_initialize = Game_Map.prototype.initialize;
|
||
Game_Map.prototype.initialize = function() {
|
||
pd_TE_Game_Map_initialize.call(this);
|
||
this._pd_TE_EFE_Enable = false;
|
||
};
|
||
var pd_TE_Scene_Map_update = Scene_Map.prototype.update;
|
||
Scene_Map.prototype.update = function() {
|
||
if (TouchInput.isPressed()) {
|
||
$gameTemp._pd_TE_realTouchMapX = ($gameMap._displayX * $gameMap.tileWidth() + TouchInput.x) / $gameMap.tileWidth();
|
||
$gameTemp._pd_TE_realTouchMapY = ($gameMap._displayY * $gameMap.tileHeight() + TouchInput.y) / $gameMap.tileHeight();
|
||
}
|
||
pd_TE_Scene_Map_update.call(this);
|
||
if(TouchInput.isReleased()){
|
||
$gameTemp._pd_TE_realTouchMapX = null;
|
||
$gameTemp._pd_TE_realTouchMapY = null;
|
||
}
|
||
};
|
||
})();
|