You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
ycrpg/js/plugins/MOG_ATB_Gauge.js

491 lines
15 KiB
JavaScript

3 years ago
//=============================================================================
// MOG_ATB_Gauge.js
//=============================================================================
/*:
* @plugindesc (v1.0) Apresenta a Hud de ATB para MOG_ATB.
* @author Moghunter
*
* @param Hud Angle
* @desc Definição do ângulo da hud.
* @default 0
*
* @param Hud X-Axis
* @desc Definição X-Axis da hud.
* @default 740
*
* @param Hud Y-Axis
* @desc Definição Y-Axis da hud.
* @default 45
*
* @param Enemy X-Axis Offset
* @desc Definição X-Axis offset do ícone dos inimigos.
* @default 16
*
* @param Actor X-Axis Offset
* @desc Definição X-Axis offset do ícone dos aliados.
* @default -16
*
* @param Active X-Axis
* @desc Definição X-Axis quando o battler está em turno.
* @default -3
*
* @param Active Y-Axis
* @desc Definição Y-Axis quando o battler está em turno.
* @default 30
*
* @param Gauge Size
* @desc Definição do tamanho do medidor.
* @default 160
*
* @param Skill Visible
* @desc Apresentar o Ícone de habilidade.
* @default true
*
* @param Skill Zoom
* @desc Definição do zoom do ícone de habilidade.
* @default 0.6
*
* @param Skill X-Axis
* @desc Definição X-Axis do ícone de habilidade.
* @default 0
*
* @param Skill Y-Axis
* @desc Definição Y-Axis do ícone de habilidade.
* @default 0
*
* @help
* =============================================================================
* +++ MOG - ATB Gauge (v1.0) +++
* By Moghunter
* https://mogplugins.wordpress.com
* =============================================================================
* Apresenta a Hud de ATB para MOG_ATB.
*
* =============================================================================
* IMAGES
* =============================================================================
* As imagens deverão ser gravadas na pasta (img/atb/)
* Para nomear o ícones dos battlers, nomeie da seguinte forma.
*
* Actor_ + ACTOR_ID.png
* Enemy_ + ACTOR_ID.png
*
* Ex
*
* Actor_1.png
* Actor_2.png
* ...
* Enemy_1.png
* Enemy_2.png
* ...
*/
//=============================================================================
// ** PLUGIN PARAMETERS
//=============================================================================
  var Imported = Imported || {};
  Imported.MOG_ATB_Gauge = true;
  var Moghunter = Moghunter || {};
Moghunter.parameters = PluginManager.parameters('MOG_ATB_Gauge');
Moghunter.atbIconAngle = Number(Moghunter.parameters['Hud Angle'] || 0);
Moghunter.atbIcon_GaugeX = Number(Moghunter.parameters['Hud X-Axis'] || 740);
Moghunter.atbIcon_GaugeY = Number(Moghunter.parameters['Hud Y-Axis'] || 45);
Moghunter.atbIcon_enemyX = Number(Moghunter.parameters['Enemy X-Axis Offset'] || 16);
Moghunter.atbIcon_actorX = Number(Moghunter.parameters['Actor X-Axis Offset'] || -16);
Moghunter.atbIcon_inTurnX = Number(Moghunter.parameters['Active X-Axis'] || -3);
Moghunter.atbIcon_inTurnY = Number(Moghunter.parameters['Active Y-Axis'] || 30);
Moghunter.atbIcon_GaugeSize = Number(Moghunter.parameters['Gauge Size'] || 160);
Moghunter.atbIcon_SkillVisible = String(Moghunter.parameters['Skill Visible'] || 'true');
Moghunter.atbIcon_SkillScale = Number(Moghunter.parameters['Skill Zoom'] || 0.6);
Moghunter.atbIcon_SkillX = Number(Moghunter.parameters['Skill X-Axis'] || 0);
Moghunter.atbIcon_SkillY = Number(Moghunter.parameters['Skill Y-Axis'] || 0);
//==============================
// * load ATB Icon
//==============================
ImageManager.loadATBIcon = function(filename) {
return this.loadBitmap('img/atb/', filename, 0, true);
};
//=============================================================================
// ** Game Temp
//=============================================================================
//==============================
// * Initialize
//==============================
var _mog_atb_gTemp_initialize = Game_Temp.prototype.initialize
Game_Temp.prototype.initialize = function() {
_mog_atb_gTemp_initialize.call(this);
this._refreshATBGauge = false;;
};
//=============================================================================
// ** Scene Base
//=============================================================================
//==============================
// ** create Hud Field
//==============================
Scene_Base.prototype.createHudField = function() {
this._hudField = new Sprite();
this._hudField.z = 10;
this.addChild(this._hudField);
};
//==============================
// ** sort MZ
//==============================
Scene_Base.prototype.sortMz = function() {
this._hudField.children.sort(function(a, b){return a.mz-b.mz});
};
//=============================================================================
// ** Scene Battle
//=============================================================================
//==============================
// ** create Spriteset
//==============================
var _mog_atbGauge_sbattle_createSpriteset = Scene_Battle.prototype.createSpriteset;
Scene_Battle.prototype.createSpriteset = function() {
_mog_atbGauge_sbattle_createSpriteset.call(this);
if (!this._hudField) {this.createHudField()};
this.createATBGauge();
this.sortMz();
};
//==============================
// ** create ATB Gauge
//==============================
Scene_Battle.prototype.createATBGauge = function() {
this._atbGauge = new ATB_Gauge()
this._atbGauge.mz = 125;
this._hudField.addChild(this._atbGauge);
};
//==============================
// ** remove ATB Gauge
//==============================
Scene_Battle.prototype.removeATBGauge = function() {
if (!this._atbGauge) {return};
this._hudField.removeChild(this._atbGauge);
};
//==============================
// ** refresh ATB Gauge
//==============================
Scene_Battle.prototype.refreshATBGauge = function() {
$gameTemp._refreshATBGauge = false;
this.removeATBGauge();
this.createATBGauge();
};
//==============================
// ** Update
//==============================
var _mog_atbGauge_Sbat_update = Scene_Battle.prototype.update;
Scene_Battle.prototype.update = function() {
_mog_atbGauge_Sbat_update.call(this);
if ($gameTemp._refreshATBGauge) {this.refreshATBGauge()};
};
//=============================================================================
// ** Spriteset Map
//=============================================================================
//=============================================================================
// ** ATB Icon Gauge
//=============================================================================
function ATB_Gauge() {
this.initialize.apply(this, arguments);
};
ATB_Gauge.prototype = Object.create(Sprite.prototype);
ATB_Gauge.prototype.constructor = ATB_Gauge;
//==============================
// * Initialize
//==============================
ATB_Gauge.prototype.initialize = function() {
Sprite.prototype.initialize.call(this);
this._angle = Moghunter.atbIconAngle * Math.PI / 180;
this.rotation = this._angle;
this._iconImg = ImageManager.loadSystem("IconSet");
this._skillIcon = String(Moghunter.atbIcon_SkillVisible) == "true" ? true : false;
this.refreshBattlers();
this.createLayout();
this.createIcons();
};
//==============================
// * refresh Battlers
//==============================
ATB_Gauge.prototype.refreshBattlers = function() {
this._battlers = [];
for (var i = 0; i < $gameParty.battleMembers().length; i++) {
var battler = $gameParty.battleMembers()[i];
this._battlers.push(battler);
};
for (var i = 0; i < $gameTroop.members().length; i++) {
var battler = $gameTroop.members()[i];
this._battlers.push(battler);
};
};
//==============================
// * battlers
//==============================
ATB_Gauge.prototype.battlers = function() {
if (this._battlers) {return this._battlers};
return [];
};
//==============================
// * At
//==============================
ATB_Gauge.prototype.atb = function(battler) {
if (Imported.MOG_ATB) {return battler.atb()};
return -1;
}
//==============================
// * Maxatb
//==============================
ATB_Gauge.prototype.maxatb = function(battler) {
if (Imported.MOG_ATB) {return battler.maxAtb()};
return 1;
};
//==============================
// * Cast AT
//==============================
ATB_Gauge.prototype.cast_at = function(battler) {
if (Imported.MOG_ATB) {return battler._cast_atb[1]};
return 0;
};
//==============================
// * Cast Max AT
//==============================
ATB_Gauge.prototype.cast_max_at = function(battler) {
if (Imported.MOG_ATB) {return battler._cast_atb[2]};
return 1;
};
//==============================
// * Is Casting
//==============================
ATB_Gauge.prototype.is_casting = function(battler) {
if (!battler) {return false};
if (Imported.MOG_ATB) {return battler.isCasting()};
return false;
};
//==============================
// * Is Max Atb
//==============================
ATB_Gauge.prototype.inTurn = function(battler) {
if (!battler.isMaxAtb()) {return false};
if (!battler._intTurn) {return false}
return true;
};
//==============================
// * Is Max Atb
//==============================
ATB_Gauge.prototype.is_max_at = function(battler) {
return this.atb(battler) >= this.maxatb(battler);
};
//==============================
// * Is Max Cast
//==============================
ATB_Gauge.prototype.is_max_cast = function(battler) {
return this.cast_at(battler) >= this.cast_max_at(battler);
};
//==============================
// * Item
//==============================
ATB_Gauge.prototype.item = function(battler) {
if (!battler) {return null};
return battler._cast_atb[0];
return null
};
//==============================
// * Create Layout
//==============================
ATB_Gauge.prototype.createLayout = function() {
this.x = Moghunter.atbIcon_GaugeX;
this.y = Moghunter.atbIcon_GaugeY;
this._layout = new Sprite(ImageManager.loadATBIcon("ATB_Gauge"));
this._layout.anchor.x = 0.5;
this.addChild(this._layout);
};
//==============================
// * Create Icons
//==============================
ATB_Gauge.prototype.createIcons = function() {
this._iconField = new Sprite();
this.addChild(this._iconField);
this._icons = [];
this._skillIcons = [];
for (var i = 0; i < this.battlers().length; i++) {
var battler = this.battlers()[i];
if (battler.isActor()) {
var name = "Actor_" + String(battler._actorId);
} else {
var name = "Enemy_" + String(battler._enemyId);
};
this._icons[i] = new Sprite(ImageManager.loadATBIcon(name));
this._icons[i].battler = battler;
this._icons[i].anchor.x = 0.5;
this._icons[i].anchor.y = 0.5;
this._icons[i].opacity = 0
this._icons[i].nx = 0;
this._icons[i].ny = 0;
this._icons[i].rotation = -this._angle
this._iconField.addChild(this._icons[i]);
if (this._skillIcon) {this.createSkillIcon(i,this._icons[i])};
};
};
//==============================
// * Index
//==============================
ATB_Gauge.prototype.createSkillIcon = function(i,sprite) {
this._skillIcons[i] = new Sprite();
this._skillIcons[i].item = null;
this._skillIcons[i].org = [Moghunter.atbIcon_SkillX,Moghunter.atbIcon_SkillY];
this._skillIcons[i].scale.x = Moghunter.atbIcon_SkillScale;
this._skillIcons[i].scale.y = Moghunter.atbIcon_SkillScale;
this._skillIcons[i].rotation = this._icons[i].rotation;
sprite.addChild(this._skillIcons[i]);
};
//==============================
// * Height EX
//==============================
ATB_Gauge.prototype.heightEX = function(battler,type) {
return 1;
};
//==============================
// * update Icon
//==============================
ATB_Gauge.prototype.updateIcon = function(sprite,index) {
var battler = sprite.battler;
if (battler.isDead()) {
sprite.opacity -= 15;
} else {
sprite.opacity += 15;
if (this.is_casting(battler)) {
var h = Moghunter.atbIcon_GaugeSize * this.cast_at(battler) / this.cast_max_at(battler);
var h2 = this.heightEX(battler,1);
} else {
var h = Moghunter.atbIcon_GaugeSize * this.atb(battler) / this.maxatb(battler);
var h2 = this.heightEX(battler,0);
};
if (this.inTurn(battler)) {
sprite.nx = Moghunter.atbIcon_inTurnX;
sprite.ny = Moghunter.atbIcon_inTurnY;
} else {
sprite.nx = battler.isActor() ? Moghunter.atbIcon_actorX : Moghunter.atbIcon_enemyX;
sprite.ny = this._layout.height - h + h2;
};
};
sprite.x = this.mvto(sprite.x,sprite.nx);
sprite.y = this.mvto(sprite.y,sprite.ny);
if (this._skillIcon) {this.updateSkillIcon(this._skillIcons[index],sprite,battler)};
};
//==============================
// * updateSkillIcon
//==============================
ATB_Gauge.prototype.updateSkillIcon = function(spriteskill,spriteicon,battler) {
spriteskill.x = spriteskill.org[0];
spriteskill.y = spriteskill.org[1];
spriteskill.opacity = spriteicon.opacity;
spriteskill.visible = spriteicon.visible;
if (spriteskill.item != this.item(battler)) {this.refreshIconSkill(spriteskill,battler)};
};
//==============================
// * refresh Icon Skill
//==============================
ATB_Gauge.prototype.refreshIconSkill = function(spriteskill,battler) {
spriteskill.item = this.item(battler);
if (spriteskill.item) {
var iconIndex = spriteskill.item.iconIndex;
var pw = Window_Base._iconWidth;
var ph = Window_Base._iconHeight;
var sx = iconIndex % 16 * pw;
var sy = Math.floor(iconIndex / 16) * ph;
spriteskill.bitmap = this._iconImg;
spriteskill.setFrame(sx, sy, pw, ph);
} else {
spriteskill.bitmap = null;
};
spriteskill.visible = spriteskill.item != null ? true : false;
};
//==============================
// * mv to
//==============================
ATB_Gauge.prototype.mvto = function(value,real_value) {
if (value == real_value) {return value};
var dnspeed = 5 + (Math.abs(value - real_value) / 10);
if (value > real_value) {value -= dnspeed;
if (value < real_value) {value = real_value};}
else if (value < real_value) {value += dnspeed;
if (value > real_value) {value = real_value};
};
return Math.floor(value);
};
//==============================
// * need Fade
//==============================
ATB_Gauge.prototype.needFade = function() {
if ($gameMessage.isBusy()) {return true};
if ($gameTemp._battleEnd) {return true};
if ($gameTemp._atbBattleEnd) {return true};
return false;
};
//==============================
// * Update Visible
//==============================
ATB_Gauge.prototype.updateVisible = function() {
if (this.needFade()) {
this.opacity -= 10;
} else {
this.opacity += 10;
};
};
//==============================
// * update Sort Y
//==============================
ATB_Gauge.prototype.updateSortY = function() {
this._iconField.children.sort(function(b, a){return a.y-b.y})
};
//==============================
// * update
//==============================
ATB_Gauge.prototype.update = function() {
Sprite.prototype.update.call(this);
this.updateVisible();
this.updateSortY();
for (var i = 0; i < this._icons.length; i++) {
this.updateIcon(this._icons[i],i);
};
};