ultimate-angel-zerachiel/www/js/plugins/GALV_LayerGraphics.js
2024-01-17 11:38:37 -06:00

785 lines
28 KiB
JavaScript

//-----------------------------------------------------------------------------
// Galv's Layer Graphics
//-----------------------------------------------------------------------------
// For: RPGMAKER MV
// GALV_LayerGraphics.js
//-----------------------------------------------------------------------------
// 2017-11-24 - Version 2.0 - added ability to set x,y anchor on static layer
// images & set a character target to follow
// 2016-06-15 - Version 1.9 - fixed compatibility issue in yanfly battle core
// 2016-05-02 - Version 1.8 - fixed a bug with battle layer crash
// 2016-04-27 - Version 1.7 - minor code changes
// 2016-04-16 - Version 1.6 - added static image command
// - added battle layers
// 2016-01-23 - Version 1.5 - implemented code for potential memory issue
// 2015-11-29 - Version 1.4 - added setting for tile size
// 2015-11-19 - Version 1.3 - fixed minor poor code
// 2015-11-11 - Version 1.2 - added Galv plugin command efficiency code
// 2015-11-06 - Version 1.1 - added ability to create layers via map notes
// 2015-10-30 - Version 1.0 - release
//-----------------------------------------------------------------------------
// Terms can be found at:
// galvs-scripts.com
//-----------------------------------------------------------------------------
var Imported = Imported || {};
Imported.Galv_LayerGraphics = true;
var Galv = Galv || {}; // Galv's main object
Galv.pCmd = Galv.pCmd || {}; // Plugin Command manager
Galv.LG = Galv.LG || {}; // Galv's stuff
//-----------------------------------------------------------------------------
/*:
* @plugindesc (v.2.0) Create graphic layers for parallax mapping, fog, etc. View the 'Help' document for plugin commands and info.
*
* @author Galv - galvs-scripts.com
*
* @param Tile Size
* @desc The width/height of your tiles if you changed it with another plugin.
* @default 48
*
* @help
* Galv's Layer Graphics
* ----------------------------------------------------------------------------
* Before you start, you will need to create a layers folder in your project.
* /img/layers/
* This is where all your layer images will be taken from.
*
* Each map can have many graphic layers, but be aware that the more you have,
* the more chance the game could lag (especially on slow computers or mobile
* devices).
*
* When a layer is made, it is stored, so you can set layers for maps before
* a player enters them. The layers are created when the map is created, so
* for layer commands created on the same map, 'REFRESH LAYERS' plugin command
* can be used to force the layers to create during play.
*
* Below are commands to be used in the "Plugin Command" event command.
* NOTE: This is different to the "Script" event command.
* ----------------------------------------------------------------------------
* Plugin Commands (Quick)
* ----------------------------------------------------------------------------
*
* LAYER MAPID ID GRAPHIC XSPEED YSPEED OPACITY Z XSHIFT YSHIFT BLEND
*
* LAYER_S MAPID ID GRAPHIC X Y OPACITY Z BLEND
*
* LAYER REMOVE MAPID ID
*
* LAYER REFRESH
*
* ----------------------------------------------------------------------------
* Plugin Commands (Detailed)
* ----------------------------------------------------------------------------
* To create or change a layer graphic, the following plugin command is used:
*
* LAYER MAPID ID GRAPHIC XSPEED YSPEED OPACITY Z XSHIFT YSHIFT BLEND
*
* Each property is separated by a space and you will exchange the property
* names above with values.
*
* EXPLANATION OF PROPERTIES:
* LAYER - do not change this, it is the keyword for the plugin.
* MAPID - the id of the map you are creating the layer for
* ID - the id of the layer itself. If you want to change or remove
* - an existing layer, you refer to it by it's id.
* GRAPHIC - The filename of the image found in /img/layers/
* XSPEED - The speed of the horizontal movement. Negatives to go left
* YSPEED - The speed of the vertical movement. Negatives to go up
* OPACITY - Transparency of the image (0 - 255)
* Z - What priority the image has. 0 = ground, 5 = above all chars
* XSHIFT - Horizonal movement shift that differs from player movement
* YSHIFT - Vertical movement shift that differs from player movement
* - Make XSHIFT and YSHIFT = 0 to move with map
* BLEND - Blend mode (0 = normal, 1 = add, 2 = multiply, 3 = screen)
* - *NOTE RPG Maker MV version 1.1 mutliply isn't supported
*
* Example:
* LAYER 12 1 clouds 1 0 155 5 0 0 0
* This will create/change layer 1 on map 12. It will make it use "clouds.png"
* as the image that will scroll right, be partially transparent and above all
*
* Using Variables
* You can use a variable for any property (except 'GRAPHIC') in the plugin
* if you put a "v" before the property. The number after will be variable id.
*
* Example:
* LAYER 12 1 clouds 1 0 v1 5 0 0 0
* This is the same example as above, but will use the value of variable 1
* for the opacity of the layer. This only changes the setting when called,
* changing the variable again without calling this plugin command again will
* not change the layer.
*
* ----------------------------------------------------------------------------
*
* Alternatively, a static sprite layer can be created. These layers will not
* tile/loop and are stuck to the map, better used for parallax mapping:
*
* LAYER_S MAPID ID GRAPHIC X Y OPACITY Z BLEND XANCHOR YANCHOR CHAR ROTATE
*
* Each property is separated by a space and you will exchange the property
* names above with values.
*
* EXPLANATION OF PROPERTIES:
* LAYER_S - do not change this, it is the keyword for the plugin.
* MAPID - the id of the map you are creating the layer for
* ID - the id of the layer itself. If you want to change or remove
* - an existing layer, you refer to it by it's id.
* GRAPHIC - The filename of the image found in /img/layers/
* X - The X position of the static layer image on the map.
* Y - The Y position of the static layer image on the map.
* OPACITY - Transparency of the image (0 - 255)
* Z - What priority the image has. 0 = ground, 5 = above all chars
* BLEND - Blend mode (0 = normal, 1 = add, 2 = multiply, 3 = screen)
* - *NOTE RPG Maker MV version 1.1 mutliply isn't supported
* XANCHOR - 0 left, 0.5 middle, 1 right - the part of the image that
* - is set to the X position porperty above.
* YANCHOR - 0 left, 0.5 middle, 1 right - the part of the image that
* - is set to the Y position porperty above.
* CHAR - 0 for none, -1 for player, above 0 for a specific event id
* ROTATE - 0 for no, 1 for yes, to rotate the sprite depending on the
* - direction the specified CHAR is facing. Default graphic
* - should be facing down. This doesn't work if no CHAR is set
*
*
*
* Example:
* LAYER_S 6 2 town 0 0 255 0 0
* This will create/change layer 2 on map 6. It will make it use "town.png"
* as the image that will stick with the map. The X and Y are 0's which will
* be common for most parallax mapping. Z is 0 to appear under the player.
*
* ----------------------------------------------------------------------------
*
* LAYER REMOVE MAPID ID - Remove a layer from a map
*
* Example:
* LAYER REMOVE 12 1 - Removes layer 1 from map 12
*
* ----------------------------------------------------------------------------
*
* LAYER REFRESH - For creating new layers on the same map as the
* - plugin command. Do this command if creating
* - NEW layers on the map. It is not required for
* - changing existing layers
*
* ----------------------------------------------------------------------------
*
* ----------------------------------------------------------------------------
* MAP NOTES
* ----------------------------------------------------------------------------
* In addition to using the plugin calls, you can setup layers on each map in
* the NOTE section of the map settings. Do this in the same way as the plugin
* call except do not add the map ID.
*
* LAYER ID GRAPHIC XSPEED YSPEED OPACITY Z XSHIFT YSHIFT BLEND
*
* LAYER_S ID GRAPHIC X Y OPACITY Z BLEND XANCHOR YANCHOR CHAR ROTATE
*
* These layers can be changed as normal with plugin commands.
* ----------------------------------------------------------------------------
*
* ----------------------------------------------------------------------------
* SCRIPT STUFF
* ----------------------------------------------------------------------------
* For advanced users only. Layer properties can be accessed via script:
* $gameMap.layerSettings[mapId][layerId].property
* "property" being the above properites in lowercase.
* ----------------------------------------------------------------------------
*
* ----------------------------------------------------------------------------
* SCRIPT CALL - BATTLE LAYERS
* ----------------------------------------------------------------------------
*
* Galv.LG.bLayer(id,'graphic',xspeed,yspeed,opacity,z,blend);
*
* Battle layers are controlled with this script call. They don't use the
* Plugin Command but the values are the same as the plugin commands above
* (without the map ID). Once set, battle layers last for every combat after
* until they are changed again.
*
* BATTLE Z LEVEL - works slightly different. Cannot use decimals.
* 0 - behind all
* 1 - between battleback 1 and 2
* 2 - over battlebacks but under characters
* 3 - over all characters
*
* To remove a layer simply use the same call with only the id.
* For example:
*
* Galv.LG.bLayer(id);
*
* ----------------------------------------------------------------------------
*/
//-----------------------------------------------------------------------------
// CODE STUFFS
//-----------------------------------------------------------------------------
(function () {
// LAYER GRAPHIC FOLDER
//-----------------------------------------------------------------------------
ImageManager.loadLayerGraphic = function (filename, hue) {
return this.loadBitmap("img/layers/", filename, hue, true);
};
// GALV'S PLUGIN MANAGEMENT. INCLUDED IN ALL GALV PLUGINS THAT HAVE PLUGIN COMMAND CALLS, BUT ONLY RUN ONCE.
if (!Galv.aliased) {
var Galv_Game_Interpreter_pluginCommand =
Game_Interpreter.prototype.pluginCommand;
Game_Interpreter.prototype.pluginCommand = function (command, args) {
if (Galv.pCmd[command]) {
Galv.pCmd[command](args);
return;
}
Galv_Game_Interpreter_pluginCommand.call(this, command, args);
};
Galv.aliased = true; // Don't keep aliasing for other Galv scripts.
}
// Direct to Plugin Object
Galv.pCmd.LAYER = function (arguments) {
Galv.LG.createLayer(arguments);
};
Galv.pCmd.LAYER_S = function (arguments) {
Galv.LG.createLayerS(arguments);
};
// END GALV'S PLUGIN MANAGEMENT
Galv.LG.tileSize = Number(
PluginManager.parameters("Galv_LayerGraphics")["Tile Size"]
);
// CREATE TILING LAYER
//-----------------------------------------------------------------------------
Galv.LG.createLayer = function (config) {
switch (config[0]) {
case "REFRESH":
// Recreate layer graphics
SceneManager._scene._spriteset.createLayerGraphics();
return;
case "REMOVE":
// Remove specified layer object
var mapid = Galv.LG.num(config[1]);
var id = Galv.LG.num(config[2]);
if (id) {
$gameMap.layerSettings[mapid][id] = {};
} else {
$gameMap.layerSettings[mapid] = {};
}
return;
}
// get variables
var mapid = Galv.LG.num(config[0]);
var id = Galv.LG.num(config[1]);
$gameMap.layerSettings[mapid] = $gameMap.layerSettings[mapid] || {};
$gameMap.layerSettings[mapid][id] = $gameMap.layerSettings[mapid][id] || {};
var x_exist = $gameMap.layerSettings[mapid][id].currentx || 0;
var y_exist = $gameMap.layerSettings[mapid][id].currenty || 0;
// create object
$gameMap.layerSettings[mapid][id] = {
graphic: config[2], // filename of the graphic in /img/layers/
xspeed: Galv.LG.num(config[3]), // speed the layer will scroll horizontally
yspeed: Galv.LG.num(config[4]), // speed the layer will scroll vertically
opacity: Galv.LG.num(config[5]), // the opacity of the layer
z: Galv.LG.num(config[6]), // what level the layer is displayed at (ground is 0)
xshift: Galv.LG.num(config[7]), // Moves the layer at a different x amount than the map (0 to not move)
yshift: Galv.LG.num(config[8]), // Moves the layer at a different y amount than the map (0 to not move)
blend: Galv.LG.num(config[9]), // Blend mode (0 = normal, 1 = add, 2 = multiply, 3 = screen)
currentx: x_exist, // origin x saved. Reset this on map change
currenty: y_exist, // origin y saved. Reset this on map change
};
};
// CREATE STATIC LAYER
//-----------------------------------------------------------------------------
Galv.LG.createLayerS = function (config) {
// get variables
var mapid = Galv.LG.num(config[0]);
var id = Galv.LG.num(config[1]);
$gameMap.layerSettings[mapid] = $gameMap.layerSettings[mapid] || {};
$gameMap.layerSettings[mapid][id] = $gameMap.layerSettings[mapid][id] || {};
// create object
$gameMap.layerSettings[mapid][id] = {
static: true, // determines static layer
graphic: config[2], // filename of the graphic in /img/layers/
x: Galv.LG.num(config[3]), // speed the layer will scroll horizontally
y: Galv.LG.num(config[4]), // speed the layer will scroll vertically
opacity: Galv.LG.num(config[5]), // the opacity of the layer
z: Galv.LG.num(config[6]), // what level the layer is displayed at (ground is 0)
blend: Galv.LG.num(config[7]), // Blend mode (0 = normal, 1 = add, 2 = multiply, 3 = screen)
xa: config[8] ? Galv.LG.num(config[8]) : 0, // xanchor (0-1)
ya: config[9] ? Galv.LG.num(config[9]) : 0, // yanchor (0-1)
character: config[10] ? Galv.LG.num(config[10]) : 0, // designated character to follow (-1 player, 0 none, >0 event id
rotate: config[11] ? Galv.LG.num(config[11]) : 0, // rotate? 0 for no, 1 for yes
};
};
// BATTLE LAYERS
//-----------------------------------------------------------------------------
Galv.LG.bLayer = function (id, graphic, xspeed, yspeed, opacity, z, blend) {
if (!graphic) {
if ($gameSystem._bLayers[id]) delete $gameSystem._bLayers[id];
return;
}
// create object
$gameSystem._bLayers[id] = {
graphic: graphic || "", // filename of the graphic in /img/layers/
xspeed: xspeed || 0, // speed the layer will scroll horizontally
yspeed: yspeed || 0, // speed the layer will scroll vertically
opacity: opacity || 0, // the opacity of the layer
z: z || 0, // what level the layer is displayed at (ground is 0)
blend: blend || 0, // Blend mode (0 = normal, 1 = add, 2 = multiply, 3 = screen)
xshift: 0,
yshift: 0,
currentx: 0,
currenty: 0,
};
};
// OTHER
//-----------------------------------------------------------------------------
Galv.LG.num = function (txt) {
if (txt[0] === "v") {
var varId = Number(txt.replace("v", ""));
return $gameVariables.value(varId);
} else {
return Number(txt);
}
};
Galv.LG.isEmpty = function (obj) {
return Object.keys(obj).length === 0;
};
// GAME SYSTEM - BATTLE LAYERS
//-----------------------------------------------------------------------------
Galv.LG.Game_System_initialize = Game_System.prototype.initialize;
Game_System.prototype.initialize = function () {
Galv.LG.Game_System_initialize.call(this);
this._bLayers = {}; // Store battle layers here.
};
// SPRITESET BATTLE
//-----------------------------------------------------------------------------
Galv.LG.Spriteset_Battle_createlowerlayer =
Spriteset_Battle.prototype.createLowerLayer;
Spriteset_Battle.prototype.createLowerLayer = function () {
Galv.LG.Spriteset_Battle_createlowerlayer.call(this);
for (var i = 0; i < this._battleField.children.length; i++) {
this._battleField.children[i].z = 2;
}
this.layerGraphics = this.layerGraphics || {};
this._back1Sprite.z = 0;
this._back2Sprite.z = 1;
this.createLayerGraphics();
};
Spriteset_Battle.prototype.createLayerGraphics = function () {
// Create Active Layers On Map
var blayers = $gameSystem._bLayers; // get object only for the map
for (var propertyId in blayers) {
// if layers sprite doesn't exist, make it.
if (!this.layerGraphics.hasOwnProperty(propertyId)) {
// Create Layer Sprite
if (blayers[propertyId]) {
this.layerGraphics[propertyId] = new Sprite_LayerGraphic(
propertyId,
true
);
this.layerGraphics[propertyId].move(
0,
0,
Graphics.width,
Graphics.height
);
}
}
// If settings are empty for the layer
if (
Galv.LG.isEmpty(blayers[propertyId]) ||
blayers[propertyId]["graphic"] == ""
) {
var ind = this._battleField.children.indexOf(
this.layerGraphics[propertyId]
);
this._battleField.removeChildAt(ind);
} else {
var z = Math.max(blayers[propertyId].z, 0); // min 0
var test = null;
var skip = 0;
switch (blayers[propertyId].z) {
case 0:
break;
case 1: // above first battleback
test = "TilingSprite";
break;
case 2: // above second battleback
test = "TilingSprite";
skip = 1;
break;
default:
z = this._battleField.children.length;
}
if (test) {
for (i = 0; i < this._battleField.children.length; i++) {
if (this._battleField.children[i].constructor.name == test) {
z = i + 1;
if (skip > 0) {
skip -= 1;
} else {
break;
}
}
}
}
// Get in bounds
z = Math.min(z, this._battleField.children.length);
this._battleField.addChildAt(this.layerGraphics[propertyId], z);
}
}
};
// SPRITESET MAP
//-----------------------------------------------------------------------------
Galv.LG.Spriteset_Map_createlowerlayer =
Spriteset_Map.prototype.createLowerLayer;
Spriteset_Map.prototype.createLowerLayer = function () {
Galv.LG.Spriteset_Map_createlowerlayer.call(this);
this.layerGraphics = this.layerGraphics || {};
this.createLayerGraphics();
};
Spriteset_Map.prototype.createLayerGraphics = function () {
// Create Active Layers On Map
var mapGraphics = $gameMap.layerConfig(); // get object only for the map
for (var id in mapGraphics) {
// if layers sprite doesn't exist, make it.
if (!this.layerGraphics[id] || !this.layerGraphics[id].id) {
// Create Layer Sprite
if (mapGraphics[id]) {
if (mapGraphics[id].static) {
// If layer created using LAYER_S
this.layerGraphics[id] = new Sprite_LayerGraphicS(id);
} else {
this.layerGraphics[id] = new Sprite_LayerGraphic(id);
this.layerGraphics[id].move(0, 0, Graphics.width, Graphics.height);
}
}
}
// If settings are empty for the layer
if (
Galv.LG.isEmpty(mapGraphics[id]) ||
mapGraphics[id]["graphic"] == ""
) {
var ind = this._tilemap.children.indexOf(this.layerGraphics[id]);
this._tilemap.removeChildAt(ind);
} else {
this._tilemap.addChild(this.layerGraphics[id]);
}
}
};
// GAME MAP - SETUP LAYER SETTINGS
//-----------------------------------------------------------------------------
Galv.LG.Game_Map_initialize = Game_Map.prototype.initialize;
Game_Map.prototype.initialize = function () {
Galv.LG.Game_Map_initialize.call(this);
this.layerSettings = {}; // Store ALL layers here.
};
Galv.LG.Game_Map_setup = Game_Map.prototype.setup;
Game_Map.prototype.setup = function (mapId) {
Galv.LG.Game_Map_setup.call(this, mapId);
this.layerSettings[mapId] = this.layerSettings[mapId] || {};
// Setup map notetag layers
this.createNoteLayers(mapId);
for (var obj in this.layerConfig()) {
obj.currentx = 0;
obj.currenty = 0;
}
};
Game_Map.prototype.createNoteLayers = function (mapId) {
// CREATE MAP CONFIG HERE
var txtArray = $dataMap.note.match(/[^\r\n]+/g);
if (!txtArray) return;
for (i = 0; i < txtArray.length; i++) {
if (txtArray[i].indexOf("LAYER ") >= 0) {
var config = (mapId + txtArray[i].replace("LAYER", "")).split(" ");
// If layer doesn't already exist, create it:
if (!this.layerSettings[mapId][Number(config[1])]) {
Galv.LG.createLayer(config);
}
}
if (txtArray[i].indexOf("LAYER_S ") >= 0) {
var config = (mapId + txtArray[i].replace("LAYER_S", "")).split(" ");
// If layer doesn't already exist, create it:
if (!this.layerSettings[mapId][Number(config[1])]) {
Galv.LG.createLayerS(config);
}
}
}
};
Game_Map.prototype.layerConfig = function () {
// Get object list from layerSettings
if (this.layerSettings[this.mapId()]) {
return this.layerSettings[this.mapId()];
} else {
this.layerSettings[this.mapId()] = {};
return this.layerSettings[this.mapId()];
}
};
// CREATE LAYER TILING SPRITE
//-----------------------------------------------------------------------------
function Sprite_LayerGraphic() {
this.initialize.apply(this, arguments);
}
Sprite_LayerGraphic.prototype = Object.create(TilingSprite.prototype);
Sprite_LayerGraphic.prototype.constructor = Sprite_LayerGraphic;
Sprite_LayerGraphic.prototype.initialize = function (id, battle) {
this.id = id;
if (battle) {
this.lValue = this.lBValue;
this.displayX = this.displayXBattle;
this.displayY = this.displayYBattle;
}
TilingSprite.prototype.initialize.call(this);
this.currentGraphic = "";
this.createBitmap();
this.update();
};
// TEMP CANVAS FIX FOR WHEN REFRESHING LAYERS ON MAP
Sprite_LayerGraphic.prototype.generateTilingTexture = function (arg) {
PIXI.TilingSprite.prototype.generateTilingTexture.call(this, arg);
// Purge from Pixi's Cache
if (this.tilingTexture && this.tilingTexture.canvasBuffer)
PIXI.Texture.removeTextureFromCache(
this.tilingTexture.canvasBuffer.canvas._pixiId
);
};
// - END - TEMP CANVAS FIX FOR WHEN REFRESHING LAYERS ON MAP
Sprite_LayerGraphic.prototype.createBitmap = function () {
if (Galv.LG.isEmpty(this.lValue())) {
this.bitmap = ImageManager.loadLayerGraphic("");
} else {
this.bitmap = ImageManager.loadLayerGraphic(this.lValue().graphic);
}
this.z = this.lValue().z;
};
Sprite_LayerGraphic.prototype.lValue = function () {
return $gameMap.layerConfig()[this.id];
};
Sprite_LayerGraphic.prototype.lBValue = function () {
return $gameSystem._bLayers[this.id];
};
// Update
Sprite_LayerGraphic.prototype.update = function () {
TilingSprite.prototype.update.call(this);
if (this.currentGraphic !== this.lValue().graphic) {
this.createBitmap();
this.currentGraphic = this.lValue().graphic;
}
this.updatePosition();
};
// Update Position
Sprite_LayerGraphic.prototype.updatePosition = function () {
this.z = this.lValue().z || 0;
this.opacity = this.lValue().opacity || 0;
this.blendMode = this.lValue().blend || 0;
this.origin.x =
0 +
this.displayX() * Galv.LG.tileSize +
this.lValue().currentx +
this.xOffset();
this.origin.y =
0 +
this.displayY() * Galv.LG.tileSize +
this.lValue().currenty +
this.yOffset();
this.lValue().currentx += this.lValue().xspeed;
this.lValue().currenty += this.lValue().yspeed;
};
Sprite_LayerGraphic.prototype.xOffset = function () {
return this.displayX() * this.lValue().xshift;
};
Sprite_LayerGraphic.prototype.yOffset = function () {
return this.displayY() * this.lValue().yshift;
};
Sprite_LayerGraphic.prototype.displayX = function () {
return $gameMap.displayX();
};
Sprite_LayerGraphic.prototype.displayY = function () {
return $gameMap.displayY();
};
Sprite_LayerGraphic.prototype.displayXBattle = function () {
return 0;
};
Sprite_LayerGraphic.prototype.displayYBattle = function () {
return 0;
};
// CREATE LAYER NORMAL SPRITE
//-----------------------------------------------------------------------------
function Sprite_LayerGraphicS(id) {
this.id = id;
this.initialize.apply(this, arguments);
}
Sprite_LayerGraphicS.prototype = Object.create(Sprite.prototype);
Sprite_LayerGraphicS.prototype.constructor = Sprite_LayerGraphicS;
Sprite_LayerGraphicS.prototype.initialize = function () {
Sprite.prototype.initialize.call(this);
this.currentGraphic = "";
this.createBitmap();
this.update();
//console.log(this.lValue());
};
Sprite_LayerGraphicS.prototype.createBitmap = function (val) {
var val = val || this.lValue();
if (Galv.LG.isEmpty($gameMap.layerConfig()[this.id])) {
this.bitmap = ImageManager.loadLayerGraphic("");
} else {
this.bitmap = ImageManager.loadLayerGraphic(val.graphic);
}
this.z = val.z;
};
Sprite_LayerGraphicS.prototype.lValue = function () {
return $gameMap.layerConfig()[this.id];
};
// Update
Sprite_LayerGraphicS.prototype.update = function () {
Sprite.prototype.update.call(this);
var val = this.lValue();
if (this.currentGraphic !== val.graphic) {
this.createBitmap(val);
this.currentGraphic = val.graphic;
}
this.updatePosition(val);
};
// Update Position
Sprite_LayerGraphicS.prototype.updatePosition = function (val) {
this.z = val.z || 0;
this.opacity = val.opacity || 0;
this.blendMode = val.blend || 0;
if (val.character) {
// get character object
var char =
val.character > 0 ? $gameMap.event(val.character) : $gamePlayer;
// set x,y to character's x,y
var center = Galv.LG.tileSize / 2;
var tx = char._realX * Galv.LG.tileSize + center;
var ty = char._realY * Galv.LG.tileSize + center;
this.x = tx - $gameMap.displayX() * Galv.LG.tileSize;
this.y = ty - $gameMap.displayY() * Galv.LG.tileSize;
// rotate
if (val.rotate) {
switch (char._direction) {
case 1:
this.rotation = 0.785398; // 45 degrees
break;
case 2:
this.rotation = 0; // 0 degrees
break;
case 3:
this.rotation = 5.49779; // 315 degrees
break;
case 4:
this.rotation = 1.5708; // 90 degrees
break;
case 6:
this.rotation = 4.71239; // 270 degrees
break;
case 7:
this.rotation = 2.35619; // 135 degrees
break;
case 8:
this.rotation = 3.14159; // 180 degrees
break;
case 9:
this.rotation = 3.92699; // 225 degrees
break;
}
} else {
this.rotation = 0;
}
} else {
this.x = val.x - $gameMap.displayX() * Galv.LG.tileSize;
this.y = val.y - $gameMap.displayY() * Galv.LG.tileSize;
this.rotation = 0;
}
this.anchor.x = val.xa;
this.anchor.y = val.ya;
};
// YANFLY FIX
if (Imported.YEP_BattleEngineCore) {
Galv.LG.Spriteset_Battle_battleFieldDepthCompare =
Spriteset_Battle.prototype.battleFieldDepthCompare;
Spriteset_Battle.prototype.battleFieldDepthCompare = function (a, b) {
if (a.tilePosition || b.tilePosition) {
if (a.z < b.z) return -1;
if (a.z > b.z) return 1;
return 0;
}
return Galv.LG.Spriteset_Battle_battleFieldDepthCompare.call(this, a, b);
};
}
})();