309 lines
9.6 KiB
JavaScript
309 lines
9.6 KiB
JavaScript
//=============================================================================
|
|
// Yanfly Engine Plugins - Animate Tiles Option
|
|
// YEP_AnimateTilesOption.js
|
|
//=============================================================================
|
|
|
|
var Imported = Imported || {};
|
|
Imported.YEP_StaticTilesOption = true;
|
|
|
|
var Yanfly = Yanfly || {};
|
|
Yanfly.AniTile = Yanfly.AniTile || {};
|
|
Yanfly.AniTile.version = 1.03;
|
|
|
|
//=============================================================================
|
|
/*:
|
|
* @plugindesc v1.03 Because some computers and devices lag with animated
|
|
* tiles on the map, an option is added to disable them.
|
|
* @author Yanfly Engine Plugins
|
|
*
|
|
* @param Command Name
|
|
* @desc The name that appears in the options menu.
|
|
* @default Animated Tiles
|
|
*
|
|
* @param Default Setting
|
|
* @type combo
|
|
* @option true
|
|
* @option false
|
|
* @option auto
|
|
* @desc Default setting for this option.
|
|
* ON - true OFF - false AUTO - auto
|
|
* @default auto
|
|
*
|
|
* @help
|
|
* ============================================================================
|
|
* Introduction
|
|
* ============================================================================
|
|
*
|
|
* Some players may experience lag when walking near animated tiles. This is
|
|
* due to the fact that animated tiles constantly draw, delete, and redraw the
|
|
* tiles every few frames. Unfortunately, due to Pixi2's drawing method, there
|
|
* exists some memory leaks when this kind of drawing occurs. On mobile devices
|
|
* or weak computers with little memory to spare, this can potentially cause
|
|
* some games to crash. The option to enable/disable animated tiles is now in
|
|
* the options menu for players to toggle.
|
|
*
|
|
* For those who decide to make the default settings for the plugin to 'auto',
|
|
* any player who is playing on mobile or browser will default to having the
|
|
* setting off while local players will have the setting default to on.
|
|
*
|
|
* ============================================================================
|
|
* Options Core Settings - Adding the New Options
|
|
* ============================================================================
|
|
*
|
|
* If you are using YEP_OptionsCore.js, you can add a new Option using this
|
|
* plugin. Here's the following code/parameter settings you can use with it.
|
|
*
|
|
* ---------
|
|
* Settings:
|
|
* ---------
|
|
*
|
|
* Name:
|
|
* \i[302]Animated Tiles
|
|
*
|
|
* Help Description:
|
|
* Turns animated tiles ON or OFF.
|
|
*
|
|
* Symbol:
|
|
* animateTiles
|
|
*
|
|
* Show/Hide:
|
|
* show = Imported.YEP_StaticTilesOption;
|
|
*
|
|
* Enable:
|
|
* enabled = true;
|
|
*
|
|
* Ext:
|
|
* ext = 0;
|
|
*
|
|
* ----------
|
|
* Functions:
|
|
* ----------
|
|
*
|
|
* Make Option Code:
|
|
* this.addCommand(name, symbol, enabled, ext);
|
|
*
|
|
* Draw Option Code:
|
|
* var rect = this.itemRectForText(index);
|
|
* var statusWidth = this.statusWidth();
|
|
* var titleWidth = rect.width - statusWidth;
|
|
* this.resetTextColor();
|
|
* this.changePaintOpacity(this.isCommandEnabled(index));
|
|
* this.drawOptionsName(index);
|
|
* this.drawOptionsOnOff(index);
|
|
*
|
|
* Process OK Code:
|
|
* var index = this.index();
|
|
* var symbol = this.commandSymbol(index);
|
|
* var value = this.getConfigValue(symbol);
|
|
* this.changeValue(symbol, !value);
|
|
*
|
|
* Cursor Right Code:
|
|
* var index = this.index();
|
|
* var symbol = this.commandSymbol(index);
|
|
* var value = this.getConfigValue(symbol);
|
|
* this.changeValue(symbol, true);
|
|
*
|
|
* Cursor Left Code:
|
|
* var index = this.index();
|
|
* var symbol = this.commandSymbol(index);
|
|
* var value = this.getConfigValue(symbol);
|
|
* this.changeValue(symbol, false);
|
|
*
|
|
* Default Config Code:
|
|
* // Empty. Provided by this plugin.
|
|
*
|
|
* Save Config Code:
|
|
* // Empty. Provided by this plugin.
|
|
*
|
|
* Load Config Code:
|
|
* // Empty. Provided by this plugin.
|
|
*
|
|
* ============================================================================
|
|
* Changelog
|
|
* ============================================================================
|
|
*
|
|
* Version 1.03:
|
|
* - Compatibility update with YEP_OptionsCore.js.
|
|
*
|
|
* Version 1.02:
|
|
* - Updated for RPG Maker MV version 1.5.0.
|
|
*
|
|
* Version 1.01:
|
|
* - Updated for RPG Maker MV version 1.3.0.
|
|
*
|
|
* Version 1.00:
|
|
* - Finished Plugin!
|
|
*/
|
|
//=============================================================================
|
|
|
|
//=============================================================================
|
|
// Parameter Variables
|
|
//=============================================================================
|
|
|
|
Yanfly.Parameters = PluginManager.parameters('YEP_AnimateTilesOption');
|
|
Yanfly.Param = Yanfly.Param || {};
|
|
|
|
Yanfly.Param.STOCommandName = String(Yanfly.Parameters['Command Name']);
|
|
Yanfly.Param.STODefault = String(Yanfly.Parameters['Default Setting']);
|
|
|
|
//=============================================================================
|
|
// ConfigManager
|
|
//=============================================================================
|
|
|
|
Yanfly.getDefaultAnimateTilesOption = function() {
|
|
if (Yanfly.Param.STODefault.match(/true/i)) {
|
|
return true;
|
|
} else if (Yanfly.Param.STODefault.match(/false/i)) {
|
|
return false;
|
|
} else {
|
|
return Utils.isNwjs();
|
|
}
|
|
};
|
|
|
|
ConfigManager.animateTiles = Yanfly.getDefaultAnimateTilesOption();
|
|
|
|
Yanfly.AniTile.ConfigManager_makeData = ConfigManager.makeData;
|
|
ConfigManager.makeData = function() {
|
|
var config = Yanfly.AniTile.ConfigManager_makeData.call(this);
|
|
config.animateTiles = this.animateTiles;
|
|
return config;
|
|
};
|
|
|
|
Yanfly.AniTile.ConfigManager_applyData = ConfigManager.applyData;
|
|
ConfigManager.applyData = function(config) {
|
|
Yanfly.AniTile.ConfigManager_applyData.call(this, config);
|
|
this.animateTiles = this.readConfigAnimateTiles(config, 'animateTiles');
|
|
};
|
|
|
|
ConfigManager.readConfigAnimateTiles = function(config, name) {
|
|
var value = config[name];
|
|
if (value !== undefined) {
|
|
return value;
|
|
} else {
|
|
return Yanfly.getDefaultAnimateTilesOption();
|
|
}
|
|
};
|
|
|
|
//=============================================================================
|
|
// Tilemap
|
|
//=============================================================================
|
|
|
|
if (Utils.RPGMAKER_VERSION && Utils.RPGMAKER_VERSION >= '1.3.0') {
|
|
|
|
Yanfly.AniTile.Tilemap_update = Tilemap.prototype.update;
|
|
Tilemap.prototype.update = function() {
|
|
Yanfly.AniTile.Tilemap_update.call(this);
|
|
if (!ConfigManager.animateTiles) {
|
|
this.animationFrame = 0;
|
|
};
|
|
};
|
|
|
|
} else {
|
|
|
|
Tilemap.prototype._paintTiles = function(startX, startY, x, y) {
|
|
var tableEdgeVirtualId = 10000;
|
|
var mx = startX + x;
|
|
var my = startY + y;
|
|
var dx = (mx * this._tileWidth).mod(this._layerWidth);
|
|
var dy = (my * this._tileHeight).mod(this._layerHeight);
|
|
var lx = dx / this._tileWidth;
|
|
var ly = dy / this._tileHeight;
|
|
var tileId0 = this._readMapData(mx, my, 0);
|
|
var tileId1 = this._readMapData(mx, my, 1);
|
|
var tileId2 = this._readMapData(mx, my, 2);
|
|
var tileId3 = this._readMapData(mx, my, 3);
|
|
var shadowBits = this._readMapData(mx, my, 4);
|
|
var upperTileId1 = this._readMapData(mx, my - 1, 1);
|
|
var lowerTiles = [];
|
|
var upperTiles = [];
|
|
|
|
if (this._isHigherTile(tileId0)) {
|
|
upperTiles.push(tileId0);
|
|
} else {
|
|
lowerTiles.push(tileId0);
|
|
}
|
|
if (this._isHigherTile(tileId1)) {
|
|
upperTiles.push(tileId1);
|
|
} else {
|
|
lowerTiles.push(tileId1);
|
|
}
|
|
|
|
lowerTiles.push(-shadowBits);
|
|
|
|
if (this._isTableTile(upperTileId1) && !this._isTableTile(tileId1)) {
|
|
if (!Tilemap.isShadowingTile(tileId0)) {
|
|
lowerTiles.push(tableEdgeVirtualId + upperTileId1);
|
|
}
|
|
}
|
|
|
|
if (this._isOverpassPosition(mx, my)) {
|
|
upperTiles.push(tileId2);
|
|
upperTiles.push(tileId3);
|
|
} else {
|
|
if (this._isHigherTile(tileId2)) {
|
|
upperTiles.push(tileId2);
|
|
} else {
|
|
lowerTiles.push(tileId2);
|
|
}
|
|
if (this._isHigherTile(tileId3)) {
|
|
upperTiles.push(tileId3);
|
|
} else {
|
|
lowerTiles.push(tileId3);
|
|
}
|
|
}
|
|
|
|
if (ConfigManager.animateTiles) {
|
|
var count = 1000 + this.animationCount - my;
|
|
var frameUpdated = (count % 30 === 0);
|
|
this._animationFrame = Math.floor(count / 30);
|
|
} else {
|
|
var frameUpdated = false;
|
|
this._animationFrame = 0;
|
|
}
|
|
|
|
var lastLowerTiles = this._readLastTiles(0, lx, ly);
|
|
if (!lowerTiles.equals(lastLowerTiles) ||
|
|
(Tilemap.isTileA1(tileId0) && frameUpdated)) {
|
|
this._lowerBitmap.clearRect(dx, dy, this._tileWidth, this._tileHeight);
|
|
for (var i = 0; i < lowerTiles.length; i++) {
|
|
var lowerTileId = lowerTiles[i];
|
|
if (lowerTileId < 0) {
|
|
this._drawShadow(this._lowerBitmap, shadowBits, dx, dy);
|
|
} else if (lowerTileId >= tableEdgeVirtualId) {
|
|
this._drawTableEdge(this._lowerBitmap, upperTileId1, dx, dy);
|
|
} else {
|
|
this._drawTile(this._lowerBitmap, lowerTileId, dx, dy);
|
|
}
|
|
}
|
|
this._writeLastTiles(0, lx, ly, lowerTiles);
|
|
}
|
|
|
|
var lastUpperTiles = this._readLastTiles(1, lx, ly);
|
|
if (!upperTiles.equals(lastUpperTiles)) {
|
|
this._upperBitmap.clearRect(dx, dy, this._tileWidth, this._tileHeight);
|
|
for (var j = 0; j < upperTiles.length; j++) {
|
|
this._drawTile(this._upperBitmap, upperTiles[j], dx, dy);
|
|
}
|
|
this._writeLastTiles(1, lx, ly, upperTiles);
|
|
}
|
|
};
|
|
|
|
} //(Utils.RPGMAKER_VERSION && Utils.RPGMAKER_VERSION >= '1.3.0')
|
|
|
|
//=============================================================================
|
|
// Window_Options
|
|
//=============================================================================
|
|
|
|
Yanfly.AniTile.Window_Options_addGeneralOptions =
|
|
Window_Options.prototype.addGeneralOptions;
|
|
Window_Options.prototype.addGeneralOptions = function() {
|
|
Yanfly.AniTile.Window_Options_addGeneralOptions.call(this);
|
|
if (!Imported.YEP_OptionsCore) {
|
|
this.addCommand(Yanfly.Param.STOCommandName, 'animateTiles');
|
|
}
|
|
};
|
|
|
|
//=============================================================================
|
|
// End of File
|
|
//=============================================================================
|