824 lines
No EOL
20 KiB
JavaScript
824 lines
No EOL
20 KiB
JavaScript
//=============================================================================
|
||
// TRP_ParticleMZ_Group.js
|
||
//=============================================================================
|
||
/*:
|
||
* @target MZ
|
||
* @plugindesc グループ再生機能の有効化
|
||
* @author Thirop
|
||
* @base TRP_ParticleMZ
|
||
* @orderAfter TRP_ParticleMZ
|
||
*
|
||
* @help
|
||
* 【更新履歴】
|
||
* 1.25 2022/07/31 set直後にアップデートするように仕様変更
|
||
* 1.24 2022/06/24 displayObjectの内部登録が削除されない不具合修正
|
||
* 1.21 2022/05/02 制御文字が反映されない不具合の修正
|
||
* 1.19 2022/02/14 ロード時のエラー修正
|
||
* 1.13 2021/11/04 隠しコマンド(flash/shake/se)に対応
|
||
* 1.09 2021/07/19 設定名の「/h」を自動補完
|
||
* 座標調整が正しく反映されない不具合修正
|
||
* 1.05 2021/04/22 設定名に「_auto:~」使用可能に修正
|
||
* 1.00 2021/04/10 初版
|
||
*
|
||
*
|
||
* @command set
|
||
* @text set/表示
|
||
* @desc グループ再生開始
|
||
*
|
||
* @arg id
|
||
* @text 管理ID
|
||
* @desc 他と被らない管理ID。(末尾に-EIDをつけるとEIDがイベントIDに置き換わる。)
|
||
* @default def
|
||
*
|
||
* @arg target
|
||
* @text ターゲット
|
||
* @desc thisでこのイベント。「event:イベントID」「player」「weather」など
|
||
* @default this
|
||
*
|
||
* @arg name
|
||
* @text データ名
|
||
* @desc データ名。defとすると管理IDをデータ名として使用。(重み同じデータ名を複数表示するときは管理IDを分ける)
|
||
* @default def
|
||
*
|
||
* @arg tag
|
||
* @text 管理タグ
|
||
* @desc 管理用のタグ名。省略で「group:グループ管理ID」
|
||
*
|
||
* @arg edit
|
||
* @text Editモード
|
||
* @desc ONにするとエディタを呼び出し(テストプレイ時のみ有効)
|
||
* @default false
|
||
* @type boolean
|
||
*
|
||
* @arg delay
|
||
* @text _ディレイ
|
||
* @desc 1以上とすると、指定フレーム後にコマンドを実効
|
||
* @default 0
|
||
* @type number
|
||
* @min 0
|
||
*
|
||
*
|
||
* @command clear
|
||
* @text clear/クリア
|
||
* @desc グループの再生停止。(setコマンドで再生中のパーティクルを消すにはparticle clear tag:group:グループ管理ID)
|
||
*
|
||
* @arg id
|
||
* @text 対象グループ管理ID
|
||
* @desc 対象グループ管理ID
|
||
*
|
||
* @arg quit
|
||
* @text 中断
|
||
* @desc on/trueとすると再生完了を待たずに中断
|
||
* @type boolean
|
||
* @default false
|
||
*
|
||
* @arg delay
|
||
* @text _ディレイ
|
||
* @desc 1以上とすると、指定フレーム後にコマンドを実効
|
||
* @default 0
|
||
* @type number
|
||
* @min 0
|
||
*/
|
||
//=============================================================================
|
||
//PRAGMA_END: groupHeader
|
||
//PRAGMA: englishHeader
|
||
//PRAGMA_END: englishHeader
|
||
|
||
var $dataTrpParticleGroupsPreset = $dataTrpParticleGroupsPreset||null;
|
||
var $dataTrpParticleGroups = null;
|
||
|
||
|
||
//PRAGMA: defParticleGroup
|
||
function ParticleGroup(){
|
||
this.initialize.apply(this, arguments);
|
||
}
|
||
//PRAGMA_END: defParticleGroup
|
||
|
||
(function(){
|
||
'use strict';
|
||
//PRAGMA: groupPluginSetting
|
||
var pluginName = 'TRP_ParticleMZ_Group';
|
||
Game_Particle.GROUP_DATA_FIILE_PATH = '../dataEx/TrpParticleGroups.json';
|
||
var baseParameters = PluginManager.parameters('TRP_ParticleMZ');
|
||
//PRAGMA_END: groupPluginSetting
|
||
|
||
var LC = TRP_Localize.localize.bind(TRP_Localize,'parGr');
|
||
var NLC = TRP_Localize.noLocalize;
|
||
|
||
var errorLog = baseParameters.errorLog === 'true';
|
||
|
||
DataManager._databaseFiles.push({
|
||
name:'$dataTrpParticleGroups',
|
||
src:Game_Particle.GROUP_DATA_FIILE_PATH,
|
||
});
|
||
|
||
var _DataManager_loadDataFile = DataManager.loadDataFile;
|
||
DataManager.loadDataFile = function(name, src) {
|
||
if(src.contains('Test_')&&src.contains('TrpParticleGroups')){
|
||
src = Game_Particle.GROUP_DATA_FIILE_PATH;
|
||
}
|
||
_DataManager_loadDataFile.call(this,name,src);
|
||
};
|
||
|
||
function supplement(defaultValue,optionArg){
|
||
if(optionArg === undefined){
|
||
return defaultValue;
|
||
}
|
||
return optionArg;
|
||
};
|
||
function supplementNum(defaultValue,optionArg){
|
||
return Number(supplement(defaultValue,optionArg));
|
||
};
|
||
|
||
var _supplementDefWords = ['default','def','d'];
|
||
function supplementDef(defaultValue, optionArg, otherWords) {
|
||
var value = supplement(defaultValue,optionArg);
|
||
|
||
var defTargetWords = otherWords || [];
|
||
if(defTargetWords){
|
||
defTargetWords = defTargetWords.concat(_supplementDefWords);
|
||
}else{
|
||
defTargetWords = _supplementDefWords;
|
||
}
|
||
|
||
var length = defTargetWords.length;
|
||
for(var i=0; i<length; i=(i+1)|0){
|
||
var target = defTargetWords[i];
|
||
if(value === target){
|
||
value = defaultValue;
|
||
break;
|
||
}
|
||
}
|
||
return value;
|
||
};
|
||
function supplementDefNum(defaultValue, optionArg, otherWords) {
|
||
var value = supplementDef(defaultValue,optionArg,otherWords);
|
||
return Number(value);
|
||
};
|
||
|
||
|
||
//PRAGMA: groupCommandRegister
|
||
//=============================================================================
|
||
// Plugin Command
|
||
//=============================================================================
|
||
(()=>{
|
||
const commands = ['set','clear'];
|
||
for(const command of commands){
|
||
PluginManager.registerCommand(pluginName, command, function(args){
|
||
//this > interpreter
|
||
var argsArr = Object.values(args)
|
||
var delay = Number(argsArr.pop())||0;
|
||
|
||
var pCommand = command;
|
||
if(command==='set'){
|
||
var editFlag = argsArr.pop()==='true';
|
||
if(editFlag){
|
||
pCommand = 'edit';
|
||
}
|
||
var tag = argsArr.pop();
|
||
if(tag){
|
||
if(!tag.contains('tag:')){
|
||
tag = 'tag:'+tag;
|
||
}
|
||
argsArr.push(tag);
|
||
}
|
||
}
|
||
|
||
argsArr.unshift(pCommand);
|
||
argsArr.unshift('group');
|
||
|
||
var eventId = this.eventId();
|
||
if(delay>0){
|
||
$gameScreen._particle.reservePluginCommand(delay,this,argsArr,eventId);
|
||
}else{
|
||
$gameScreen._particle.pluginCommand(this,argsArr,eventId);
|
||
}
|
||
});
|
||
}
|
||
|
||
|
||
/* TRP_ParticleList
|
||
===================================*/
|
||
function _listCommand(command,args){
|
||
//this > interpreter
|
||
var id;
|
||
if(!args.id||args.id==='def'||args.id==='d'){
|
||
args.id = args.name;
|
||
}
|
||
if(id==='-EID'){
|
||
id = args.name+'-EID';
|
||
}else{
|
||
id = supplementDef(args.name,args.id);
|
||
}
|
||
|
||
var command = args.edit==='true' ? 'edit' : 'set';
|
||
var delay = Number(args.delay)||0;
|
||
var argsArr = ['group',command,id,args.target,args.name];
|
||
if(args.tag){
|
||
argsArr.push('tag:'+args.tag);
|
||
}
|
||
var eventId = this.eventId();
|
||
|
||
if(delay>0){
|
||
$gameScreen._particle.reservePluginCommand(delay,this,argsArr,eventId);
|
||
}else{
|
||
$gameScreen._particle.pluginCommand(this,argsArr,eventId);
|
||
}
|
||
}
|
||
|
||
var categoryNames = Game_Particle.CATEGORY_NAMES;
|
||
var categoryLength = categoryNames.length;
|
||
var listPlugin = 'TRP_ParticleMZ_List';
|
||
var presetPlugin = 'TRP_ParticleMZ_Preset';
|
||
for(var j=0; j<categoryLength; j=(j+1)|0){
|
||
var category = categoryNames[j];
|
||
var command = 'group_'+category;
|
||
PluginManager.registerCommand(listPlugin, command, function(args){
|
||
_listCommand.call(this,command,args);
|
||
});
|
||
PluginManager.registerCommand(presetPlugin, command, function(args){
|
||
_listCommand.call(this,command,args);
|
||
});
|
||
}
|
||
})();
|
||
//PRAGMA_END: groupCommandRegister
|
||
|
||
|
||
|
||
//=============================================================================
|
||
// Game_Particle
|
||
//=============================================================================
|
||
Game_Particle.groupData = function(data){
|
||
return this.groupDataWithName(data.name);
|
||
};
|
||
Game_Particle.groupDataWithName = function(name){
|
||
var config = $dataTrpParticleGroups[name];
|
||
if(config){
|
||
return config;
|
||
}
|
||
|
||
config = $dataTrpParticleGroupsPreset[name];
|
||
if(config){
|
||
return config;
|
||
}
|
||
|
||
if(name.indexOf('/h')!==name.length-2){
|
||
return this.groupDataWithName(name+'/h');
|
||
}
|
||
|
||
return null;
|
||
};
|
||
|
||
var _Game_Particle_initialize = Game_Particle.prototype.initialize;
|
||
Game_Particle.prototype.initialize = function() {
|
||
_Game_Particle_initialize.call(this);
|
||
this._groups = {};
|
||
this._groupKeys = [];
|
||
};
|
||
|
||
var _Game_Particle_pluginCommand= Game_Particle.prototype.pluginCommand;
|
||
Game_Particle.prototype.pluginCommand = function(interpreter,args,eventId){
|
||
var sub = args[0].toLowerCase();
|
||
if(sub === 'group'){
|
||
this.processGroupCommand(interpreter,args,eventId);
|
||
}else{
|
||
_Game_Particle_pluginCommand.call(this,interpreter,args,eventId);
|
||
}
|
||
};
|
||
|
||
Game_Particle.prototype.processGroupCommand = function(interpreter,args,eventId){
|
||
this.convertEscapeCharacters(args);
|
||
|
||
var main = args.shift();
|
||
var sub = args.shift().toLowerCase();
|
||
|
||
//process eid
|
||
if(!isNaN(eventId)){
|
||
this.processArgsEventId(args,eventId);
|
||
}
|
||
|
||
|
||
var tag;
|
||
if(sub==='set'||sub==='play'||sub==='edit'){
|
||
tag = this.extractTagRegister(args);
|
||
args.splice(-1+Game_Particle.GROUP_COMMAND_ARGS_INDEX_TAG,0,tag);
|
||
|
||
var targetId = '';
|
||
if(sub==='set'||sub==='play'){
|
||
args.unshift(eventId);
|
||
var group = Game_Particle.prototype.particleGroupSet.apply(this,args);
|
||
if(group){
|
||
var suffix = this._suffix;
|
||
this._suffix = '';
|
||
group.update(this);
|
||
this._suffix = suffix;
|
||
}
|
||
|
||
targetId = args[1];
|
||
}else if(sub==='edit'){
|
||
|
||
args.unshift(eventId);
|
||
if(Game_Particle.prototype.particleGroupEdit.apply(this,args) && interpreter){
|
||
interpreter.wait(1);
|
||
}
|
||
targetId = args[2];
|
||
}
|
||
}else if(sub==='clear'){
|
||
Game_Particle.prototype.particleGroupClear.apply(this,args);
|
||
}
|
||
};
|
||
|
||
Game_Particle.GROUP_COMMAND_ARGS_INDEX_TAG = 3;
|
||
Game_Particle.prototype.particleGroupEdit = function(){};
|
||
Game_Particle.prototype.particleGroupSet = function(eventId,id,target,tag,name,x,y){
|
||
name = supplementDef(id,name)||id;
|
||
id = this.idWithSuffix(id);
|
||
|
||
if(!!this._groups[id]){
|
||
return;
|
||
}
|
||
|
||
x = Number(x)||0;
|
||
y = Number(y)||0;
|
||
|
||
if(!Game_Particle.groupDataWithName(name)){
|
||
if(errorLog){
|
||
throw new Error(LC('設定名:%1のグループ設定データが存在しません。',0).format(name));
|
||
}
|
||
return;
|
||
}
|
||
if(errorLog && target===undefined){
|
||
throw new Error(LC('パーティクル表示コマンドの対象が設定されてません。',2)+'(ID:'+id+')');
|
||
}
|
||
|
||
//make data
|
||
var group = new ParticleGroup(eventId,id,target,tag,name,x,y);
|
||
|
||
this._groups[id] = group;
|
||
this._groupKeys.push(id);
|
||
return group;
|
||
};
|
||
|
||
Game_Particle.prototype.particleGroupClear = function(id,quit){
|
||
if(quit==='false'||quit==='f'){
|
||
quit = false;
|
||
}else if(quit==='true'||quit==='t'){
|
||
quit = true;
|
||
}else{
|
||
quit = supplementDef(false,quit);
|
||
}
|
||
|
||
var data = this._groups[id];
|
||
if(data){
|
||
data.repeat = -1;
|
||
if(quit){
|
||
this.deleteGroup(id);
|
||
}
|
||
}
|
||
};
|
||
|
||
Game_Particle.prototype.deleteGroup = function(id){
|
||
var index = this._groupKeys.indexOf(id);
|
||
if(index>=0){
|
||
this._groupKeys.splice(index,1);
|
||
}
|
||
delete this._groups[id];
|
||
delete Game_Particle.displayObjects[id];
|
||
};
|
||
|
||
|
||
var _Game_Particle_update = Game_Particle.prototype.update;
|
||
Game_Particle.prototype.update = function(){
|
||
_Game_Particle_update.call(this);
|
||
|
||
var keys = this._groupKeys;
|
||
var length = keys.length;
|
||
var destroyed = false;
|
||
for(var i = length-1; i>=0; i=(i-1)|0){
|
||
var key = keys[i];
|
||
var group = this._groups[key];
|
||
if(group && !group.destroy){
|
||
group.update(this);
|
||
}
|
||
|
||
if(!group || group.destroy){
|
||
this.deleteGroup(key);
|
||
}
|
||
}
|
||
};
|
||
|
||
/* auto remove
|
||
===================================*/
|
||
var _Game_Particle_removeCharacterTargetParticles = Game_Particle.prototype.removeCharacterTargetParticles;
|
||
Game_Particle.prototype.removeCharacterTargetParticles = function(){
|
||
this._removeCharacterTargetParticles(this._groupKeys,this._groups);
|
||
|
||
_Game_Particle_removeCharacterTargetParticles.call(this);
|
||
};
|
||
var _Game_Particle_removePartyTargetParticles = Game_Particle.prototype.removePartyTargetParticles;
|
||
Game_Particle.prototype.removePartyTargetParticles = function(){
|
||
this._removePartyTargetParticles(this._groupKeys,this._groups);
|
||
|
||
_Game_Particle_removePartyTargetParticles.call(this);
|
||
};
|
||
|
||
var _Game_Particle_removeParticlesWithTargetTypes = Game_Particle.prototype.removeParticlesWithTargetTypes;
|
||
Game_Particle.prototype.removeParticlesWithTargetTypes = function(types){
|
||
this._removeParticlesWithTargetTypes(types,this._groupKeys,this._groups);
|
||
|
||
_Game_Particle_removeParticlesWithTargetTypes.call(this,types);
|
||
};
|
||
|
||
var _Game_Particle_clearTargetsParticles = Game_Particle.prototype.clearTargetsParticles;
|
||
Game_Particle.prototype.clearTargetsParticles = function(targetTypes,targetId,keys,allData){
|
||
_Game_Particle_clearTargetsParticles.call(this,targetTypes,targetId,this._groupKeys,this._groups);
|
||
_Game_Particle_clearTargetsParticles.call(this,targetTypes,targetId,keys,allData);
|
||
};
|
||
|
||
|
||
//=============================================================================
|
||
// ParticleGroup
|
||
//=============================================================================
|
||
Game_Particle.ParticleGroup = ParticleGroup;
|
||
|
||
ParticleGroup.prototype.initialize = function(eventId,id,target,tag,name,x,y){
|
||
var particleData = $gameScreen._particle.particleData(eventId,id,target,name,undefined,undefined,undefined,undefined,true);
|
||
|
||
this.id = id;
|
||
this.eventId = eventId;
|
||
this.target = target;
|
||
this.targetType = particleData.targetType;
|
||
this.targetId = particleData.targetId;
|
||
this.name = name;
|
||
this.replacedName = name.replace('/h','');
|
||
this.tag = tag||('group:'+id);
|
||
this.x = x;
|
||
this.y = y;
|
||
|
||
this.params = {};
|
||
|
||
this._stop = false;
|
||
this._clear = false;
|
||
this.quit = false;
|
||
this.interval = 0;
|
||
|
||
this.exceed = null;
|
||
|
||
this.list = null;
|
||
this.repeat = 0;
|
||
|
||
this.destroy = false;
|
||
|
||
this._index = -1;
|
||
this._wait = 0;
|
||
|
||
|
||
|
||
this.applyData();
|
||
};
|
||
ParticleGroup.prototype.applyData = function(){
|
||
var data = this.data();
|
||
this.repeat = data.repeat;
|
||
|
||
if(data.list.length === 0){
|
||
data.list = [''];
|
||
}
|
||
this.list = data.list;
|
||
}
|
||
ParticleGroup.prototype.data = function(){
|
||
return Game_Particle.groupData(this);
|
||
};
|
||
ParticleGroup.idSuffix = function(id){
|
||
return '/GROUP:'+id
|
||
};
|
||
|
||
Object.defineProperty(ParticleGroup.prototype, 'clear', {
|
||
get: function() {
|
||
return this._clear
|
||
},set: function(value){
|
||
this._clear = value;
|
||
if(value){
|
||
this.repeat = -1;
|
||
if(this.stop){
|
||
this.processQuit();
|
||
}
|
||
}
|
||
},
|
||
configurable: true
|
||
});
|
||
Object.defineProperty(ParticleGroup.prototype, 'stop', {
|
||
get: function() {
|
||
return this._stop
|
||
},set: function(value){
|
||
this._stop = value;
|
||
if(value){
|
||
if(this.clear){
|
||
this.processQuit();
|
||
}
|
||
}
|
||
},
|
||
configurable: true
|
||
});
|
||
ParticleGroup.prototype.processQuit = function(particle=$gameScreen._particle){
|
||
particle.deleteGroup(this.id);
|
||
};
|
||
|
||
|
||
function activeInterpreter(){
|
||
var interpreter;
|
||
if($gameTroop.inBattle() && $gameTroop.isEventRunning()){
|
||
interpreter = $gameTroop._interpreter;
|
||
}else if($gameMap.isEventRunning()){
|
||
interpreter = $gameMap._interpreter;
|
||
}else{
|
||
return null;
|
||
}
|
||
|
||
while(interpreter._childInterpreter){
|
||
interpreter = interpreter._childInterpreter;
|
||
}
|
||
return interpreter;
|
||
};
|
||
|
||
ParticleGroup.processParticleSubCommand = function(args){
|
||
if(baseParameters.commandNames.contains(args[0])){
|
||
args.shift();
|
||
}
|
||
return args[0];
|
||
}
|
||
|
||
ParticleGroup.prototype.update = function(particle=$gameScreen._particle){
|
||
if(this._wait>0){
|
||
this._wait -= 1;
|
||
return;
|
||
}
|
||
|
||
var list = this.data().list;
|
||
var length = list.length;
|
||
|
||
var suffix = ParticleGroup.idSuffix(this.id);
|
||
$gameScreen._particle.addAutoIdSuffix(suffix);
|
||
|
||
var interpreter = activeInterpreter();
|
||
while(this._index<length-1 && this._wait<=0){
|
||
this._index = (this._index+1)|0
|
||
|
||
var command = list[this._index];
|
||
|
||
var args = command.split(' ');
|
||
var isPlayCommands = false;
|
||
|
||
ParticleGroup.processParticleSubCommand(args);
|
||
|
||
if(!this.isCommandValid(command,this.id,this.replacedName,args)){
|
||
break;
|
||
}
|
||
|
||
switch(args[0].toLowerCase()){
|
||
case 'wait':
|
||
this._wait = Number(args[1]);
|
||
break;
|
||
|
||
|
||
case 'edit':
|
||
case 'set':
|
||
case 'play':
|
||
isPlayCommands = true;
|
||
var tag = particle.extractTagRegister(args);
|
||
tag = tag || this.tag;
|
||
|
||
if(tag){
|
||
if(!tag.contains('tag:')){
|
||
tag = 'tag:'+tag;
|
||
}
|
||
args.push(tag);
|
||
}
|
||
if(args[2]==='target'){
|
||
if(this.target==='displayObject'){
|
||
args[2] = Game_Particle.displayObjects[this.id];
|
||
}else{
|
||
args[2] = this.target;
|
||
}
|
||
}
|
||
if(/^_auto:[0-9]+$/.test(args[1])){
|
||
args[1] += ':'+this.replacedName+'/h';
|
||
}
|
||
if(args[3] && /^_auto:[0-9]+$/.test(args[3])){
|
||
args[3] += ':'+this.replacedName+'/h';
|
||
}
|
||
|
||
break;
|
||
case 'repeat':
|
||
case 'on':
|
||
case 'off':
|
||
case 'clear':
|
||
case 'update':
|
||
case 'animate':
|
||
case 'move':
|
||
case 'exceed':
|
||
case 'screenLoop':
|
||
case 'loop':
|
||
case 'filter':
|
||
case 'attract':
|
||
case 'max':
|
||
if(/^_auto:[0-9]+$/.test(args[1])){
|
||
args[1] += ':'+this.replacedName+'/h';
|
||
}
|
||
|
||
if(args[0]==='attract'&& args[2]==='target'){
|
||
if(this.target==='displayObject'){
|
||
args[2] = Game_Particle.displayObjects[this.id];
|
||
}else{
|
||
args[2] = this.target;
|
||
}
|
||
}
|
||
break;
|
||
|
||
case 'sub':
|
||
if(/_auto:[0-9]+$/.test(args[2])){
|
||
args[2] += ':'+this.replacedName+'/h';
|
||
}
|
||
if(/_sub:[0-9]+$/.test(args[3])){
|
||
args[3] += ':'+this.replacedName+'/h';
|
||
}
|
||
break;
|
||
}
|
||
if(this._wait>0){
|
||
break;
|
||
}
|
||
|
||
particle.pluginCommand(interpreter,args,this.eventId);
|
||
if(isPlayCommands){
|
||
if(this.x || this.y){
|
||
particle.particleUpdate([args[1],'pos',this.x||0,this.y||0]);
|
||
}
|
||
}
|
||
}
|
||
|
||
$gameScreen._particle.removeAutoIdSuffix(suffix);
|
||
|
||
if(this._wait<=0 && this._index >= length-1){
|
||
if(this.repeat>=0){
|
||
this._wait = this.repeat;
|
||
this._index = -1;
|
||
}else{
|
||
this.destroy = true;
|
||
}
|
||
}
|
||
};
|
||
|
||
|
||
//=============================================================================
|
||
// command validation
|
||
//=============================================================================
|
||
ParticleGroup.prototype.isCommandValid = function(command,id,name,args){
|
||
return ParticleGroup.isCommandValid(command,id,name,args);
|
||
};
|
||
ParticleGroup.isCommandValid = function(command,id,groupName,args=null){
|
||
if(!command)return false;
|
||
|
||
args = args || command.split(' ');
|
||
var sub = ParticleGroup.processParticleSubCommand(args);
|
||
if(!sub){
|
||
return false;
|
||
}
|
||
|
||
sub = sub.toLowerCase();
|
||
|
||
//check sub commands
|
||
switch(sub){
|
||
case 'wait':
|
||
return !isNaN(args[1]) && Number(args[1])>=0
|
||
case 'set':
|
||
case 'play':
|
||
case 'edit':
|
||
return this._isPlayCommandValid(id,groupName,sub,args);
|
||
|
||
case 'repeat':
|
||
case 'on':
|
||
case 'off':
|
||
case 'clear':
|
||
case 'update':
|
||
case 'animate':
|
||
case 'move':
|
||
case 'exceed':
|
||
case 'screenLoop':
|
||
case 'loop':
|
||
case 'filter':
|
||
case 'attract':
|
||
case 'max':
|
||
if(!this.isCommandTargetIdValid(id,groupName,args[1])){
|
||
return false;
|
||
}
|
||
break;
|
||
case 'sub':
|
||
if(/_auto:[0-9]+$/.test(args[2])){
|
||
args[2] += ':'+groupName+'/h';
|
||
}
|
||
if(args[1]!=='edit'){
|
||
var name = args[3];
|
||
if(/^_sub:[0-9]+$/.test(name)){
|
||
name += ':'+groupName+'/h';
|
||
}
|
||
if(!$dataTrpParticles[name] && !$dataTrpParticlePreset[name]){
|
||
return false;
|
||
}
|
||
}
|
||
if(!this.isCommandTargetIdValid(id,groupName,args[2])){
|
||
return false;
|
||
}
|
||
break;
|
||
|
||
|
||
case 'flash':
|
||
case 'shake':
|
||
case 'se':
|
||
return true;
|
||
|
||
case 'group':
|
||
return false;
|
||
default:
|
||
return false;
|
||
}
|
||
|
||
return true;
|
||
};
|
||
|
||
ParticleGroup.isCommandTargetIdValid = function(groupId,groupName,id){
|
||
if(id===undefined){
|
||
return false;
|
||
}
|
||
if(id==='' || id===' '){
|
||
return false;
|
||
}
|
||
if(/_auto:[0-9]+$/.test(id)){
|
||
id += ':'+groupName+'/h';
|
||
}
|
||
|
||
if(!id.contains('/GROUP:')
|
||
&& id!=='all'
|
||
&& id.indexOf('all:')!==0
|
||
&& id.indexOf('tag:')!==0)
|
||
{
|
||
id += ParticleGroup.idSuffix(groupId);
|
||
if(!$gameScreen._particle._data[id]){
|
||
return false;
|
||
}
|
||
}
|
||
|
||
return true;
|
||
};
|
||
ParticleGroup._isPlayCommandValid = function(groupId,groupName,command,args){
|
||
if(args.length<=2 || args[2]===''||args[2]===' '){
|
||
return false;
|
||
}
|
||
|
||
//remove tag arg
|
||
var length = args.length;
|
||
for(var i=0; i<length; i=(i+1)|0){
|
||
var arg = args[i];
|
||
if(arg.indexOf('tag:')===0){
|
||
args = args.concat();
|
||
args.splice(i,1);
|
||
break;
|
||
}
|
||
}
|
||
|
||
var id = args[1];
|
||
var target = args[2];
|
||
var name = args[3];
|
||
|
||
if(/^_auto:[0-9]+$/.test(id)){
|
||
id += ':'+groupName+'/h';
|
||
}
|
||
if(/^_auto:[0-9]+$/.test(name)){
|
||
name += ':'+groupName+'/h';
|
||
}
|
||
|
||
name = supplementDef(id,name)||id;
|
||
|
||
// var eventId = this._data.eventId;
|
||
// var data = $gameScreen._particle.particleData(eventId,id,target,name)
|
||
// if(!data)return false;
|
||
|
||
|
||
//check id
|
||
if(id==='' || id===' '){
|
||
return false;
|
||
}
|
||
|
||
|
||
//check name exists
|
||
if(command!=='edit'){
|
||
if(!$dataTrpParticles[name] && !$dataTrpParticlePreset[name]){
|
||
return false;
|
||
}
|
||
}
|
||
|
||
return true;
|
||
};
|
||
|
||
|
||
|
||
|
||
})(); |