Files
Superproject1/js/plugins/YEP_AnimateTilesOption.js
alexpolo1 3cfd07d722 2
2023-04-10 00:05:51 +02:00

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