princess-synergy/www/js/plugins/JsScript16Set.js
2026-02-05 14:03:22 -06:00

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);
};
})();