210 lines
7.1 KiB
JavaScript
210 lines
7.1 KiB
JavaScript
// BMSP_MapFog.js (マップフォグ)
|
|
/*:
|
|
* @plugindesc
|
|
* @author gentlawk
|
|
* @website http://blueredzone.com
|
|
* @url https://github.com/gentlawk/BMSP_MV
|
|
* @license
|
|
* Copyright(c) 2015 BlueRedZone, gentlawk
|
|
* Released under the MIT license
|
|
* https://github.com/gentlawk/BMSP_MV/blob/master/LICENSE
|
|
*
|
|
* @version 1.03
|
|
*
|
|
* @param Label
|
|
* @desc マップフォグメモのラベルです。
|
|
* @default フォグ
|
|
*
|
|
* @help
|
|
*/
|
|
(function() {
|
|
/*
|
|
* プラグインバージョン
|
|
*/
|
|
PluginManager.setVersion('JsScript16Set', 1.03);
|
|
/*
|
|
* 必須プラグインチェック
|
|
*/
|
|
var _Scene_Boot_start = Scene_Boot.prototype.start;
|
|
Scene_Boot.prototype.start = function () {
|
|
BMSP.requirePlugin('JsScript15Set', 1.00);
|
|
_Scene_Boot_start.call(this);
|
|
};
|
|
/*
|
|
* プラグインコマンド
|
|
*/
|
|
var _Game_Interpreter_pluginCommand =
|
|
Game_Interpreter.prototype.pluginCommand;
|
|
Game_Interpreter.prototype.pluginCommand = function(command, args) {
|
|
_Game_Interpreter_pluginCommand.call(this, command, args);
|
|
if (command === 'MapFog') {
|
|
$gameMap.setFogParameter(args[1], Number(args[0]), args[2]);
|
|
}
|
|
};
|
|
/*
|
|
* MapFog
|
|
*/
|
|
BMSP.MapFog = function() {
|
|
throw new Error('This is a static class');
|
|
};
|
|
var parameters = PluginManager.parameters('JsScript16Set');
|
|
BMSP.MapFog._label = parameters['Label'];
|
|
BMSP.MapFog._cache_settings = {};
|
|
BMSP.MapFog.getSettings = function(map) {
|
|
var objectId = BMSP.getObjectId(map);
|
|
if(objectId in this._cache_settings){
|
|
return this._cache_settings[objectId];
|
|
}
|
|
var index = 1;
|
|
var settings = {};
|
|
while((this._label + index) in map.meta){
|
|
settings[index] = map.meta[this._label + index].split(',');
|
|
index++;
|
|
}
|
|
this._cache_settings[objectId] = settings;
|
|
return settings;
|
|
};
|
|
BMSP.MapFog.getSprite = function(index) {
|
|
if(!SceneManager._scene || SceneManager._scene.constructor !== Scene_Map) {
|
|
return null;
|
|
}
|
|
var fogData = SceneManager._scene._spriteset._fogData;
|
|
for(var i in fogData) {
|
|
var data = fogData[i];
|
|
if(data.index == index) return data.sprite;
|
|
}
|
|
return null;
|
|
};
|
|
/*
|
|
* ImageManager
|
|
*/
|
|
ImageManager.loadFog = function(filename, hue) {
|
|
return this.loadBitmap('img/fogs/', filename, hue, true);
|
|
};
|
|
var _Game_Map_setup = Game_Map.prototype.setup;
|
|
Game_Map.prototype.setup = function(mapId) {
|
|
_Game_Map_setup.call(this, mapId);
|
|
this.setupFogs();
|
|
};
|
|
Game_Map.prototype.setupFogs = function() {
|
|
this._fogs = {};
|
|
var settings = BMSP.MapFog.getSettings($dataMap);
|
|
for(var index in settings) {
|
|
var setting = settings[index];
|
|
var cond = (setting[6] || '').split(':');
|
|
var visible = true;
|
|
if(cond[0] !== '') {
|
|
visible = cond.every(function(id) {
|
|
return $gameSwitches.value(id);
|
|
});
|
|
}
|
|
this._fogs[index] = {
|
|
name: setting[0] || '',
|
|
sx: Number(setting[1] || 0),
|
|
sy: Number(setting[2] || 0),
|
|
opacity: Number(setting[3] || 255),
|
|
z: Number(setting[4] || 1),
|
|
blend: Number(setting[5] || 1),
|
|
visible: visible,
|
|
x: 0,
|
|
y: 0,
|
|
}
|
|
}
|
|
};
|
|
Game_Map.prototype.fogs = function() {
|
|
return this._fogs;
|
|
}
|
|
var _Game_Map_update = Game_Map.prototype.update;
|
|
Game_Map.prototype.update = function(sceneActive) {
|
|
_Game_Map_update.call(this, sceneActive);
|
|
this.updateFogs();
|
|
};
|
|
Game_Map.prototype.updateFogs = function() {
|
|
for(var index in this._fogs) {
|
|
this._fogs[index].x += this._fogs[index].sx;
|
|
this._fogs[index].y += this._fogs[index].sy;
|
|
}
|
|
};
|
|
Game_Map.prototype.setFogParameter = function(name, index, value) {
|
|
if(!(index in this._fogs)) return;
|
|
if(value === undefined) return;
|
|
var fog = this._fogs[index];
|
|
switch(name) {
|
|
case 'name':
|
|
fog[name] = value;
|
|
break;
|
|
case 'sx':
|
|
case 'sy':
|
|
case 'opacity':
|
|
case 'blend':
|
|
fog[name] = Number(value);
|
|
break;
|
|
case 'visible':
|
|
fog[name] = Boolean(Number(value));
|
|
break;
|
|
}
|
|
};
|
|
/*
|
|
* Spriteset_Map
|
|
*/
|
|
var _Spriteset_Map_initialize = Spriteset_Map.prototype.initialize;
|
|
Spriteset_Map.prototype.initialize = function() {
|
|
this._fogContainer = [];
|
|
this._fogData = [];
|
|
_Spriteset_Map_initialize.call(this);
|
|
};
|
|
var _Spriteset_Map_createParallax = Spriteset_Map.prototype.createParallax;
|
|
Spriteset_Map.prototype.createParallax = function() {
|
|
_Spriteset_Map_createParallax.call(this);
|
|
this.createFogs(0);
|
|
};
|
|
var _Spriteset_Map_createPictures = Spriteset_Map.prototype.createPictures;
|
|
Spriteset_Map.prototype.createPictures = function() {
|
|
this.createFogs(1);
|
|
_Spriteset_Map_createPictures.call(this);
|
|
this.createFogs(2);
|
|
};
|
|
var _Spriteset_Map_update = Spriteset_Map.prototype.update;
|
|
Spriteset_Map.prototype.update = function() {
|
|
_Spriteset_Map_update.call(this);
|
|
this.updateFogs();
|
|
};
|
|
Spriteset_Map.prototype.createFogs = function(z) {
|
|
this._fogContainer[z] = new Sprite();
|
|
var fogs = $gameMap.fogs();
|
|
for(var index in fogs) {
|
|
if(fogs[index].z !== z) continue;
|
|
var fogSprite = new TilingSprite();
|
|
fogSprite.move(0, 0, Graphics.width, Graphics.height);
|
|
this._fogContainer[z].addChild(fogSprite);
|
|
this._fogData.push({
|
|
index: index,
|
|
sprite: fogSprite,
|
|
name: null,
|
|
});
|
|
}
|
|
if(z === 2) {
|
|
this.addChild(this._fogContainer[z]);
|
|
} else {
|
|
this._baseSprite.addChild(this._fogContainer[z]);
|
|
}
|
|
};
|
|
Spriteset_Map.prototype.updateFogs = function() {
|
|
var fogs = $gameMap.fogs();
|
|
this._fogData.forEach(function(data) {
|
|
var fog = fogs[data.index];
|
|
var sprite = data.sprite;
|
|
if(data.name !== fog.name) {
|
|
data.name = fog.name;
|
|
sprite.bitmap = ImageManager.loadFog(data.name);
|
|
}
|
|
if(sprite.bitmap) {
|
|
sprite.origin.x = fog.x;
|
|
sprite.origin.y = fog.y;
|
|
sprite.opacity = fog.opacity;
|
|
sprite.visible = fog.visible;
|
|
sprite.blendMode = fog.blend;
|
|
}
|
|
}, this);
|
|
};
|
|
})();
|