brainwashing-school/js/plugins/MOG_BattleCursor.js
2025-02-25 10:53:19 -06:00

1346 lines
42 KiB
JavaScript

//=============================================================================
// MOG_BattleCursor.js
//=============================================================================
/*:
* @target MZ
* @plugindesc (v1.0) Adiciona o cursor do alvo.
* @author Moghunter
* @url https://mogplugins.wordpress.com
*
* @param -> GENERAL
* @desc
*
* @param Target Window
* @parent -> GENERAL
* @text Show Window (Target)
* @desc Apresentar a janela de seleção de alvos.
* @type boolean
* @default false
*
* @param Slide Effect
* @parent -> GENERAL
* @text Slide Animation
* @desc Animação de deslize.
* @type boolean
* @default true
*
* @param Move Speed
* @parent -> GENERAL
* @text Slide Speed %
* @desc Velocidade de movimento do cursor.
* (30%...300%)
* @default 100
* @type number
* @min 30
* @max 300
*
* @param Float Effect
* @parent -> GENERAL
* @text Float Animation
* @desc Animação de flutuar.
* @type boolean
* @default true
*
* @param Align for Actor
* @parent -> GENERAL
* @desc Definição do alinhamento do cursor nos aliados.
* @text Align (Actor)
* @type select
* @default Above
* @option Below
* @value Below
* @option Center
* @value Center
* @option Above
* @value Above
* @option Left
* @value Left
* @option Right
* @value Right
*
* @param Align for Enemy
* @parent -> GENERAL
* @desc Definição do alinhamento do cursor nos inimigos.
* @text Align (Enemy)
* @type select
* @default Center
* @option Below
* @value Below
* @option Center
* @value Center
* @option Above
* @value Above
* @option Left
* @value Left
* @option Right
* @value Right
*
* @param X-Axis Offset Actor
* @parent -> GENERAL
* @text X-Axis Offset (Actor)
* @desc Definição X-axis do cursor nos aliados.
* @default 0
*
* @param Y-Axis Offset Actor
* @parent -> GENERAL
* @text Y-Axis Offset (Actor)
* @desc Definição Y-axis do cursor nos aliados.
* @default 0
*
* @param X-Axis Offset Enemy
* @parent -> GENERAL
* @text X-Axis Offset (Enemy)
* @desc Definição X-axis do cursor nos inimigos.
* @default 0
*
* @param Y-Axis Offset Enemy
* @parent -> GENERAL
* @text Y-Axis Offset (Enemy)
* @desc Definição Y-axis do cursor nos inimigos.
* @default 0
*
* @param -----------------------
* @desc
*
* @param -> NAME
* @desc
*
* @param Name Visible
* @parent -> NAME
* @text Show Name
* @desc Apresentar o nome do alvo.
* @type boolean
* @default true
*
* @param Font Size
* @parent -> NAME
* @text Font Size
* @desc Tamanho da fonte
* @default 18
* @type number
* @min 9
* @max 48
*
* @param Font Bold
* @parent -> NAME
* @text Font Bold
* @desc Ativar texto em negrito.
* @type boolean
* @default false
*
* @param Font Italic
* @parent -> NAME
* @text Font Italic
* @desc Ativar texto em Itálico.
* @type boolean
* @default false
*
* @param Name X-Axis Actor
* @parent -> NAME
* @text X-Axis Offset (Actor)
* @desc Definição X-axis do nome nos aliados.
* @default 0
*
* @param Name Y-Axis Actor
* @parent -> NAME
* @text Y-Axis Offset (Actor)
* @desc Definição Y-axis do nome nos aliados.
* @default 0
*
* @param Name X-Axis Enemy
* @parent -> NAME
* @text X-Axis Offset (Enemy)
* @desc Definição X-axis do nome nos inimigos.
* @default 0
*
* @param Name Y-Axis Enemy
* @parent -> NAME
* @text Y-Axis Offset (Enemy)
* @desc Definição Y-axis do nome nos inimigos.
* @default 0
*
* @param ------------------------
* @desc
*
* @param -> ANIMATED
* @desc
*
* @param Animated
* @parent -> ANIMATED
* @text Spriteset Animation
* @desc Ativar animação por frames.
* @type boolean
* @default false
*
* @param Frames
* @parent -> ANIMATED
* @text Frames
* @desc Definição da quantidade de frames.
* (2..100)
* @type number
* @default 3
* @min 2
* @max 100
*
* @param Animation Speed
* @parent -> ANIMATED
* @text Animation Speed
* @desc Definição da velocidade da animação.
* (2..240)
* @type number
* @default 8
* @min 2
* @max 240
*
* @help
* =============================================================================
* ♦♦♦ MOG - Battle Cursor ♦♦♦
* Author - Moghunter
* Version - 1.0
* Updated - 2021/04/04
* https://mogplugins.wordpress.com
* =============================================================================
* Adiciona o cursor do alvo.
*
* =============================================================================
* UTILIZAÇÃO
* =============================================================================
* Serão necessários as imagens. (/img/system/)
*
* BattleCursor_A.png
* BattleCursor_B.png
*
* =============================================================================
* NOTETAGS
* =============================================================================
* Se quiser definir uma posição específica do cursor em determinados inimigos
* utilize as notas abaixo.
*
* Battle Cursor Offset : X : Y
*
* Ex
*
* Battle Cursor Offset : 120 : 100
*
*/
(() => {
var Imported = Imported || {};
Imported.MOG_BattleCursor = true;
var Moghunter = Moghunter || {};
Moghunter.parameters = PluginManager.parameters("MOG_BattleCursor");
Moghunter.bcursor_x_actor = Number(
Moghunter.parameters["X-Axis Offset Actor"] || 0
);
Moghunter.bcursor_y_actor = Number(
Moghunter.parameters["Y-Axis Offset Actor"] || 0
);
Moghunter.bcursor_x_enemy = Number(
Moghunter.parameters["X-Axis Offset Enemy"] || 0
);
Moghunter.bcursor_y_enemy = Number(
Moghunter.parameters["Y-Axis Offset Enemy"] || 0
);
Moghunter.bcursor_slide = String(
Moghunter.parameters["Slide Effect"] || "false"
);
Moghunter.bcursor_moveSpeed = Number(
Moghunter.parameters["Move Speed"] || 100
);
Moghunter.bcursor_float = String(
Moghunter.parameters["Float Effect"] || "true"
);
Moghunter.bcursor_alignActor = String(
Moghunter.parameters["Align for Actor"] || "Above"
);
Moghunter.bcursor_alignEnemy = String(
Moghunter.parameters["Align for Enemy"] || "Above"
);
Moghunter.bcursor_name_visible = String(
Moghunter.parameters["Name Visible"] || "true"
);
Moghunter.bcursor_name_x_actor = Number(
Moghunter.parameters["Name X-Axis Actor"] || 0
);
Moghunter.bcursor_name_y_actor = Number(
Moghunter.parameters["Name Y-Axis Actor"] || 0
);
Moghunter.bcursor_name_x_enemy = Number(
Moghunter.parameters["Name X-Axis Enemy"] || 0
);
Moghunter.bcursor_name_y_enemy = Number(
Moghunter.parameters["Name Y-Axis Enemy"] || 0
);
Moghunter.bcursor_fontSize = Number(Moghunter.parameters["Font Size"] || 18);
Moghunter.bcursor_fontBold = String(
Moghunter.parameters["Font Bold"] || "false"
);
Moghunter.bcursor_fontItalic = String(
Moghunter.parameters["Font Italic"] || "false"
);
Moghunter.bcursor_TargetWindow = String(
Moghunter.parameters["Target Window"] || "false"
);
Moghunter.bcursor_animated = String(
Moghunter.parameters["Animated"] || "true"
);
Moghunter.bcursor_aniFrames = Number(Moghunter.parameters["Frames"] || 3);
Moghunter.bcursor_aniSpeed = Number(
Moghunter.parameters["Animation Speed"] || 5
);
//=============================================================================
// ■■■ Game_Temp ■■■
//=============================================================================
//==============================
// ♦ ALIAS ♦ Initialize
//==============================
const _mog_bCursor_game_temp_initialize = Game_Temp.prototype.initialize;
Game_Temp.prototype.initialize = function () {
_mog_bCursor_game_temp_initialize.call(this);
this._mogBattleCursor = {};
this._mogBattleCursor.needRefresh1 = false;
this._mogBattleCursor.needRefresh2 = false;
this._mogBattleCursor.x = 0;
this._mogBattleCursor.y = 0;
this._mogBattleCursor.slideTime = 0;
this._mogBattleCursor.isForOpponent = false;
this._mogBattleCursor.isForAll = false;
this._mogBattleCursor.isForEveryone = false;
};
//=============================================================================
// ■■■ Game_Party ■■■
//=============================================================================
//==============================
// ♦ ALIAS ♦ addActor
//==============================
const _mog_bCursor_game_party_addActor = Game_Party.prototype.addActor;
Game_Party.prototype.addActor = function (actorId) {
_mog_bCursor_game_party_addActor.call(this, actorId);
if (this.inBattle()) {
$gameTemp._mogBattleCursor.needRefresh1 = true;
}
};
//==============================
// ♦ ALIAS ♦ removeActor
//==============================
const _mog_bCursor_game_party_removeActor = Game_Party.prototype.removeActor;
Game_Party.prototype.removeActor = function (actorId) {
_mog_bCursor_game_party_removeActor.call(this, actorId);
if (this.inBattle()) {
$gameTemp._mogBattleCursor.needRefresh1 = true;
}
};
//=============================================================================
// ■■■ Game_Battler ■■■
//=============================================================================
//==============================
// ♦ ALIAS ♦ Initialize
//==============================
const _mog_bCursor_game_battler_initMembers =
Game_Battler.prototype.initMembers;
Game_Battler.prototype.initMembers = function () {
_mog_bCursor_game_battler_initMembers.call(this);
this.initBattleCursor();
};
//==============================
// * initBattleCursor
//==============================
Game_Battler.prototype.initBattleCursor = function () {
this._battleCursor = {};
this._battleCursor.enable = true;
this._battleCursor.X_Offset = 0;
this._battleCursor.Y_Offset = 0;
};
//==============================
// * notetags mg
//==============================
Game_Battler.prototype.notetags_mg = function () {
if (this.isEnemy()) {
return this.enemy().note.split(/[\r\n]+/);
}
if (this.isActor()) {
return this.actor().note.split(/[\r\n]+/);
}
};
//==============================
// * setupBattleCursor Note
//==============================
Game_Battler.prototype.setupBattleCursorNote = function () {
this.notetags_mg().forEach(function (note) {
const note_data = note.split(" : ");
if (note_data[0].toLowerCase() == "battle cursor offset") {
this._battleCursor.X_Offset = Number(note_data[1]);
this._battleCursor.Y_Offset = Number(note_data[2]);
}
}, this);
};
//=============================================================================
// ■■■ Game_Actor ■■■
//=============================================================================
//==============================
// ♦ ALIAS ♦ Setup
//==============================
const _mog_bCursor_game_actor_setup = Game_Actor.prototype.setup;
Game_Actor.prototype.setup = function (actorId) {
_mog_bCursor_game_actor_setup.call(this, actorId);
this.setupBattleCursorNote();
};
//=============================================================================
// ■■■ Game_Enemy ■■■
//=============================================================================
//==============================
// ♦ ALIAS ♦ Setup
//==============================
const _mog_bCursor_game_enemy_setup = Game_Enemy.prototype.setup;
Game_Enemy.prototype.setup = function (enemyId, x, y) {
_mog_bCursor_game_enemy_setup.call(this, enemyId, x, y);
this.setupBattleCursorNote();
};
//==============================
// ♦ ALIAS ♦ transform
//==============================
const _mog_battleCursor_game_enemy_transform = Game_Enemy.prototype.transform;
Game_Enemy.prototype.transform = function (enemyId) {
_mog_battleCursor_game_enemy_transform.call(this, enemyId);
$gameTemp._mogBattleCursor.needRefresh2 = true;
this.setupBattleCursorNote();
};
//=============================================================================
// ■■■ Game Action ■■■
//=============================================================================
//==============================
// ♦ OVERWRITE ♦ NeedsSelection
//==============================
Game_Action.prototype.needsSelection = function () {
return this.checkItemScope([1, 2, 7, 8, 9, 10, 14]);
};
//==============================
// ♦ ALIAS ♦ apply
//==============================
const _mog_battleCursor_game_action_apply = Game_Action.prototype.apply;
Game_Action.prototype.apply = function (target) {
_mog_battleCursor_game_action_apply.call(this, target);
if (target && target.isEnemy() && target.isDead()) {
$gameTemp._mogBattleCursor.needRefresh2 = true;
}
};
//=============================================================================
// ■■■ Window_BattleActor ■■■
//=============================================================================
//==============================
// ♦ ALIAS ♦ Initialize
//==============================
const _mog_battleCursor_window_battleActor_initialize =
Window_BattleActor.prototype.initialize;
Window_BattleActor.prototype.initialize = function (rect) {
_mog_battleCursor_window_battleActor_initialize.call(this, rect);
this._bcursor_winVisble =
String(Moghunter.bcursor_TargetWindow) == "true" ? true : false;
if (!$dataSystem.optSideView) {
this._bcursor_winVisble = true;
}
this._bcSo = Graphics.height * 2;
};
//==============================
// ♦ ALIAS ♦ Select
//==============================
const _mog_battleCursor_window_battleactor_select =
Window_BattleActor.prototype.select;
Window_BattleActor.prototype.select = function (index) {
_mog_battleCursor_window_battleactor_select.call(this, index);
if (this.battleCursorNeedSelectAllActors()) {
this.battleCursorSelectAllActors();
}
};
//==============================
// * battleCursorNeedSelectAllActors
//==============================
Window_BattleActor.prototype.battleCursorNeedSelectAllActors = function () {
if ($gameTemp._mogBattleCursor.isForEveryone) {
return true;
}
if ($gameTemp._mogBattleCursor.isForOpponent) {
return false;
}
if (!$gameTemp._mogBattleCursor.isForAll) {
return false;
}
return true;
};
//==============================
// * battleCursorSelectAllActors
//==============================
Window_BattleActor.prototype.battleCursorSelectAllActors = function () {
for (const member of $gameParty.battleMembers()) {
member.select();
}
this.setCursorAll(true);
};
//==============================
// ♦ ALIAS ♦ hide
//==============================
const _mog_battleCursor_window_battleactor_hide =
Window_BattleActor.prototype.hide;
Window_BattleActor.prototype.hide = function (index) {
_mog_battleCursor_window_battleactor_hide.call(this);
this.setCursorAll(false);
};
//==============================
// ♦ ALIAS ♦ cursorDown
//==============================
const _mog_battleCursor_window_battleActor_cursorDown =
Window_BattleActor.prototype.cursorDown;
Window_BattleActor.prototype.cursorDown = function (wrap) {
if (!this._bcursor_winVisble) {
this.inputIndex(1);
return;
}
_mog_battleCursor_window_battleActor_cursorDown.call(this, wrap);
};
//==============================
// ♦ ALIAS ♦ cursorUp
//==============================
const _mog_battleCursor_window_battleActor_cursorUp =
Window_BattleActor.prototype.cursorUp;
Window_BattleActor.prototype.cursorUp = function (wrap) {
if (!this._bcursor_winVisble) {
this.inputIndex(-1);
return;
}
_mog_battleCursor_window_battleActor_cursorUp.call(this, wrap);
};
//=============================================================================
// ■■■ Window_BattleEnemy ■■■
//=============================================================================
//==============================
// ♦ ALIAS ♦ Initialize
//==============================
const _mog_battleCursor_window_battleenemy_initialize =
Window_BattleEnemy.prototype.initialize;
Window_BattleEnemy.prototype.initialize = function (rect) {
_mog_battleCursor_window_battleenemy_initialize.call(this, rect);
this._bcursor_winVisble =
String(Moghunter.bcursor_TargetWindow) == "true" ? true : false;
this._bcSo = Graphics.height * 2;
};
//==============================
// ♦ ALIAS ♦ Select
//==============================
const _mog_battleCursor_window_battleenemy_select =
Window_BattleEnemy.prototype.select;
Window_BattleEnemy.prototype.select = function (index) {
_mog_battleCursor_window_battleenemy_select.call(this, index);
if (this.battleCursorNeedSelectAllEnemies()) {
this.battleCursorSelectAllEnemies();
}
};
//==============================
// * battleCursorNeedSelectAllEnemies
//==============================
Window_BattleEnemy.prototype.battleCursorNeedSelectAllEnemies = function () {
if ($gameTemp._mogBattleCursor.isForEveryone) {
return true;
}
if (!$gameTemp._mogBattleCursor.isForOpponent) {
return false;
}
if (!$gameTemp._mogBattleCursor.isForAll) {
return false;
}
return true;
};
//==============================
// * battleCursorSelectAllEnemies
//==============================
Window_BattleEnemy.prototype.battleCursorSelectAllEnemies = function () {
for (const member of $gameTroop.aliveMembers()) {
member.select();
}
this.setCursorAll(true);
};
//==============================
// ♦ ALIAS ♦ hide
//==============================
const _mog_battleCursor_window_battleenemy_hide =
Window_BattleEnemy.prototype.hide;
Window_BattleEnemy.prototype.hide = function () {
_mog_battleCursor_window_battleenemy_hide.call(this);
this.setCursorAll(false);
};
//==============================
// * itemRectBatttleCursor
//==============================
Window_BattleEnemy.prototype.itemRectBatteCursor = function (index) {
const maxCols = this.maxCols();
const itemWidth = this.itemWidth();
const itemHeight = this.itemHeight();
const colSpacing = this.colSpacing();
const rowSpacing = this.rowSpacing();
const col = index % maxCols;
const row = Math.floor(index / maxCols);
const x = itemWidth + colSpacing / 1 - this.scrollBaseX();
const y = row * itemHeight + rowSpacing / 1 - this.scrollBaseY();
const width = itemWidth - colSpacing;
const height = itemHeight - rowSpacing;
return new Rectangle(x, y, width, height);
};
//==============================
// ♦ OVERWRITE ♦ refreshCursorForAll
//==============================
Window_BattleEnemy.prototype.refreshCursorForAll = function () {
const maxItems = this.maxItems();
if (maxItems > 0) {
const rect = this.itemRect(0);
rect.enlarge(this.itemRectBatteCursor(999));
this.setCursorRect(rect.x, rect.y, rect.width, rect.height);
} else {
this.setCursorRect(0, 0, 0, 0);
}
this._index = 0;
};
//==============================
// ♦ ALIAS ♦ cursorDown
//==============================
const _mog_battleCursor_window_battleEnemy_cursorDown =
Window_BattleEnemy.prototype.cursorDown;
Window_BattleEnemy.prototype.cursorDown = function (wrap) {
if (!this._bcursor_winVisble) {
this.inputIndex(1);
return;
}
_mog_battleCursor_window_battleEnemy_cursorDown.call(this, wrap);
};
//==============================
// ♦ ALIAS ♦ cursorUp
//==============================
const _mog_battleCursor_window_battleEnemy_cursorUp =
Window_BattleEnemy.prototype.cursorUp;
Window_BattleEnemy.prototype.cursorUp = function (wrap) {
if (!this._bcursor_winVisble) {
this.inputIndex(-1);
return;
}
_mog_battleCursor_window_battleEnemy_cursorUp.call(this, wrap);
};
//==============================
// ♦ ALIAS ♦ cursorRight
//==============================
const _mog_battleCursor_window_battleEnemy_cursorRight =
Window_BattleEnemy.prototype.cursorRight;
Window_BattleEnemy.prototype.cursorRight = function (wrap) {
if (!this._bcursor_winVisble) {
this.inputIndex(1);
return;
}
_mog_battleCursor_window_battleEnemy_cursorRight.call(this, wrap);
};
//==============================
// ♦ ALIAS ♦ cursorLeft
//==============================
const _mog_battleCursor_window_battleEnemy_cursorLeft =
Window_BattleEnemy.prototype.cursorLeft;
Window_BattleEnemy.prototype.cursorLeft = function (wrap) {
if (!this._bcursor_winVisble) {
this.inputIndex(-1);
return;
}
_mog_battleCursor_window_battleEnemy_cursorLeft.call(this, wrap);
};
//=============================================================================
// ■■■ Window Selectable ■■■
//=============================================================================
//==============================
// * input Index
//==============================
Window_Selectable.prototype.inputIndex = function (value) {
var index = this.index();
var maxValue = this.maxItems() - 1;
index += value;
if (index > maxValue) {
index = 0;
}
if (index < 0) {
index = maxValue;
}
this.smoothSelect(index);
};
//=============================================================================
// ■■■ Spriteset Battle ■■■
//=============================================================================
//==============================
// * create Sprt Field 1
//==============================
Spriteset_Battle.prototype.createSprtField1 = function () {
this._sprtField1 = new Sprite();
this._sprtField1.z = 1;
this.addChild(this._sprtField1);
};
//==============================
// * create Sprt Field 2
//==============================
Spriteset_Battle.prototype.createSprtField2 = function () {
this._sprtField2 = new Sprite();
this._sprtField2.z = 5;
this.addChild(this._sprtField2);
};
//==============================
// ♦ ALIAS ♦ Create Spriteset
//==============================
const _mog_bCursor_spriteset_battle_createLowerLayer =
Spriteset_Battle.prototype.createLowerLayer;
Spriteset_Battle.prototype.createLowerLayer = function () {
_mog_bCursor_spriteset_battle_createLowerLayer.call(this);
if (!this._sprtField2) {
this.createSprtField2();
}
this.createBattleCursor();
};
//==============================
// * createBattleCursor
//==============================
Spriteset_Battle.prototype.createBattleCursor = function () {
for (const sprite of this.battlerSprites()) {
const battlerSprite = new BattleCursorSprite(this, sprite);
battlerSprite.z = 5;
this._sprtField2.addChild(battlerSprite);
}
};
//=============================================================================
// ■■■ Scene Battle ■■■
//=============================================================================
//==============================
// ♦ ALIAS ♦ update
//==============================
const _mog_bCursor_scene_battle_update = Scene_Battle.prototype.update;
Scene_Battle.prototype.update = function () {
_mog_bCursor_scene_battle_update.call(this);
this.updateBattleCursor();
};
//==============================
// * update Battle Cursor
//==============================
Scene_Battle.prototype.updateBattleCursor = function () {
if ($gameTemp._mogBattleCursor.slideTime > 0) {
$gameTemp._mogBattleCursor.slideTime--;
if ($gameTemp._mogBattleCursor.slideTime == 0) {
$gameTemp._mogBattleCursor.x = 0;
$gameTemp._mogBattleCursor.y = 0;
}
}
this.updateBattleCursorTargetWindow();
$gameTemp._mogBattleCursor.needRefresh1 = false;
$gameTemp._mogBattleCursor.needRefresh2 = false;
};
//==============================
// * updateBattleCursorTargetWindow
//==============================
Scene_Battle.prototype.updateBattleCursorTargetWindow = function () {
if ($gameTemp._mogBattleCursor.needRefresh1 && this._actorWindow.active) {
this._actorWindow.refresh();
this._actorWindow.select(0);
}
if ($gameTemp._mogBattleCursor.needRefresh2 && this._enemyWindow.active) {
const enemy = this._enemyWindow.enemy();
this._enemyWindow.refresh();
if (!enemy.isDead()) {
var checked = false;
for (var i = 0; i < $gameTroop.aliveMembers().length; i++) {
if ($gameTroop.aliveMembers()[i] == enemy) {
this._enemyWindow.select(i);
checked = true;
}
}
if (!checked) {
this._enemyWindow.select(0);
}
} else {
this._enemyWindow.select(0);
}
}
if (this._enemyWindow && !this._enemyWindow._bcursor_winVisble) {
this._enemyWindow.y = this._enemyWindow._bcSo;
}
if (this._actorWindow && !this._actorWindow._bcursor_winVisble) {
this._actorWindow.y = this._actorWindow._bcSo;
}
};
//==============================
// ♦ ALIAS ♦ onEnemyCancel
//==============================
const _mog_bCursor_scene_battle_onEnemyCancel =
Scene_Battle.prototype.onEnemyCancel;
Scene_Battle.prototype.onEnemyCancel = function () {
this._actorWindow.hide();
_mog_bCursor_scene_battle_onEnemyCancel.call(this);
};
//==============================
// ♦ ALIAS ♦ onSelectAction
//==============================
const _mog_bCursor_scene_battle_onSelectAction =
Scene_Battle.prototype.onSelectAction;
Scene_Battle.prototype.onSelectAction = function () {
this.battleCursorOnSelectAction();
_mog_bCursor_scene_battle_onSelectAction.call(this);
if (this._enemyWindow.active && $gameTemp._mogBattleCursor.isForEveryone) {
this._actorWindow.battleCursorSelectAllActors();
}
};
//==============================
// * battleCursorOnSelectAction
//==============================
Scene_Battle.prototype.battleCursorOnSelectAction = function () {
const action = BattleManager.inputtingAction();
$gameTemp._mogBattleCursor.isForOpponent = action.isForOpponent();
$gameTemp._mogBattleCursor.isForAll = action.isForAll();
$gameTemp._mogBattleCursor.isForEveryone = action.isForEveryone();
};
//=============================================================================
// ■■■ BattleCursorSprite ■■■
//=============================================================================
function BattleCursorSprite() {
this.initialize.apply(this, arguments);
}
BattleCursorSprite.prototype = Object.create(Sprite.prototype);
BattleCursorSprite.prototype.constructor = BattleCursorSprite;
//==============================
// * Initialize
//==============================
BattleCursorSprite.prototype.initialize = function (spriteset, sprite) {
Sprite.prototype.initialize.call(this);
this._spriteset = spriteset;
this._battlerSprite = sprite;
this._position = {};
this._position.x = 0;
this._position.y = 0;
this._position.height = 0;
this._position.xOffset = 0;
this._position.yOffset = 0;
this._effect = {};
this._effect.wave =
String(Moghunter.bcursor_float) == "true" ? true : false;
this._effect.waveX = 0;
this._effect.waveY = 0;
this._effect.waveMode = 0;
this._effect.waveTime = 0;
this._effect.waveSpeed = 0;
this._anime = {};
this._anime.enabled =
String(Moghunter.bcursor_animated) == "true" ? true : false;
this._anime.index = 0;
this._anime.frameMax = Math.min(
Math.max(Moghunter.bcursor_aniFrames, 2),
100
);
this._anime.time1 = 0;
this._anime.time2 = Math.min(Math.max(Moghunter.bcursor_aniSpeed, 2), 240);
this._anime.width = 0;
this._anime.height = 0;
this._align = 0;
this.refreshBattler();
this.prepareBitmap();
this.visible = false;
this.opacity = 0;
this._moveSpeed = Math.min(Math.max(Moghunter.bcursor_moveSpeed, 30), 300);
if (String(Moghunter.bcursor_slide) != "true") {
this._moveSpeed = 3000;
}
this._xf = (Graphics.width - Graphics.boxWidth) / 2;
this._yf = (Graphics.height - Graphics.boxHeight) / 2;
};
//==============================
// * getAlign
//==============================
BattleCursorSprite.prototype.getAlign = function (mode) {
if (mode == "Below") {
return 0;
} else if (mode == "Center") {
return 1;
} else if (mode == "Left") {
return 3;
} else if (mode == "Right") {
return 4;
} else {
return 2;
}
};
//==============================
// * prepareAnimation
//==============================
BattleCursorSprite.prototype.prepareAnimation = function () {
this._anime.width = this.setCursorBitmap().width / this._anime.frameMax;
this._anime.height = this.setCursorBitmap().height;
this.refreshFrameAnimation();
};
//==============================
// * updateAnime
//==============================
BattleCursorSprite.prototype.updateAnime = function () {
this._anime.time1++;
if (this._anime.time1 > this._anime.time2) {
this._anime.time1 = 0;
this.refreshFrameAnimation();
}
};
//==============================
// * refresh Frame Animation
//==============================
BattleCursorSprite.prototype.refreshFrameAnimation = function () {
this._anime.index++;
if (this._anime.index > this._anime.frameMax - 1) {
this._anime.index = 0;
}
const sx = this._anime.width * this._anime.index;
this._cursorSprite.setFrame(sx, 0, this._anime.width, this._anime.height);
};
//==============================
// * move Speed
//==============================
BattleCursorSprite.prototype.moveSpeed = function () {
return this._moveSpeed;
};
//==============================
// * prepare Bitmap
//==============================
BattleCursorSprite.prototype.prepareBitmap = function () {
this._cursorBitmap1 = ImageManager.loadSystem("BattleCursor_A");
this._cursorBitmap2 = ImageManager.loadSystem("BattleCursor_B");
};
//==============================
// * create Sprites
//==============================
BattleCursorSprite.prototype.createSprites = function () {
this._cursorSprite = new Sprite();
this._cursorSprite.z = 5;
this._cursorSprite.anchor.x = 0.5;
this._cursorSprite.anchor.y = 2;
this.addChild(this._cursorSprite);
this._nameSprite = new Sprite(new Bitmap(160, 48));
this._nameSprite.z = 10;
this._nameSprite.anchor.x = 0.5;
this._nameSprite.visible =
String(Moghunter.bcursor_name_visible) == "true" ? true : false;
this._nameSprite.bitmap.fontSize = Moghunter.bcursor_fontSize;
this._nameSprite.bitmap.fontBold =
String(Moghunter.bcursor_fontBold) == "true" ? true : false;
this._nameSprite.bitmap.fontItalic =
String(Moghunter.bcursor_fontItalic) == "true" ? true : false;
this.addChild(this._nameSprite);
if (this._battler) {
this.refreshBattleCursor();
}
};
//==============================
// * refreshBattler
//==============================
BattleCursorSprite.prototype.refreshBattler = function () {
this._battler = this.setBattler();
};
//==============================
// * setBattler
//==============================
BattleCursorSprite.prototype.setBattler = function () {
if (this._battlerSprite) {
return this._battlerSprite._battler;
}
return null;
};
//==============================
// * Need Refresh
//==============================
BattleCursorSprite.prototype.needRefresh = function () {
if (this._battlerSprite) {
if ($gameTemp._mogBattleCursor.needRefresh1) {
return true;
}
if ($gameTemp._mogBattleCursor.needRefresh2) {
return true;
}
if (this._battler != this._battlerSprite._battler) {
return true;
}
if (
this._battler &&
this._position.width == 0 &&
this._position.height == 0
) {
if (this._battlerSprite._mainSprite) {
if (
this._battlerSprite._mainSprite.bitmap &&
this._battlerSprite._mainSprite.bitmap.isReady()
) {
return true;
}
} else {
if (
this._battlerSprite.bitmap &&
this._battlerSprite.bitmap.isReady()
) {
return true;
}
}
}
}
return false;
};
//==============================
// * Refresh Battle Cursor
//==============================
BattleCursorSprite.prototype.refreshBattleCursor = function () {
this.visible = false;
this.refreshBattler();
if (this._battler) {
this.refreshData();
this.refreshBitmap();
this.refreshName();
}
};
//==============================
// * Refresh Data
//==============================
BattleCursorSprite.prototype.refreshData = function () {
if (this._battler.isEnemy()) {
this._align = this.getAlign(String(Moghunter.bcursor_alignEnemy));
this._position.xOffset = Moghunter.bcursor_x_enemy;
this._position.yOffset = Moghunter.bcursor_y_enemy;
} else {
this._align = this.getAlign(String(Moghunter.bcursor_alignActor));
this._position.xOffset = Moghunter.bcursor_x_actor;
this._position.yOffset = Moghunter.bcursor_y_actor;
}
};
//==============================
// * refresh Bitmap
//==============================
BattleCursorSprite.prototype.refreshBitmap = function () {
this._cursorSprite.bitmap = this.setCursorBitmap();
this._position.width = 0;
this._position.height = 0;
if (this._align < 3) {
this._position.height = this.setCursorAlign(this._align);
} else {
this._position.width = this.setCursorAlign(this._align);
this._position.height = this.setCursorAlign(1);
}
if (this._anime.enabled) {
this.prepareAnimation();
}
};
//==============================
// * setCursorAlign
//==============================
BattleCursorSprite.prototype.setCursorAlign = function (align) {
if (this._battlerSprite) {
if (
this._battlerSprite._mainSprite &&
this._battlerSprite._mainSprite.bitmap &&
this._battlerSprite._mainSprite.bitmap.isReady()
) {
if (align == 0) {
return 0;
} else if (align == 1) {
return this._battlerSprite._mainSprite.height / 2 - 5;
} else if (align == 3) {
return -(this._battlerSprite._mainSprite.width / 2) + 5;
} else if (align == 4) {
return this._battlerSprite._mainSprite.width / 2 - 5;
} else {
return this._battlerSprite._mainSprite.height - 12;
}
}
if (this._battlerSprite.bitmap && this._battlerSprite.bitmap.isReady()) {
if (align == 0) {
return 0;
} else if (align == 1) {
return this._battlerSprite.height / 2 - 10;
} else if (align == 3) {
return -(this._battlerSprite.width / 2) + 10;
} else if (align == 4) {
return this._battlerSprite.width / 2 - 10;
} else {
return this._battlerSprite.height - 24;
}
}
}
return 0;
};
//==============================
// * set Cursor Bitmap
//==============================
BattleCursorSprite.prototype.setCursorBitmap = function () {
if (this._battler.isEnemy()) {
return this._cursorBitmap2;
}
return this._cursorBitmap1;
};
//==============================
// * Refresh Name
//==============================
BattleCursorSprite.prototype.refreshName = function () {
const text = String(this._battler.name());
this._nameSprite.bitmap.clear();
this._nameSprite.bitmap.drawText(text, 0, 0, 160, 42, "center");
const sh = -(this._cursorSprite.height * 2) - 28;
const x_Offset = this._battler.isEnemy()
? Moghunter.bcursor_name_x_enemy
: Moghunter.bcursor_name_x_actor;
const y_Offset = this._battler.isEnemy()
? Moghunter.bcursor_name_y_enemy
: Moghunter.bcursor_name_y_actor;
this._nameSprite.x = x_Offset;
this._nameSprite.y = y_Offset + sh;
};
//==============================
// * move Cursor
//==============================
BattleCursorSprite.prototype.moveCursor = function (value, real_value) {
if (value == real_value) {
return value;
}
var dnspeed =
(5 + Math.abs(value - real_value) / 10) * (this.moveSpeed() / 100);
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);
};
//==============================
// * posX
//==============================
BattleCursorSprite.prototype.posX = function () {
if (!this._battlerSprite) {
return 0;
}
return (
this._xf +
this._position.xOffset +
this._battlerSprite.x +
this._effect.waveX +
this._battler._battleCursor.X_Offset +
this._position.width
);
};
//==============================
// * posY
//==============================
BattleCursorSprite.prototype.posY = function () {
if (!this._battlerSprite) {
return 0;
}
return (
this._yf +
this._position.yOffset +
this._battlerSprite.y +
this._effect.waveY +
this._battler._battleCursor.Y_Offset -
this._position.height
);
};
//==============================
// * update Wave Effect
//==============================
BattleCursorSprite.prototype.updateWaveEffect = function () {
this._effect.waveTime++;
if (this._align < 3) {
this._effect.waveY = this.updateWaveMovement(this._effect.waveY);
} else {
this._effect.waveX = this.updateWaveMovement(this._effect.waveX);
}
};
//==============================
// * updateWaveMovement
//==============================
BattleCursorSprite.prototype.updateWaveMovement = function (value) {
if (this._effect.waveMode == 0) {
if (this._effect.waveTime > 2) {
this._effect.waveTime = 0;
value++;
if (value >= 10) {
this._effect.waveMode = 1;
}
}
} else {
if (this._effect.waveTime > 2) {
this._effect.waveTime = 0;
value--;
if (value <= 0) {
this._effect.waveMode = 0;
}
}
}
return value;
};
//==============================
// * isForAll
//==============================
BattleCursorSprite.prototype.isForAll = function () {
return $gameTemp._mogBattleCursor.isForAll;
};
//==============================
// * isVisible
//==============================
BattleCursorSprite.prototype.isVisible = function () {
if (!this._battler) {
return false;
}
if (this._battler.isHidden()) {
return false;
}
if (this._battler.isEnemy() && this._battler.isDead()) {
return false;
}
return this._battler.isSelected();
};
//==============================
// * Update Battle Cursor
//==============================
BattleCursorSprite.prototype.updateBattleCursor = function () {
this.visible = this.isVisible();
if (this._effect.wave) {
this.updateWaveEffect();
}
if (this._anime.enabled) {
this.updateAnime();
}
this.updatePosition();
};
//==============================
// * Update Position
//==============================
BattleCursorSprite.prototype.updatePosition = function () {
if (this.visible) {
this.x = this.moveCursor(this.x, this.posX());
this.y = this.moveCursor(this.y, this.posY());
$gameTemp._mogBattleCursor.x = this.x;
$gameTemp._mogBattleCursor.y = this.y;
$gameTemp._mogBattleCursor.slideTime = 6;
this.opacity += 25;
} else {
this.x = $gameTemp._mogBattleCursor.x;
this.y = $gameTemp._mogBattleCursor.y;
this.opacity = $gameTemp._mogBattleCursor.slideTime == 0 ? 0 : 255;
}
};
//==============================
// * need Create Sprites
//==============================
BattleCursorSprite.prototype.needCreateSprites = function () {
if (this._cursorSprite) {
return false;
}
if (!this._cursorBitmap1.isReady()) {
return false;
}
return true;
};
//==============================
// * Update
//==============================
BattleCursorSprite.prototype.update = function () {
Sprite.prototype.update.call(this);
if (this.needCreateSprites()) {
this.createSprites();
}
if (this.needRefresh()) {
this.refreshBattleCursor();
}
if (this._battler) {
this.updateBattleCursor();
}
};
})();