/*: * @author Thirop * @plugindesc * * @param showGuide * @text 項目ヘルプの表示 * @desc ON/trueにすると編集中の項目の説明が左下に表示されます。 * @type Boolean * @default true * * @param paramFontSize * @text 項目フォントサイズ * @desc 画面右に表示される項目のフォントサイズ。見切れる場合には小さくしてください。(デフォ値18) * @type number * @default 18 * * @param noColorCode * @text 色コード非表示 * @desc colorパラメータのコード(#ffffffなど)の非表示設定。横幅が見切れる場合はON(非表示)推奨 * @type Boolean * @default false * * @param buttonFontSize * @text ボタンフォントサイズ * @desc 画面右下に表示されるボタンのフォントサイズ。見切れる場合には小さくしてください。(デフォ値13) * @type number * @default 13 * * @param buttonWidth * @text ボタンの横幅 * @desc 画面右下に表示されるボタンの横幅。見切れる場合には小さくしてください。(デフォ値120) * @type number * @default 86 * * @param saveAsArray * @text 配列圧縮して保存 * @desc 配列圧縮して保存することでファイル容量を削減します。 * @type boolean * @default false * * @param copyAsArray * @text 配列圧縮してコピー * @desc 配列圧縮してコピーすることでテキスト量を削減します。 * @type boolean * @default true * * * 【更新履歴】 * 1.10 2020/5/19 Windowsでのキー対応修正 * 1.07 2020/5/7 微細な内部処理変更 * 1.06 2020/5/7 attach対象でキャラがいない場合の不具合修正 * 1.05 2020/5/6 アニメーションピッカー追加。angleType→angleに変更他 * 1.04 2020/4/15 配列圧縮で保存時に発生方法が保存されない不具合修正 * 1.00 2020/4/11 初版。 * */ if (Utils.isNwjs() && Utils.isOptionValid('test')){ function ParticleEditor(){ this.initialize.apply(this, arguments); } ParticleEditor.FILE_PATH = 'data/TrpParticles.json'; ParticleEditor.HELP_PATH = 'js/plugins/TRP_ParticleList.js'; ParticleEditor.IMAGE_PATH = 'img/particles/'; ParticleEditor.ANIMATION_PATH = 'img/animations/'; }; (function(){ "use strict"; if (!Utils.isNwjs() || !Utils.isOptionValid('test')){ return; } var fs = require('fs'); var path = require('path'); var base = path.dirname(process.mainModule.filename); var filePath = path.join(base, ParticleEditor.FILE_PATH); if(!fs.existsSync(filePath)){ var file = '{}'; fs.writeFileSync(filePath,file); } })(); (function(){ "use strict"; if (!Utils.isNwjs() || !Utils.isOptionValid('test')){ return; }; var parameters = PluginManager.parameters('JsScript73Set'); parameters.imageNames = null; parameters.animationNames = null; var showGuide = parameters.showGuide==='true'; var paramFontSize = Number(parameters.paramFontSize)||18; var noColorCode = parameters.noColorCode==='true'; var saveAsArray = parameters.saveAsArray==='true'; var copyAsArray = parameters.copyAsArray==='true'; var noLineBreaks = saveAsArray; var isMac = navigator.userAgent.match(/Macintosh|Mac/); var displayCount = PluginManager.parameters('JsScript72Set').displayCount==='true'; ParticleEditor.DEFAULT_DATA = { "alpha": { "list":[{ time:0, value:0 },{ time:0.5, value:1 },{ time:1, value:0 }] }, "scale": { "list":[{ time:0, value:0 },{ time:0.5, value:1 },{ time:1, value:0 }], "minimumScaleMultiplier": 0.5 }, "speed": { "list":[{ time:0, value:300 },{ time:1, value:100 }], "minimumSpeedMultiplier": 1 }, "color": { "list":[{ time:0, value:"#ffffff" },{ time:1, value:"#ffffff" }] }, "colorMode":0, "acceleration": { "x": 0, "y": 0 }, "maxSpeed": NaN, "startRotation": { "min": 0, "max": 360 }, "noRotation": false, "rotationSpeed": { "min": 0, "max": 0 }, "angle":0, "mirrorType":0, "lifetime": { "min": 1, "max": 1 }, "blendMode": "add", "frequency": 0.01, "spawnChance": 1, "particlesPerWave":1, "emitterLifetime": -1, "maxParticles": 10000, "fluctuation":{ "max":0, "sensitivity":0 }, "spawnType":"point", "pos": { "x": 0, "y": 0 }, "spawnRect":null, "spawnCircle":null, "particleSpacing":0, "angleStart":0, "addAtBack": false, "noRotation": false, "image":null, "targetType":0, "comment":"" }; (function(){ ParticleEditor.GUIDE_TEXTS = { alpha:['【アルファ/不透明度】','値の範囲:0~1',null,'<中間値設定可能>','左端が開始時(時間0)、右端が終了時(時間1)の値','@時間(0~1) + Enterで中間値を設定可能','delete(Macはfn+delete)で中間値の削除','中間値編集中にshift+@時間(0~1)+Enterで時間変更','例)@0.5 + Enterで中間地点での値を設定開始'], scale:['【スケール/拡大率】','1で等倍',null,'<中間値設定可能>','左端が開始時(時間0)、右端が終了時(時間1)の値','@時間(0~1) + Enterで中間値を設定可能','delete(Macはfn+delete)で中間値の削除','中間値編集中にshift+@時間(0~1)+Enterで時間変更','例)@0.5 + Enterで中間地点での値を設定開始'], minimumScaleMultiplier:['【最小スケール倍率】','パーティクル生成時の最小スケール倍率','例)0.1として開始時のスケールが0.5の場合は','  0.5*0.1=0.05から0.5の間の','  ランダムなスケールのパーティクルが発生。'], speed:['【スピード/速度】','パーティクルの速度。開始値は0にしないこと。',null,'<中間値設定可能>','左端が開始時(時間0)、右端が終了時(時間1)の値','@時間(0~1) + Enterで中間値を設定可能','delete(Macはfn+delete)で中間値の削除','中間値編集中にshift+@時間(0~1)+Enterで時間変更','例)@0.5 + Enterで中間地点での値を設定開始'], minimumSpeedMultiplier:['【最小スピード倍率】','パーティクル生成時の最小スピード倍率','例)0.1として開始時のスピードが0.5の場合は','  0.5*0.1=0.05から0.5の間の','  ランダムなスピードのパーティクルが発生。'], color:['【カラー/色】','左上のカラーピッカーで設定可能','バックスペース(Macはdelete)で白にリセット',null,'<中間値設定可能>','左端が開始時(時間0)、右端が終了時(時間1)の値','@時間(0~1) + Enterで中間値を設定可能','delete(Macはfn+delete)で中間値の削除','中間値編集中にshift+@時間(0~1)+Enterで時間変更','例)@0.5 + Enterで中間地点での値を設定開始'], colorMode:['【カラーモード】','0で時間によって色が変化。','0以外で発生時の色の分布を変化(時間変化無し)'], acceleration:['【加速度】','加速度が有効な場合は画像の向きは移動方向で固定'], startRotation:['【発生時の射出角度】','パーティクルの飛び出す方向。(画像の向きも連動)','0で右,90で下,180で左,270(-90)で上方向。'], rotationSpeed:['【画像回転速度】','画像の回転速度の最小値と最大値。','動きには影響なし。'], imageOption:['【画像表示設定】','画像の向き/反転の設定。動きには影響なし。','angle:0~360で画像のみ回転、-1でランダムな角度。','mirror:0で調整なし,1で反転,2でランダム。'], lifetime:['【パーティクル寿命】','個々のパーティクルの消えるまでの秒数'], blendMode:[], frequency:['【フリクエンシー/発生間隔】','パーティクルが発生する間隔','0.01とすると0.01秒に1回発生し、1秒間に100回'], spawnChance:['【発生確率】','各発生タイミングに、パーティクルが発生する確率。'], particlesPerWave:['【1回での発生個数】','各発生タイミングに同時に発生する個数。','同時に発生するパーティクルのlifetimeは固定'], emitterLifetime:['【エミッター寿命】','-1で無限。0より大きくすると、指定時間で発生終了'], maxParticles:['【最大表示数の制限】','このエミッターから発生する最大数の制限値'], fluctuation:['【フラクチュエーション/ゆらぎ】','角度のゆらぎ設定。','max:各フレームで角度の変化幅の最大値','sensitivity:0~1で指定。小さいほどゆるやかに、大きいほど激しくゆらぐ。'], pos:['【ポイント(発生方法)】','指定の点から発生。','<※発生方法はいずれか1つのみ指定が有効>'], rect:['【レクト/四角(発生方法)】','四角形の中からランダムに発生。','左上の点をx,y、幅/高さをwidth,heightで指定','<※発生方法はいずれか1つのみ指定が有効>'], circle:['【サークル/円(発生方法)】','円の中からからランダムに発生','中心点をx,y、半径をradiusで指定。','<※発生方法はいずれか1つのみ指定が有効>'], ring:['【リング(発生方法)】','ドーナツ状のリングからランダムに発生。','中心点をx,y、外側の半径をradius','内側の半径をminRで指定。','<※発生方法はいずれか1つのみ指定が有効>'], burst:['【バースト(発生方法)】','particlesPerWaveで複数発生させる際に','開始角度startAngleと角度間隔spacingを指定して','放射状に発生させる。(startRotation設定無効)','particlesPerWaveとspacingをかけて360とすると、','きれいな放射状に発生する','<※発生方法はいずれか1つのみ指定が有効>'] }; var texts = ParticleEditor.GUIDE_TEXTS.blendMode; ParticleEditor.BLEND_MODE_NAMES = Game_Particle.BLEND_MODE_NAMES; texts.push('【ブレンドモード/画像合成方法】'); var length = ParticleEditor.BLEND_MODE_NAMES.length; var text = ''; for(var i = 0; i0){ texts.push(text); } text = ''; }else{ text += ','; } text += i + ':' + ParticleEditor.BLEND_MODE_NAMES[i]; if(i===length-1){ texts.push(text); } } })(); 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; i0){ this.processPickImage(); } }else if(event.keyCode===KEY_CODE.p){ this.processPickPreset(); }else if(event.keyCode===KEY_CODE.a){ if(parameters.animationNames&¶meters.animationNames.length>0){ this.processPickAnimation(); } }else if(event.keyCode===KEY_CODE.w){ this.processQuit(); }else if(event.keyCode===KEY_CODE.e){ this.processComplete(); }else if(event.keyCode===KEY_CODE.t){ this.processPickTile(); }else if(event.keyCode===KEY_CODE.l){ this.processPickLoad(); } }else if(!event.ctrlKey && !event.altKey) { this._keyCode = event.keyCode; } }; ParticleEditor.prototype._onKeyUp = function(event){ }; /* word inputting ===================================*/ ParticleEditor.prototype.resetInputingWords = function(){ if(this._inputtingWords==='')return; this._inputtingWords = ''; this.prepareInputtingCandidates(); }; ParticleEditor.prototype.prepareInputtingCandidates = function(){ this._inputtingCandidates = this._commands.concat(); this._inputtingCandidates.push('SCREEN'); }; ParticleEditor.prototype.pushInputtingCharacter = function(chara){ this._inputtingWords += chara; var words = this._inputtingWords; var candidates = this._inputtingCandidates; var length = candidates.length; var firstHit = null; for(var i = 0; i0 && !firstHit){ for(var i=0; i=0; i=(i-1)|0){ if(candidates[i].indexOf(words)!==0)continue; candidates.splice(i,1); } } this._inputtingWords = words; } if(firstHit){ var perfectHit = this._inputtingWords===firstHit; if(firstHit==='SCREEN'){ if(perfectHit){ var index = this._commands.indexOf('RECT'); this._data.params.rect = [-Graphics.boxWidth/2,-Graphics.boxHeight/2,Graphics.boxWidth,Graphics.boxHeight]; this._parts[index].refreshParts(); this.startEditing(index); } }else{ var index = this._commands.indexOf(firstHit); this.startEditing(index); } } }; /* update ===================================*/ ParticleEditor.prototype.update = function(){ if(this._terminated)return; this.updateParticleCount(); if(this._activePicker){ this._activePicker.update(); this._keyCode = 0; return; } var children = this.children; var length = children.length; var i=length-1; for(;i>=0;i-=1){ var child = children[i]; if (child && child.update){ child.update(); } } /* input & return ===================================*/ if(TouchInput.isTriggered()||TouchInput.isPressed()){ this.processTouch(); }else if(Input._latestButton || this._keyCode){ this.processInput(); } this._keyCode = 0; }; ParticleEditor.prototype.processTouch = function(){ var allParts = this._parts; var length = allParts.length; var x = TouchInput.x; var y = TouchInput.y; var margin = ParticleEditor.SELECTOR_MARGIN; for(var i = 0; i=KEY_CODE.alphabet && this._keyCode<=KEY_CODE.alphabetEnd){ this.pushInputtingCharacter(String.fromCharCode(this._keyCode)); }else{ var editing = this._editingIndex>=0 ? this._parts[this._editingIndex] : null; if(editing){ if(!editing.processInput(this._keyCode)){ this.endEditing(); }else{ this.selectParts(this._editingIndex); if(editing.hasSaveData()){ this.saveEditingParams(); } } }else if(Input.isTriggered('cancel')&&this._keyCode!==96){ if(this._saveButton.opacity<255){ this.processQuit(); }else{ SoundManager.playBuzzer(); } } if(this._keyCode!==0){ this.resetInputingWords(); } } }; ParticleEditor.prototype.saveEditingParams = function(){ var editing = this._parts[this._editingIndex]; if(!editing)return; var saveData = editing.handOverSaveData(); if(!saveData)return; this.saveEditingData(saveData); }; ParticleEditor.prototype.saveEditingData = function(saveData){ var editing = this._parts[this._editingIndex]; if(!editing)return; this._saveEditingData(editing._title,saveData); }; ParticleEditor.prototype._saveEditingData = function(title,saveData){ saveData.unshift(title); saveData.unshift(this._id); this._particle.particleUpdate(saveData); this._saveButton.opacity = 255; }; ParticleEditor.prototype.startEditing = function(index){ if(this._editingIndex === index)return; if(this._editingIndex>=0){ this._parts[this._editingIndex].endEditing(); SoundManager.playCursor(); }else{ SoundManager.playCursor(); } var target = this._parts[index]; target.startEditing(); this._editingIndex = index; var title = target.title(); this.showGuideWithTitle(title); if(target.type() === 'color'){ target.setPicker(this._colorPicker); } if(target.isSpawnParam()){ var saveData = target.paramSaveData(); this.saveEditingData(saveData); } this.refreshPartsHidden(); this.selectParts(index); }; ParticleEditor.prototype.spawnType = function(){ var spawnType = this._config.spawnType; var params = this._data.params; if(params.rect)spawnType = 'rect'; else if(params.circle)spawnType = 'circle'; else if(params.ring)spawnType = 'ring'; else if(params.burst)spawnType = 'burst'; else if(params.pos||params.point||params.spawnPos)spawnType = 'point'; if(spawnType==='position'||spawnType==='pos')spawnType = 'point'; return spawnType; }; ParticleEditor.prototype.refreshPartsHidden = function(){ var spawnType = this.spawnType(); var allParts = this._parts; var length = allParts.length; for(var i = 0; i=0){ this._parts[this._editingIndex].endEditing(); } this._editingIndex = -1; this.deselectParts(); }; /* selector ===================================*/ ParticleEditor.prototype.createSelectorSprite = function(){ var size = ParticleParam.LINE_HEIGHT; var bitmap = new Bitmap(size,size); bitmap.fillAll('rgb(255,255,255)'); var sprite = new Sprite(bitmap); sprite.opacity = 150; this._selectorSprite = sprite; this.addChild(sprite); sprite.anchor.set(1,0); sprite.x = Graphics.boxWidth; sprite.visible = false; }; ParticleEditor.SELECTOR_MARGIN = 20; ParticleEditor.prototype.selectParts = function(index){ var parts = this._parts[index]; var sprite = this._selectorSprite; var size = sprite.bitmap.height; sprite.y = parts.y; sprite.scale.x = (parts._width+ParticleEditor.SELECTOR_MARGIN)/size; sprite.visible = true; }; ParticleEditor.prototype.deselectParts = function(){ this._selectorSprite.visible = false; }; /* parts ===================================*/ ParticleEditor.prototype.createParts = function(data,config){ var title,configNames,headers; var y = 10; title = 'alpha'; configNames = ['alpha']; y += this.addNodeParts(y,data,config,configNames,title); title = 'scale'; configNames = ['scale']; y += this.addNodeParts(y,data,config,configNames,title); title = 'minimumScaleMultiplier'; configNames = ['scale.minimumScaleMultiplier']; headers = null; y += this.addValueParts(y,data,config,configNames,title,headers); title = 'speed'; configNames = ['speed']; y += this.addNodeParts(y,data,config,configNames,title); title = 'minimumSpeedMultiplier'; configNames = ['speed.minimumSpeedMultiplier']; headers = null; y += this.addValueParts(y,data,config,configNames,title,headers); title = 'color'; configNames = ['color']; y += this.addColorNodeParts(y,data,config,configNames,title); title = 'colorMode'; configNames = ['colorMode']; headers = null; y += this.addValueParts(y,data,config,configNames,title,headers); title = 'acceleration'; configNames = ['acceleration.x','acceleration.y']; headers = ['x','y']; y += this.addValueParts(y,data,config,configNames,title,headers); title = 'startRotation'; configNames = ['startRotation.min','startRotation.max']; headers = ['min','max']; y += this.addValueParts(y,data,config,configNames,title,headers); title = 'rotationSpeed'; configNames = ['rotationSpeed.min','rotationSpeed.max']; headers = ['min','max']; y += this.addValueParts(y,data,config,configNames,title,headers); title = 'imageOption'; configNames = ['angle','mirrorType']; headers = ['angle','mirror']; y += this.addValueParts(y,data,config,configNames,title,headers); title = 'lifetime'; configNames = ['lifetime.min','lifetime.max']; headers = ['min','max']; y += this.addValueParts(y,data,config,configNames,title,headers); title = 'blendMode'; configNames = ['blendMode']; headers = null; y += this.addValueParts(y,data,config,configNames,title,headers); title = 'frequency'; configNames = ['frequency']; headers = null; y += this.addValueParts(y,data,config,configNames,title,headers); title = 'spawnChance'; configNames = ['spawnChance']; headers = null; y += this.addValueParts(y,data,config,configNames,title,headers); title = 'particlesPerWave'; configNames = ['particlesPerWave']; headers = null; y += this.addValueParts(y,data,config,configNames,title,headers); title = 'emitterLifetime'; configNames = ['emitterLifetime']; headers = null; y += this.addValueParts(y,data,config,configNames,title,headers); title = 'maxParticles'; configNames = ['maxParticles']; headers = null; y += this.addValueParts(y,data,config,configNames,title,headers); title = 'fluctuation'; configNames = ['fluctuation.max','fluctuation.sensitivity']; headers = ['max','sensitivity']; y += this.addValueParts(y,data,config,configNames,title,headers); y += 15; title = 'point'; configNames = ['pos.x','pos.y']; headers = ['x','y']; y += this.addValueParts(y,data,config,configNames,title,headers); title = 'rect'; configNames = ['spawnRect.x','spawnRect.y','spawnRect.w','spawnRect.h']; headers = ['x','y','w','h']; y += this.addValueParts(y,data,config,configNames,title,headers); title = 'circle'; configNames = ['spawnCircle.x','spawnCircle.y','spawnCircle.r']; headers = ['x','y','r']; y += this.addValueParts(y,data,config,configNames,title,headers); title = 'ring'; configNames = ['spawnCircle.x','spawnCircle.y','spawnCircle.r','spawnCircle.minR']; headers = ['x','y','r','minR']; y += this.addValueParts(y,data,config,configNames,title,headers); title = 'burst'; configNames = ['particleSpacing','angleStart']; headers = ['spacing','startAngle']; y += this.addValueParts(y,data,config,configNames,title,headers); }; ParticleEditor.POS_PARAMS = ['point','rect','circle','ring','burst']; ParticleEditor.prototype.addValueParts = function(y,data,config,configNames,title,headers){ var parts = new ParticleParam.ValueParam(data,config,configNames,title,headers); this._addParts(y,parts,title); return parts._height; }; ParticleEditor.prototype.addNodeParts = function(y,data,config,configNames,title){ var parts = new ParticleParam.NodeParam(data,config,configNames,title); this._addParts(y,parts,title); return parts._height; }; ParticleEditor.prototype.addColorNodeParts = function(y,data,config,configNames,title){ var parts = new ParticleParam.ColorNodeParam(data,config,configNames,title); this._addParts(y,parts,title); return parts._height; }; ParticleEditor.prototype._addParts = function(y,parts,title){ parts.refresh(); this.addChild(parts); this._commands.push(title.toUpperCase()); this._parts.push(parts); parts.y = y; }; /* picker ===================================*/ ParticleEditor.prototype.createColorPicker = function(){ var size = 144; var picker = new ColorPicker(size); this._colorPicker = picker; this.addChild(picker); picker.x = 10; picker.y = 30; picker.visible = false; }; ParticleEditor.prototype.createMenuButtons = function(){ var sprite; var commands = this._menuCommands; var color = 'black'; var index = 0; var xOffset = 0; var categoryOffset = 10; commands.push('processComplete'); sprite = this.menuButtonSprite(index++,xOffset,color,'保存&終了','(ctrl+E)'); commands.push('processSave'); sprite = this.menuButtonSprite(index++,xOffset,color,'保存','(ctrl+S)'); this._saveButton = sprite; xOffset += categoryOffset; if(parameters.imageNames){ commands.push('processPickImage'); sprite = this.menuButtonSprite(index++,xOffset,color,'画像選択','(ctrl+I)'); } commands.push('processPickTile'); sprite = this.menuButtonSprite(index++,xOffset,color,'タイル選択','(ctrl+T)'); if(parameters.animationNames){ commands.push('processPickAnimation'); sprite = this.menuButtonSprite(index++,xOffset,color,'アニメーション選択','(ctrl+A)'); } xOffset += categoryOffset; commands.push('processPickPreset'); sprite = this.menuButtonSprite(index++,xOffset,color,'プリセット','(ctrl+P)'); commands.push('processPickLoad'); sprite = this.menuButtonSprite(index++,xOffset,color,'読みこみ','(ctrl+L)'); xOffset += categoryOffset; commands.push('processQuit'); sprite = this.menuButtonSprite(index++,xOffset,'rgb(100,100,100)','終了','(ctrl+W)'); }; ParticleEditor.BUTTON_FONT_SIZE = Number(parameters.buttonFontSize||16); ParticleEditor.BUTTON_WIDTH = Number(parameters.buttonWidth||144) ParticleEditor.BUTTON_MIN_HEIGHT = 24; ParticleEditor.prototype.menuButtonSprite = function(index,xOffset,color,name,keyInfo){ var fontSize = ParticleEditor.BUTTON_FONT_SIZE; var keyFontSize = fontSize - 2; var marginTB = 2; var calcHeight = fontSize+keyFontSize + 2*marginTB; var height = Math.max(ParticleEditor.BUTTON_MIN_HEIGHT,calcHeight); var width = ParticleEditor.BUTTON_WIDTH; var margin = 4; var bitmap = new Bitmap(width,height); var sprite = new Sprite(bitmap); this._menuSprites.push(sprite); this.addChild(sprite); bitmap.fillAll('rgba(255,255,255,0.8)'); var y = marginTB; bitmap.fontSize = fontSize; bitmap.textColor = color; bitmap.outlineWidth = 0; bitmap.drawText(name,0,y,width,fontSize,'center'); y += fontSize bitmap.fontSize = keyFontSize; bitmap.drawText(keyInfo,0,y,width,keyFontSize,'center'); sprite.x = Graphics.boxWidth-margin-index*(width+margin)-width - xOffset; sprite.y = Graphics.boxHeight-margin-height; return sprite; }; ParticleEditor.prototype.processMenuCommand = function(i){ this[this._menuCommands[i]](); }; ParticleEditor.prototype.processSave = function(){ if(this._saveButton.opacity<255)return; this.executeSave(); SoundManager.playSave(); this._saveButton.opacity = 100; }; ParticleEditor.prototype.processQuit = function(){ this.executeQuit(); }; ParticleEditor.prototype.executeQuit = function(){ this.terminate(); SoundManager.playCancel(); }; ParticleEditor.prototype.processComplete = function(){ this.processSave(); this.executeQuit(); }; ParticleEditor.prototype.processPickImage = function(){ if(!this._imagePicker){ this.createImagePicker(); if(!this._imagePicker)return; } var image = this._data.image || this._config.image; this._imagePicker.startPicking(this,image); this.startPicking(this._imagePicker); }; ParticleEditor.prototype.processPickTile = function(){ if(!(SceneManager._scene instanceof Scene_Map)){ SoundManager.playBuzzer(); return; } if(!this._tilePicker){ this.createTilePicker(); } var image = this._data.image || this._config.image; this._tilePicker.startPicking(this,image); this.startPicking(this._tilePicker); }; ParticleEditor.prototype.processPickAnimation = function(){ if(!this._animationPicker){ this.createAnimationPicker(); } var image = this._data.image || this._config.image; this._animationPicker.startPicking(this,image); this.startPicking(this._animationPicker); }; ParticleEditor.prototype.processPickPreset = function(){ if(!this._presetPicker){ this.createPresetPicker(); if(!this._presetPicker)return; } var targetType = this._data.targetType; this._presetPicker.startPicking(this,targetType); this.startPicking(this._presetPicker); }; ParticleEditor.prototype.processPickLoad = function(){ if(!this._loadPicker){ this.createLoadPicker(); if(!this._loadPicker)return; } this._loadPicker.startPicking(this); this.startPicking(this._loadPicker); }; ParticleEditor.prototype.startPicking = function(picker){ this.endEditing(); this._activePicker = picker; this.addChild(picker); this.hideMenu(); this.hideParts(); var dx = picker.x+ picker._width; this.slideNumSpritesX(dx); }; ParticleEditor.prototype.didEndPicking = function(){ var dx = -this._activePicker.x -this._activePicker._width; this.slideNumSpritesX(dx); this._activePicker.parent.removeChild(this._activePicker); this._activePicker = null; this.showParts(); this.showMenu(); }; ParticleEditor.prototype.slideNumSpritesX = function(dx){ var system = SceneManager._scene._particleSystem; for(var i=0; i<3; i=(i+1)|0){ var sprite; if(i===0)sprite = this._particleCountSprite; else if(i===1)sprite = system ? system._countSprite : null; else sprite = system ? system._limitedSprite : null; if(sprite){ sprite.x += dx; } } }; ParticleEditor.prototype.hideParts = function(){ var parts = this._parts; var length = parts.length; for(var i = 0; i=0; i=(i-1)|0){ var image = images[i]; if(image.indexOf('tile:')===0)continue var filePath; if(image.indexOf('ANIM:')===0){ if(splitAnimImages.contains(image)){ filePath = path.join(dirPath, '_'+image.replace(/:/gi,'_')+ext); }else{ filePath = path.join(animPath, image.split(':')[1]+ext); } }else{ filePath = path.join(dirPath, image+ext) } if(!fs.existsSync(filePath)){ images.splice(i,1); } } if(length !== images.length){ var length = images.length; var image = ''; for(var i = 0; i0){ image += ','; } image += images[i]; } if(image.length===0){ image = Game_Particle.defaultImage(); } data.image = image; } }; /* applyData ===================================*/ ParticleEditor.prototype.applyData = function(applyData){ Game_Particle.migrateConfig(applyData); var allParts = this._parts; var length = allParts.length; var data = this._data; data.params = {}; for(var i = 0; i0){ return; } this._particleCountInterval = ParticleEditor.PARTICLE_COUNT_INTERVAL; var num = handler(); if(this._particleCount === num)return; var bitmap = this._particleCountSprite.bitmap; var x = ParticleEditor.PARTICLE_NUM_HEADER_WIDTH; var width = bitmap.width-x; var height = bitmap.height; bitmap.clearRect(x-2,0,width+2,height); bitmap.drawText(num,x,0,width,height); }; /* guideSprite ===================================*/ ParticleEditor.GUIDE_TEXT_MARGIN = 5; ParticleEditor.GUIDE_TEXT_FONT_SIZE = 14; ParticleEditor.GUIDE_TEXT_LINE_HEIGHT = 18; ParticleEditor.GUIDE_TEXT_MAX_ROW = 12; ParticleEditor.prototype.createGuideSprite = function(){ var maxRow = ParticleEditor.GUIDE_TEXT_MAX_ROW; var fontSize = ParticleEditor.GUIDE_TEXT_FONT_SIZE; var lineHeight = ParticleEditor.GUIDE_TEXT_LINE_HEIGHT; var width = 300; var height = lineHeight*maxRow+2*ParticleEditor.GUIDE_TEXT_MARGIN; var bitmap = new Bitmap(width,height) var sprite = new Sprite(bitmap); this.addChild(sprite); this._guideSprite = sprite; sprite.anchor.set(0,1); sprite.visible = false; sprite.x = 5; sprite.y = Graphics.boxHeight - ParticleEditor.GUIDE_TEXT_LINE_HEIGHT - 20; bitmap.fontSize = fontSize; bitmap.outlineColor = 'black'; }; ParticleEditor.prototype.showGuideWithTitle = function(title){ if(!showGuide)return; var sprite = this._guideSprite; var texts = ParticleEditor.GUIDE_TEXTS[title]; if(!texts || texts.length===0){ sprite.visible = false; return; } sprite.visible = true; if(this._guideCache===title)return; this._guideCache = title; var bitmap = sprite.bitmap; bitmap.clear(); bitmap.fillAll('rgba(0,0,0,0.3)') var margin = ParticleEditor.GUIDE_TEXT_MARGIN; var width = bitmap.width; var height = ParticleEditor.GUIDE_TEXT_LINE_HEIGHT; var length = Math.min(ParticleEditor.GUIDE_TEXT_MAX_ROW,texts.length); var y = ParticleEditor.GUIDE_TEXT_MARGIN; for(var i = 0; i0){ animImageArrStr+=','; } animImageArrStr+='"'+animImages[i]+'"'; } file += '\n */'; if(animImageArrStr.length>0){ file += '\nPluginManager._parameters.trp_particlelist = {'; file += '\n\tanimImages:['+animImageArrStr+']'; file += '\n};'; } var fs = require('fs'); var path = require('path'); var base = path.dirname(process.mainModule.filename); var filePath = path.join(base, ParticleEditor.HELP_PATH); fs.writeFileSync(filePath, file); }; /* copy & paste ===================================*/ ParticleEditor.prototype.processCopy = function(e){ var data = this.editingDataObject(); delete data.comment; var file; if(copyAsArray){ if(!Array.isArray(data)){ data = Game_Particle.compressConfigDataToArray(data); } file = JSON.stringify(data); }else{ file = JSON.stringify(data,null,4); } e.clipboardData.setData("text/plain" , file); e.preventDefault(); SoundManager.playSave(); }; ParticleEditor.prototype.processPaste = function(e){ e.preventDefault(); var clipboardData = e.clipboardData; if(!clipboardData){ SoundManager.playBuzzer(); return; } var text = clipboardData.getData("text/plain"); try{ var data = JSON.parse(text); var dataObj = null; if(Array.isArray(data)){ dataObj = Game_Particle.decompressConfigDataFromArray(data); }else{ dataObj = data; } this.endEditing(); this.applyData(dataObj); SoundManager.playLoad(); } catch(e){ SoundManager.playBuzzer(); } }; /* helper ===================================*/ ParticleEditor.prototype.hideMenu = function(){ var menuSprites = this._menuSprites; var length = menuSprites.length; for(var i = 0; i0 && config){ var elem = elems.shift(); config = config[elem]; } return config||0; }; ParticleParam.MAX_PARTS_WIDTH = 128; ParticleParam.prototype.createPartsSprite = function(){ var fontSize = ParticleParam.FONT_SIZE; var width = ParticleParam.MAX_PARTS_WIDTH; var height = fontSize+4; var bitmap = new Bitmap(width,height); bitmap.fontSize = fontSize; bitmap.outlineColor = 'black'; bitmap.outlineWidth = 5; bitmap.textColor = this.partsColor(); var sprite = new Sprite(bitmap); return sprite; }; ParticleParam.prototype.refreshPartsText = function(sprite,text,i){ var bitmap = sprite.bitmap; bitmap.clear(); var width = bitmap.width; var height = bitmap.height; var textWidth = Math.min(width,bitmap.measureTextWidth(text)+2); bitmap.drawText(text,1,0,width-2,height); sprite._frame.width = textWidth; sprite._refresh(); }; ParticleParam.prototype.layout = function(){ var margin = 5; var x = Graphics.boxWidth-margin; var allParts = this._parts; var length = allParts.length; for(var i = length-1; i>=0; i=(i-1)|0){ var parts = allParts[i]; parts.visible = !this._hidden; if(!parts.visible)continue; x -= parts.width; parts.x = x; x -= margin; } var title = this._titleSprite; title.x = x; this._width = Graphics.boxWidth-x + this._titleWidth; }; ParticleParam.prototype.show = function(){ if(!this._hidden)return; this._hidden = false; this.layout(); }; ParticleParam.prototype.hide = function(){ if(this._hidden)return; this._hidden = true; this.layout(); }; /* edit ===================================*/ ParticleParam.prototype.processTouch = function(x,y,margin){ if(ythis.y+this._height)return false; if(x=0; this._editingIndex = -1; var parts = this._parts; var length = parts.length; for(var i = 0; ithis._parts.length-1)index = 0; this.setEditing(index); }else if(Input.isTriggered('left') && keyCode!==100){ var index = this._editingIndex-1; if(index<0)index = this._parts.length-1; this.setEditing(index); }else if(keyCode===KEY_CODE.backSpace){ this.clearInputting(); this.applyEditing(); }else{ var numKeyCode = KEY_CODE.num; var tenKeyCode = KEY_CODE.tenkey; var chara = null; if(keyCode>=numKeyCode&&keyCode=tenKeyCode&&keyCode1){ var elem = elems.shift(); if(!targetObj[elem]){ targetObj[elem] = {}; } targetObj = targetObj[elem]; } targetObj[elems[0]] = value; } }; ValueParam.prototype.refreshWithConfigData = function(config){ var names = this._configNames; var length = names.length; var data = this._data.params[this._title]; for(var i = 0; i0 && index0 && this._editingIndex=numKeyCode&&keyCode=tenKeyCode&&keyCode=tenKeyCode ? keyCode-tenKeyCode : keyCode-numKeyCode); if(this._inputtingTime.contains('.')){ this._inputtingTime += num; }else{ this._inputtingTime = num===0 ? '0' : '1'; } this.refreshParts(); }else{ return; } }; NodeParam.prototype.setEditing = function(index){ this._inputtingTime = null; ParticleParam.prototype.setEditing.call(this,index); }; NodeParam.prototype.startEditingPartsWithTime = function(time){ var innerData = this._innerData; var length = innerData.length; var data = this._editingIndex>=0 ? innerData[this._editingIndex] : null; if(data){ data.time = time; this._inputting = String(data.value); } for(var i = 0; i=0){ if(this._editingIndex!==i){ innerData.splice(i,1); break; } }else{ this.setEditing(i); return; } } } if(!data){ data = { time:time, value:this.defaultValue() }; this._inputting = data.value; innerData.push(data); } this.sortInnerData(); var index = innerData.indexOf(data); this._editingIndex = index; this.setEditing(index); this.applyAll(); }; NodeParam.prototype.endEditing = function(){ this._inputtingTime = null; ParticleParam.prototype.endEditing.call(this); if(this._inputtingTimeSprite){ this._inputtingTimeSprite.visible = false; } }; NodeParam.prototype.pushSaveDataParams = function(data){ var list = this._innerData.concat(); var configName = this._configNames[0]; if(!data[configName]){ data[configName] = {}; } data[configName].list = list; }; NodeParam.prototype.refreshWithConfigData = function(config){ var params = config[this._title]; if(!params || !params.list)return; this._innerData = params.list.concat(); this.sortInnerData(); ParticleParam.prototype.refreshWithConfigData.call(this,config); }; ParticleParam.ColorNodeParam = function(){ this.initialize.apply(this, arguments); }; var ColorNodeParam = ParticleParam.ColorNodeParam; ColorNodeParam.prototype = Object.create(NodeParam.prototype); ColorNodeParam.prototype.constructor = ColorNodeParam; ColorNodeParam.prototype.initialize = function(data,config,name,title) { NodeParam.prototype.initialize.call(this,data,config,name,title); this._colorPicker = null; }; ColorNodeParam.prototype.type = function(){ return 'color'; }; ColorNodeParam.prototype.defaultValue = function(){ return this._colorPicker ? this._colorPicker.color() : 'rgb(255,255,255)'; }; ColorNodeParam.prototype.setPicker = function(picker){ this._colorPicker = picker; picker.visible = true; this.refreshPickerColor(); }; ColorNodeParam.prototype.refreshPickerColor = function(){ var picker = this._colorPicker; if(!picker)return; var index = this._editingIndex; if(index<0)return; var value = this._innerData[index].value; picker.setColor(value); }; ColorNodeParam.prototype.setEditing = function(index){ NodeParam.prototype.setEditing.call(this,index); this.refreshPickerColor(); }; ColorNodeParam.prototype.endEditing = function(){ NodeParam.prototype.endEditing.call(this); this._colorPicker.visible = false; this._colorPicker = null; }; ColorNodeParam.prototype.processTouch = function(x,y,margin){ var editingData = this._innerData[this._editingIndex]; if(!!editingData && this._colorPicker){ var color = this._colorPicker.color(); if(color !== editingData.value){ this._inputting = color; this.applyEditing(); } } return NodeParam.prototype.processTouch.call(this,x,y,margin); }; ColorNodeParam.prototype.paramSaveData = function(index,value){ if(value!==undefined){ if(value.indexOf('rgb')===0){ if(!value.match(/rgb\(\d+,\d+,\d+\)/)){ return null; } }else{ var color; if(value[0]==='#'){ color = value.substr(1); }else{ color = value; value = '#'+value; } if(isNaN(color) && color.length!==6){ return null; } } } return NodeParam.prototype.paramSaveData.call(this,index,value); }; /* input ===================================*/ ColorNodeParam.prototype.processInput = function(keyCode){ if(keyCode === KEY_CODE.delete){ if(this._editingIndex!==0&&this._editingIndex!==this._innerData.length-1){ var index = this._editingIndex; this._innerData.splice(this._editingIndex,1); this._inputting = this._innerData[this._editingIndex].value; this.applyEditing(); } }else{ return NodeParam.prototype.processInput.call(this,keyCode); } return true; }; ColorNodeParam.prototype.clearInputting = function(){ if(this._editingIndex === 0){ this._inputting = '#ffffff'; }else{ var previousNode = this._innerData[this._editingIndex-1]; this._inputting = this.colorCodeWithValue(previousNode.value); } }; ColorNodeParam.prototype.refreshPartsText = function(sprite,text,i){ var bitmap = sprite.bitmap; bitmap.clear(); var width = bitmap.width; var height = bitmap.height; var data =this._innerData[i]; var color = data ? data.value : null; if(color.indexOf('rgb')===0){ if(!color.match(/rgb\(\d+,\d+,\d+\)/)){ color = 'white'; } }else{ if(color[0]==='#'){ color = color.substr(1); } if(!color.match(/[0-9a-f]+/)){ color = 'white;' }else if(color.length!==6){ color = 'white'; }else{ color = '#'+color; } } bitmap.fillRect(0,1,height-2,height-2,'black'); bitmap.fillRect(1,2,height-4,height-4,color); var textWidth = Math.min(width,height+bitmap.measureTextWidth(text)+2); bitmap.drawText(text,height,0,width-2-height,height); sprite._frame.width = textWidth; sprite._refresh(); }; ColorNodeParam.prototype.partsText = function(index){ return this._partsText(index,noColorCode); }; ColorNodeParam.prototype._partsText = function(index,noColorCode){ var data = this._innerData[index]; var text; if(noColorCode){ text = ''; }else{ text = index===this._editingIndex ? this._inputting : String(data.value); } if(index>0 && index=g && r>=b){ h = 60*(g-b)/(max-min); }else if(g>=r && g>=b){ h = 60*(b-r)/(max-min)+120; }else{ h = 60*(r-g)/(max-min)+240; } s = (max-min)/max*255; v = max; this.setHue(h); this.setSV(s,v); }; ColorPicker.prototype.updateResultColor = function(){ this._color = ColorPicker.colorWithHsv(this._hue,this._saturation,this._value); }; ColorPicker.prototype.color = function(){ return this._color; }; ColorPicker.prototype.setHue = function(h){ h = h.clamp(0,360); if(this._hue === h)return; var dh = h-this._hue; this._hue = h; this.setupPallete(this._hue); var sprite = this._huePicker; var pointer = this._huePointer; pointer.x = sprite.x+sprite.width/2; pointer.y = sprite.y+sprite.height*h/360; this.updateResultColor(); }; ColorPicker.prototype.setSV = function(s,v){ if(this._saturation===s && this._value===v)return; this._saturation = s; this._value = v; var margin = ColorPicker.MARGIN var size = this._size; var pointer = this._pointer; pointer.x = margin+Math.round((s/255)*size); pointer.y = margin+Math.round(size-(v/255)*size-1); this.updateResultColor(); }; ColorPicker.prototype.update = function(){ if(!this.visible){ this._touchingHue = false; this._touchingSv = false; return; } if(!TouchInput.isTriggered() && !TouchInput.isPressed()){ this._touchingHue = false; this._touchingSv = false; return; } var x = TouchInput.x-this.x; var y = TouchInput.y-this.y; var dx,dy,touchInside; var hPicker = this._huePicker; dx = x-hPicker.x; dy = y-hPicker.y; touchInside = (dx>=0 && dx<=hPicker.width && dy>=0 && dy<=hPicker.height); if(this._touchingHue || (!this._touchingSv&&touchInside)){ dy = dy.clamp(0,hPicker.height-1); var hue = Math.round(dy/(hPicker.height-1)*360); this.setHue(hue); this._touchingHue = true; return; } var svPicker = this._pickerSprite; dx = x-svPicker.x; dy = y-svPicker.y; touchInside = (dx>=0 && dx<=svPicker.width && dy>=0 && dy<=svPicker.height); if(this._touchingSv || (!this._touchingHue&&touchInside)){ dx = dx.clamp(0,svPicker.width-1); dy = dy.clamp(0,svPicker.height-1); var s = Math.round(dx/(svPicker.width-1)*255); var v = Math.round((svPicker.height-1-dy)/(svPicker.height-1)*255); this.setSV(s,v); this._touchingSv = true; return; } }; function PickerBase(){ this.initialize.apply(this, arguments); }; PickerBase.TINT_SEVERAL = 0xaaffff; PickerBase.TINT_NORMAL = 0xffffaa; PickerBase.LAYOUT = { marginTopBottom:5 }; PickerBase.prototype = Object.create(PIXI.Container.prototype); PickerBase.prototype.constructor = PickerBase; PickerBase.prototype.initialize = function() { PIXI.Container.call(this); this.initMembers(); this.createBackSprite(); this.createHighlightBitmap(); this.createGuideSprite(); this.createHeaderSprite(); }; PickerBase.prototype.initMembers = function(){ this._header = ''; this._headerSprite = null; this._topRow = 0; this._maxRow = 0; this._dispRows = 0; this._maxTopRow = 0; this._owner = null; this._severalMode = false; this._severalModeSwitched = false; this._selectingIndexes = []; this._backSprite = null; this._highlightSprites = []; this._highlightBitmap = null; this._guideSprite = null; this._listType = null; this._categoryIndex = 0; }; PickerBase.prototype.startPicking = function(owner){ this.visible = true; this._owner = owner; Input.clear(); TouchInput.clear(); this.registerWheelListener(); this.refresh(); this._headerSprite.opacity = 255; this._headerSprite.visible = true; if(this._guideSprite){ var sprite = this._guideSprite; sprite.x = this._width + 10; sprite.y = Graphics.boxHeight-50; } }; PickerBase.prototype.end = function(){ if(this._owner){ this._owner.didEndPicking(); } this._owner = null; this.resignWheelListener(); this.visible = false; SoundManager.playCancel(); Input.clear(); TouchInput.clear(); }; PickerBase.prototype.refresh = function(){ var type = this.categoryType(); if(this._listType === type)return; this.setListType(type); if(this.isReady()){ this._refresh(); } }; PickerBase.prototype.isReady = function(){ return true; }; PickerBase.prototype._refresh = function(){ var col = this.maxColumns(); var itemWidth = this.itemWidth(); var itemHeight = this.itemHeight(); var margin = PickerBase.LAYOUT.marginTopBottom; var itemNum = this.maxItems(); var mx = this.itemMarginX(); var my = this.itemMarginY(); this._maxRow = Math.ceil(itemNum/col); this._dispRows = Math.floor((Graphics.boxHeight-2*margin)/(itemHeight+my)); this._maxTopRow = Math.max(0,this._maxRow-this._dispRows-1); var row = this._maxRow; var width = itemWidth*col+mx*(col-1)+margin*2; this._width = width; this._height = Graphics.boxHeight; this.refreshBackSprite(); this.refreshItems(); }; PickerBase.prototype.setListType = function(type){ this._listType = type; this.refreshHeaderSprite(); }; PickerBase.prototype.refreshItems = function(){}; /* needs overwrite ===================================*/ PickerBase.prototype.maxColumns = function(){return 4;}; PickerBase.prototype.itemHeight = function(){return 48;}; PickerBase.prototype.itemWidth = function(){return 48;}; PickerBase.prototype.maxItems = function(){return 0;}; PickerBase.prototype.guideTexts = function(){return null;}; PickerBase.prototype.itemMarginX = function(){return 0;}; PickerBase.prototype.itemMarginY = function(){return 0;}; PickerBase.prototype.categoryType = function(){ return 1; }; PickerBase.prototype.headerText = function(){return '';} PickerBase.prototype.maxCategories = function(){return 1}; PickerBase.prototype.isCategoryValid = function(index){return true}; PickerBase.prototype.isSeveralModeValid = function(){return true}; PickerBase.prototype.applyData = function(){}; /* select ===================================*/ PickerBase.prototype.deselectIndex = function(index){ if(index<0)return; var arrayIdx = this._selectingIndexes.indexOf(index); if(arrayIdx<0)return; this._selectingIndexes.splice(arrayIdx,1); var sprite = this._highlightSprites[arrayIdx]; if(sprite){ this._highlightSprites.splice(arrayIdx,1); sprite.parent.removeChild(sprite); } }; PickerBase.prototype.didPickData = function(index){ if(this._selectingIndexes.contains(index)){ this.deselectIndex(index); }else{ this.setSelectingIndex(index); } this.applyData(); }; /* update ===================================*/ PickerBase.prototype.update = function(){ if(this._headerSprite.visible){ this.updateHeaderSprite(); } if(Input._latestButton){ this.processInput(); }else if(TouchInput.isLongPressed() && this.isSeveralModeValid()){ if(!this._severalModeSwitched){ this.switchSelectingMode(); this._severalModeSwitched = true; if(this._selectingIndexes.length===0){ this.processTouch(); } this.applyData(); } }else if(TouchInput.isTriggered()){ this.processTouch(); this._severalModeSwitched = false; } }; PickerBase.prototype.onKeyDown = function(keyCode){ if(keyCode>=KEY_CODE.alphabet && keyCode<=KEY_CODE.alphabetEnd){ var chara = event.key; this.search(chara); } }; PickerBase.prototype.search = function(chara){}; PickerBase.prototype.processTouch = function(){ var x = TouchInput.x - this.x; var y = TouchInput.y - this.y; if(x<0 || x>this._width){ this.end(); return; } var maxCol = this.maxColumns(); var length = this.maxItems(); var margin = PickerBase.LAYOUT.marginTopBottom; var mx = this.itemMarginX(); var my = this.itemMarginY(); var itemWidth = this.itemWidth(); var itemHeight = this.itemHeight(); var colW = itemWidth+mx; var rowH = itemHeight+my; var x0 = margin/2; var ix = x0; var iy = margin/2; for(var i = 0; i200){ this._headerSprite.opacity -= 1; }else{ this._headerSprite.opacity -= 5; } if(this._headerSprite.opacity<=0){ this._headerSprite.visible = false; } }; /* backSprite ===================================*/ PickerBase.prototype.createBackSprite = function(){ var sprite,bitmap; bitmap = new Bitmap(16,16); sprite = new Sprite(bitmap); this.addChild(sprite); this._backSprite = sprite; sprite.opacity = 150; bitmap.fillAll('black'); }; PickerBase.prototype.refreshBackSprite = function(){ var width = this._width; var height = Graphics.boxHeight; var sprite = this._backSprite; sprite.scale.set(width/16,height/16); }; /* highlight sprites ===================================*/ PickerBase.prototype.createHighlightBitmap = function(){ var bitmap = new Bitmap(16,16); bitmap.fillAll('white'); this._highlightBitmap = bitmap; }; PickerBase.prototype.pushNewHighlightSprite = function(){ var itemHeight = this.itemHeight(); var itemWidth = this._width / this.maxColumns(); var bitmap = this._highlightBitmap; var sprite = new Sprite(bitmap); this._highlightSprites.push(sprite); this.addChild(sprite); sprite.opacity = 100; sprite.scale.set(itemWidth/bitmap.width,itemHeight/bitmap.height); return sprite; }; /* guide sprite ===================================*/ PickerBase.prototype.createGuideSprite = function(){ var texts = this.guideTexts(); if(!texts)return; var fontSize = 14; var width = 200; var lineHeight = fontSize + 4; var lines = texts.length; var height = lineHeight*lines; var bitmap = new Bitmap(width,height); var sprite = new Sprite(bitmap); this.addChild(sprite); this._guideSprite = sprite; sprite.anchor.set(0,1); bitmap.fontSize = fontSize; bitmap.fillAll('rgb(0,0,150,0.6)'); var y = 0; var length = texts.length; for(var i = 0; i1){ this._topRow = 0; var index = this._categoryIndex; do{ index += 1; if(index>=this.maxCategories()){ index = 0; } }while(index!==this._categoryIndex && !this.isCategoryValid(index)); this._categoryIndex = index; this.refreshCategory(); }else{ this._topRow = Math.max(0,this._topRow-this._dispRows); this.refreshPosition(); } }; PickerBase.prototype.processPageDown = function(){ SoundManager.playCursor(); if(this.maxCategories()>1){ this._topRow = 0; var index = this._categoryIndex; do{ index -= 1; if(index<0){ index = this.maxCategories()-1; } }while(index!==this._categoryIndex && !this.isCategoryValid(index)); this._categoryIndex = index; this.refreshCategory(); }else{ this._topRow = Math.min(this._maxTopRow,this._topRow+this._dispRows); this.refreshPosition(); } }; PickerBase.prototype.refreshCategory = function(){ this.deselectAll(); this.refresh(); this.refreshPosition(); }; /* several mode ===================================*/ PickerBase.prototype.switchSelectingMode = function(){ this.setSeveralMode(!this._severalMode); }; PickerBase.prototype.setSeveralMode = function(valid){ if(this._severalMode===valid)return; this._severalMode = valid; this.deselectAll(); }; /* wheel ===================================*/ PickerBase.prototype.registerWheelListener = function(){ var listener = this._onWheel.bind(this); this._wheelListener = listener; document.addEventListener('wheel', listener); }; PickerBase.prototype.resignWheelListener = function(){ if(!this._wheelListener)return; document.removeEventListener('wheel', this._wheelListener); this._wheelListener = null; }; PickerBase.prototype._onWheel = function(event) { if(event.deltaY>0){ this.setTopRowNext(); }else if(event.deltaY<0){ this.setTopRowPrevious(); } event.stopPropagation(); }; function ImagePickerBase(){ this.initialize.apply(this, arguments); }; ImagePickerBase.prototype = Object.create(PickerBase.prototype); ImagePickerBase.prototype.constructor = ImagePickerBase; ImagePickerBase.prototype.initialize = function() { PickerBase.prototype.initialize.call(this); }; ImagePickerBase.prototype.applyData = function(){ if(this._owner){ var imageName = this.imageName(); this._owner.didPickImage(imageName); } }; ImagePickerBase.prototype.imageName = function(){return '';}; function ImagePicker(){ this.initialize.apply(this, arguments); }; ImagePicker.MARGIN = 5; ImagePicker.NAME_HEIGHT = 14; ImagePicker.MAX_COL = 4; ImagePicker.IMAGE_SIZE = 48; ImagePicker.prototype = Object.create(ImagePickerBase.prototype); ImagePicker.prototype.constructor = ImagePicker; ImagePicker.prototype.initialize = function(){ ImagePickerBase.prototype.initialize.call(this); this._imageNames = parameters.imageNames; this._imageSize = this.imageSize(); this._imageSprites = []; this._nameSprites = []; }; /* overwrite setting ===================================*/ ImagePicker.prototype.maxItems = function(){ return this._imageNames.length; }; ImagePicker.prototype.maxColumns = function(){ return ImagePicker.MAX_COL; }; ImagePicker.prototype.itemHeight = function(){ var nameHeight = ImagePicker.NAME_HEIGHT; return this.imageSize() + nameHeight; }; ImagePicker.prototype.itemWidth = function(){ return this.imageSize(); }; ImagePicker.prototype.itemMarginX = function(){ return ImagePicker.MARGIN; }; ImagePicker.prototype.itemMarginY = function(){ return 0; }; ImagePicker.prototype.guideTexts = function(){ return [ '↑↓キー、マウスホイールでスクロール', '決定キー、リスト外クリックで選択終了', '長押しクリックで複数<=>単体選択切り替え' ]; }; ImagePicker.prototype.imageName = function(){ var name = ''; var indexes = this._selectingIndexes; var length = indexes.length; for(var i = 0; i0){ name += ','; } var index = indexes[i]; name += this._imageNames[index]; } return name; }; /* originalSetting ===================================*/ ImagePicker.prototype.imageSize = function(){ return ImagePicker.IMAGE_SIZE; }; /* refresh ===================================*/ ImagePicker.prototype.refreshItems = function(){ var nameHeight = ImagePicker.NAME_HEIGHT; var mx = this.itemMarginX(); var my = this.itemMarginY(); var margin = PickerBase.LAYOUT.marginTopBottom; var width = this._width; var itemWidth = this.itemWidth(); var itemHeight = this.itemHeight(); var imageSize = this.imageSize(); var colW = itemWidth + mx; var rowH = itemHeight + my; var nameSprites = this._nameSprites; var nameSprite,nameBitmap,bitmap,sprite; var col = this.maxColumns(); var imageNames = this._imageNames; var length = imageNames.length; for(var i = 0; i=0){ validIndexes.push(index); } } length = validIndexes.length; var severalMode = length>=2; this.setSeveralMode(severalMode); for(var i = 0; i単体選択切り替え' ]; }; TilePicker.prototype.imageName = function(){ var bitmapIndex = this._categoryIndex; var bitmapNameElems = this._bitmaps[bitmapIndex]._url.split('/');; var bitmapName = bitmapNameElems[bitmapNameElems.length-1].replace('.png',''); var name = ''; var indexes = this._selectingIndexes; var length = indexes.length; var rows = this._imageRows; var cols = this.maxColumns(); var tilesetCols = ParticleEmitter.TILESET_COLUMNS; var lowerSpriteIndex = rows*cols; for(var i = 0; i0){ name += ','; } var index = indexes[i]; var tileIndex; var c = index%cols; var r = Math.floor(index/cols); if(index>=lowerSpriteIndex){ c += cols; r -= rows; } var tileIndex = r*tilesetCols+c; name +='tile:'+bitmapName+':'+tileIndex; } return name; }; TilePicker.prototype.categoryType = function(){ return this._categoryIndex; }; TilePicker.prototype.maxCategories = function(){ return this._bitmaps ? this._bitmaps.length : 1; }; TilePicker.prototype.isCategoryValid = function(index){ var bitmap = this._bitmaps[index]; if(!bitmap)return false; return bitmap.width>=48 && bitmap.height>=48; }; /* originalSetting ===================================*/ TilePicker.prototype.tileSize = function(){ return 48; }; TilePicker.prototype.tileScale = function(){ return TilePicker.TILE_SCALE; }; /* refresh ===================================*/ TilePicker.prototype.setListType = function(type){ ImagePickerBase.prototype.setListType.call(this,type); var tileSize = this.tileSize(); var bitmap = this.bitmap(); var width = bitmap.width; var height = bitmap.height; var imageCols = Math.floor(width/tileSize); var imageRows = Math.floor(height/tileSize); this._imageCols = imageCols; this._imageRows = imageRows; var maxCol = this.maxColumns(); var validCols = Math.ceil(imageCols/maxCol)*maxCol; this._maxItems = validCols*imageRows; }; TilePicker.prototype.refreshItems = function(){ var tileSize = this.tileSize(); var bitmap = this.bitmap(); var width = bitmap.width; var height = bitmap.height; var imageCols = Math.floor(width/tileSize); var imageRows = Math.floor(height/tileSize); var maxCol = this.maxColumns(); var margin = PickerBase.LAYOUT.marginTopBottom; var sprite = this._upperSprite; sprite.bitmap = bitmap; sprite._frame.width = maxCol*tileSize; sprite._refresh(); sprite.x = margin; sprite.y = margin; sprite = this._lowerSprite sprite.visible = imageCols>maxCol if(sprite.visible){ sprite.bitmap = bitmap; sprite._frame.x = maxCol*tileSize; sprite._refresh(); sprite.x = margin; sprite.y = margin+height*this.tileScale(); } }; TilePicker.prototype.bitmap = function(){ return this._bitmaps[this._categoryIndex]; }; /* start picking ===================================*/ TilePicker.prototype.startPicking = function(owner,imagestr){ var tileIndexes = []; if(imagestr){ var images = imagestr.split(','); var tilesetIndex = -1; var length = images.length; for(var i = 0; i=6 ? 5 : 0; } ImagePickerBase.prototype.startPicking.call(this,owner); var rows = this._imageRows; var cols = this.maxColumns(); var tilesetCols = ParticleEmitter.TILESET_COLUMNS; var lowerSpriteIndex = cols*rows; var length = tileIndexes.length; var severalMode = length>=2; this.setSeveralMode(severalMode); for(var i = 0; i= cols){ row += rows; col -= cols; } var index = row*cols + col; this.setSelectingIndex(index); } }; function AnimationPicker(){ this.initialize.apply(this, arguments); }; AnimationPicker.MAX_COL = 5; AnimationPicker.IMAGE_SCALE = 1/3; AnimationPicker.prototype = Object.create(ImagePickerBase.prototype); AnimationPicker.prototype.constructor = ImagePicker; AnimationPicker.prototype.initialize = function(){ ImagePickerBase.prototype.initialize.call(this); this._imageNames = parameters.animationNames; this._monoTone = false; this._maxItems = 0; this._imageSize = this.imageSize(); this._imageRows = 0; this._imageCols = 0; this._bitmap = null; var scale = this.imageScale(); var sprite = new Sprite(); this._imageSprite = sprite; this.addChild(sprite); sprite.scale.set(scale,scale); }; /* overwrite setting ===================================*/ AnimationPicker.prototype.maxItems = function(){ return this._maxItems; }; AnimationPicker.prototype.maxColumns = function(){ return AnimationPicker.MAX_COL; }; AnimationPicker.prototype.itemHeight = function(){ return this.imageSize()*this.imageScale(); }; AnimationPicker.prototype.itemWidth = function(){ return this.imageSize()*this.imageScale(); }; AnimationPicker.prototype.itemMarginX = function(){ return 0; }; AnimationPicker.prototype.itemMarginY = function(){ return 0; }; AnimationPicker.prototype.guideTexts = function(){ return [ '1つのアニメーション画像のみから選択可', '↑↓キー、マウスホイールでスクロール', '←→キー、画像切り替え', 'キーボードで頭1文字をサーチ可能', '決定キー、リスト外クリックで選択終了', '長押しクリックで複数<=>単体選択切り替え', 'Shiftでモノトーン切り替え', '(モノトーンはピッカー終了時に反映)' ]; }; AnimationPicker.prototype.imageName = function(){ var imageName = this._imageNames[this._categoryIndex]; var name = '' var indexes = this._selectingIndexes; var length = indexes.length; for(var i = 0; i0){ name += ','; } var index = indexes[i]; name +='ANIM:'+imageName+':'+index; if(this._monoTone){ name += ':M'; } } return name; }; AnimationPicker.prototype.headerText = function(){ var imageName = this._imageNames[this._categoryIndex]; var text = '【'+imageName+'】('+(this._categoryIndex+1)+'/'+this._imageNames.length+')'; return text; }; AnimationPicker.prototype.categoryType = function(){ return this._categoryIndex; }; AnimationPicker.prototype.maxCategories = function(){ return this._imageNames ? this._imageNames.length : 1; }; AnimationPicker.prototype.isCategoryValid = function(index){ return !!this._imageNames[index]; }; /* originalSetting ===================================*/ AnimationPicker.prototype.imageSize = function(){ return 192; }; AnimationPicker.prototype.imageScale = function(){ return AnimationPicker.IMAGE_SCALE; }; /* refresh ===================================*/ AnimationPicker.prototype.setListType = function(type){ ImagePickerBase.prototype.setListType.call(this,type); this._imageCols = 0; this._imageRows = 0; this._maxItems = 0; var bitmap = this.bitmap(); this._bitmap = bitmap; bitmap.addLoadListener(AnimationPicker.prototype._setListType.bind(this)); }; AnimationPicker.prototype._setListType = function(bitmap){ if(this._bitmap !== bitmap)return; var imageSize = this.imageSize(); var width = bitmap.width; var height = bitmap.height; var imageCols = Math.floor(width/imageSize); var imageRows = Math.floor(height/imageSize); this._imageCols = imageCols; this._imageRows = imageRows; var maxCol = this.maxColumns(); var validCols = Math.ceil(imageCols/maxCol)*maxCol; this._maxItems = validCols*imageRows; this._refresh(); }; AnimationPicker.prototype.refreshItems = function(){ var imageSize = this.imageSize(); var bitmap = this.bitmap(); var width = bitmap.width; var height = bitmap.height; var imageCols = Math.floor(width/imageSize); var imageRows = Math.floor(height/imageSize); var maxCol = this.maxColumns(); var margin = PickerBase.LAYOUT.marginTopBottom; var sprite = this._imageSprite; sprite.bitmap = bitmap; sprite._frame.width = maxCol*imageSize; sprite._refresh(); sprite.x = margin; sprite.y = margin; }; AnimationPicker.prototype.bitmap = function(){ var imageName = this._imageNames[this._categoryIndex]; return ImageManager.loadAnimation(imageName); }; /* start picking ===================================*/ AnimationPicker.prototype.startPicking = function(owner,imagestr){ var frames = []; if(imagestr){ var images = imagestr.split(','); var length = images.length; var index = -1; for(var i = 0; i=2; this.setSeveralMode(severalMode); for(var i = 0; i= cols){ row += rows; col -= cols; } var index = row*cols + col; this.setSelectingIndex(index); } }; /* search ===================================*/ AnimationPicker.prototype.search = function(chara){ var imageNames = this._imageNames; var length = imageNames.length; for(var i = 0; i0){ this.writeImageFiles(indexes); this.registerAnimationImageNames(imageName); } var owner = this._owner; PickerBase.prototype.end.call(this); if(owner && indexes.length>0){ owner.forceChangeImage(imageName); owner.writeHelpFile(); } }; AnimationPicker.prototype.registerAnimationImageNames = function(imageName){ var params = PluginManager._parameters.trp_particlelist; if(!params){ params = PluginManager._parameters.trp_particlelist = {}; } var animImages = params.animImages; if(!animImages){ animImages = params.animImages = []; } var imageNames = imageName.split(','); var length = imageNames.length; for(var i = 0; i