182 lines
6.9 KiB
JavaScript
182 lines
6.9 KiB
JavaScript
// (C) 2017 Triacontane
|
||
// http://opensource.org/licenses/mit-license.php
|
||
// [Blog] : https://triacontane.blogspot.jp/
|
||
// [Twitter]: https://twitter.com/triacontane/
|
||
// [GitHub] : https://github.com/triacontane/
|
||
/*:
|
||
* @plugindesc
|
||
* @author triacontane
|
||
*
|
||
* @help
|
||
* @noteParam PLM
|
||
* @noteRequire 1
|
||
* @noteDir img/parallaxes
|
||
* @noteType file
|
||
* @noteData events
|
||
*
|
||
* This plugin is released under the MIT License.
|
||
*/
|
||
/*:ja
|
||
* @plugindesc
|
||
* @author トリアコンタン
|
||
*
|
||
* @help
|
||
* @noteParam PLM
|
||
* @noteRequire 1
|
||
* @noteDir img/parallaxes
|
||
* @noteType file
|
||
* @noteData events
|
||
*
|
||
* 利用規約:
|
||
* 作者に無断で改変、再配布が可能で、利用形態(商用、18禁利用等)
|
||
* についても制限はありません。
|
||
* このプラグインはもうあなたのものです。
|
||
*/
|
||
(function() {
|
||
'use strict';
|
||
var metaTagPrefix = 'PLM';
|
||
var getMetaValue = function(object, name) {
|
||
var metaTagName = metaTagPrefix + name;
|
||
if (!object || !object.meta) {
|
||
return undefined;
|
||
}
|
||
return object.meta.hasOwnProperty(metaTagName) ? convertEscapeCharacters(object.meta[metaTagName]) : undefined;
|
||
};
|
||
var getMetaValues = function(object, names) {
|
||
for (var i = 0, n = names.length; i < n; i++) {
|
||
var value = getMetaValue(object, names[i]);
|
||
if (value !== undefined) return value;
|
||
}
|
||
return undefined;
|
||
};
|
||
var convertEscapeCharacters = function(text) {
|
||
if (isNotAString(text)) text = '';
|
||
var windowLayer = SceneManager._scene._windowLayer;
|
||
return windowLayer ? windowLayer.children[0].convertEscapeCharacters(text) : text;
|
||
};
|
||
var isNotAString = function(args) {
|
||
return String(args) !== args;
|
||
};
|
||
Game_Map.prototype.displayPixelX = function() {
|
||
return this.displayX() * this.tileWidth();
|
||
};
|
||
Game_Map.prototype.displayPixelY = function() {
|
||
return this.displayY() * this.tileHeight();
|
||
};
|
||
Game_CharacterBase.prototype.getMapLayerName = function() {
|
||
return this._mapLayerName;
|
||
};
|
||
Game_CharacterBase.prototype.isMapLayer = function() {
|
||
return !!this._mapLayerName;
|
||
};
|
||
var _Game_CharacterBase_isNearTheScreen = Game_CharacterBase.prototype.isNearTheScreen;
|
||
Game_CharacterBase.prototype.isNearTheScreen = function() {
|
||
return this.isMapLayer() || _Game_CharacterBase_isNearTheScreen.apply(this, arguments);
|
||
};
|
||
Game_CharacterBase.prototype.shiftPosition = function(x, y) {
|
||
this._additionalX = x;
|
||
this._additionalY = y;
|
||
};
|
||
Game_CharacterBase.prototype.existPage = function() {
|
||
return false;
|
||
};
|
||
var _Game_Event_initialize = Game_Event.prototype.initialize;
|
||
Game_Event.prototype.initialize = function(mapId, eventId) {
|
||
_Game_Event_initialize.apply(this, arguments);
|
||
this._mapLayerName = getMetaValue(this.getOriginalEvent(), '') || null;
|
||
if (this._mapLayerName) {
|
||
this.initBlendMode();
|
||
this.initOpacity();
|
||
}
|
||
};
|
||
Game_Event.prototype.initBlendMode = function() {
|
||
var blendMode = getMetaValues(this.getOriginalEvent(), ['_Blend', '合成']);
|
||
if (blendMode) {
|
||
this._blendMode = parseInt(blendMode);
|
||
}
|
||
};
|
||
Game_Event.prototype.initOpacity = function() {
|
||
var blendMode = getMetaValues(this.getOriginalEvent(), ['_Opacity', '不透明度']);
|
||
if (blendMode) {
|
||
this._opacity = parseInt(blendMode);
|
||
}
|
||
};
|
||
Game_Event.prototype.getOriginalEvent = function() {
|
||
return $dataMap.events[this._eventId];
|
||
};
|
||
Game_Event.prototype.existPage = function() {
|
||
return this._pageIndex >= 0;
|
||
};
|
||
Game_Event.prototype.getLayerX = function() {
|
||
return (this._additionalX || 0) - Math.round($gameMap.displayPixelX());
|
||
};
|
||
Game_Event.prototype.getLayerY = function() {
|
||
return (this._additionalY || 0) - Math.round($gameMap.displayPixelY());
|
||
};
|
||
var _Spriteset_Map_createCharacters = Spriteset_Map.prototype.createCharacters;
|
||
Spriteset_Map.prototype.createCharacters = function() {
|
||
_Spriteset_Map_createCharacters.apply(this, arguments);
|
||
var layerSprites = this._characterSprites.filter(function(sprite) {
|
||
return sprite.isLayer && sprite.isLayer();
|
||
});
|
||
layerSprites.forEach(function(oldSprite) {
|
||
this.replaceLayerSprite(oldSprite);
|
||
}, this);
|
||
};
|
||
Spriteset_Map.prototype.replaceLayerSprite = function(oldSprite) {
|
||
var deleteIndex = this._characterSprites.indexOf(oldSprite);
|
||
if (deleteIndex >= 0) {
|
||
this._characterSprites.splice(deleteIndex, 1);
|
||
}
|
||
this._tilemap.removeChild(oldSprite);
|
||
var newSprite = new Sprite_MapLayer(oldSprite.getCharacter());
|
||
this._tilemap.addChild(newSprite);
|
||
};
|
||
var _Sprite_Character_character = Sprite_Character.prototype.setCharacter;
|
||
Sprite_Character.prototype.setCharacter = function(character) {
|
||
_Sprite_Character_character.apply(this, arguments);
|
||
this._layerName = character.getMapLayerName();
|
||
};
|
||
Sprite_Character.prototype.getCharacter = function() {
|
||
return this._character;
|
||
};
|
||
Sprite_Character.prototype.isLayer = function() {
|
||
return !!this._layerName;
|
||
};
|
||
function Sprite_MapLayer() {
|
||
this.initialize.apply(this, arguments);
|
||
}
|
||
Sprite_MapLayer.prototype = Object.create(Sprite_Character.prototype);
|
||
Sprite_MapLayer.prototype.constructor = Sprite_MapLayer;
|
||
Sprite_MapLayer.prototype.setCharacter = function(character) {
|
||
Sprite_Character.prototype.setCharacter.apply(this, arguments);
|
||
this.loadLayerBitmap();
|
||
};
|
||
Sprite_MapLayer.prototype.initMembers = function() {
|
||
Sprite_Character.prototype.initMembers.apply(this, arguments);
|
||
this.anchor.x = 0;
|
||
this.anchor.y = 0;
|
||
};
|
||
Sprite_MapLayer.prototype.loadLayerBitmap = function() {
|
||
this.bitmap = ImageManager.loadParallax(this._layerName, 0);
|
||
};
|
||
Sprite_MapLayer.prototype.updateVisibility = function() {
|
||
Sprite_Character.prototype.updateVisibility.apply(this, arguments);
|
||
if (!this._character.existPage()) {
|
||
this.visible = false;
|
||
}
|
||
};
|
||
Sprite_MapLayer.prototype.updatePosition = function() {
|
||
this.x = this._character.getLayerX();
|
||
this.y = this._character.getLayerY();
|
||
this.z = this._character.screenZ();
|
||
if (typeof Imported !== 'undefined' && Imported.MOG_ChronoEngine) {
|
||
this.z += 1;
|
||
}
|
||
};
|
||
Sprite_MapLayer.prototype.updateBitmap = function() {
|
||
this._characterName = '';
|
||
};
|
||
Sprite_MapLayer.prototype.updateFrame = function() {
|
||
};
|
||
})();
|