//============================================================================= // 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 //=============================================================================