374 lines
11 KiB
JavaScript
374 lines
11 KiB
JavaScript
//=============================================================================
|
|
// MOG_MenuCursor.js
|
|
//=============================================================================
|
|
/*:
|
|
* @plugindesc (v1.6) Adiciona um cursor animado no menu.
|
|
* @author Moghunter
|
|
*
|
|
* @param Slide Animation
|
|
* @desc Ativar animação de movimento lateral.
|
|
* @default true
|
|
*
|
|
* @param Cursor X-axis
|
|
* @desc Definição da posição X-axis para ajustes.
|
|
* @default 0
|
|
*
|
|
* @param Cursor Y-axis
|
|
* @desc Definição da posição Y-axis para ajustes.
|
|
* @default 0
|
|
*
|
|
* @param Frames Animation
|
|
* @desc Ativar animação por frames de imagem.
|
|
* @default false
|
|
*
|
|
* @param Max Frames
|
|
* @desc Quantidade de frames de animação.
|
|
* @default 4
|
|
*
|
|
* @param Animation Speed
|
|
* @desc Definição da velocidade da animação.
|
|
* @default 7
|
|
*
|
|
* @help
|
|
* =============================================================================
|
|
* +++ MOG - Menu Cursor (v1.6) +++
|
|
* By Moghunter
|
|
* https://atelierrgss.wordpress.com/
|
|
* =============================================================================
|
|
* Adiciona um cursor animado no menu.
|
|
* Será necessário o arquivo Menu_Cursor.png gravado na pasta. (img/system/)
|
|
*
|
|
* =============================================================================
|
|
* HISTÓTICO
|
|
* =============================================================================
|
|
* (v1.6) - Melhoria na codificação.
|
|
* (v1.5) - Correção de não ativar o cursor animado.
|
|
* (v1.4) - Correção da velocidade do cursor na cena de titulo.
|
|
* (v1.3) - Correção de na atualização na posição do Index quando os comandos
|
|
* ultrapassam o tamanho da janela.
|
|
* - Melhoria na compatibilidade de plugins.
|
|
* (v1.2) - Melhoria no sistema de rolamento do mouse.
|
|
* (v1.1) - Correção do glitch de não ocultar o cursor durante o fade da cena.
|
|
* - Melhoria da animação inicial do cursor.
|
|
*
|
|
*/
|
|
|
|
//=============================================================================
|
|
// ** PLUGIN PARAMETERS
|
|
//=============================================================================
|
|
var Imported = Imported || {};
|
|
Imported.MOG_MenuCursor = true;
|
|
var Moghunter = Moghunter || {};
|
|
|
|
Moghunter.parameters = PluginManager.parameters("MOG_MenuCursor");
|
|
Moghunter.mcursor_float = String(
|
|
Moghunter.parameters["Slide Animation"] || true
|
|
);
|
|
Moghunter.mcursor_x = Number(Moghunter.parameters["Cursor X-axis"] || 0);
|
|
Moghunter.mcursor_y = Number(Moghunter.parameters["Cursor Y-axis"] || 0);
|
|
Moghunter.mcursor_animated = String(
|
|
Moghunter.parameters["Frames Animation"] || "false"
|
|
);
|
|
Moghunter.mcursor_maxframes = Number(Moghunter.parameters["Max Frames"] || 4);
|
|
Moghunter.mcursor_animationSpeed = Number(
|
|
Moghunter.parameters["Animation Speed"] || 7
|
|
);
|
|
|
|
//=============================================================================
|
|
// ** Game_Temp
|
|
//=============================================================================
|
|
|
|
//==============================
|
|
// * Initialize
|
|
//==============================
|
|
var _alias_mog_mcursor_temp_initialize = Game_Temp.prototype.initialize;
|
|
Game_Temp.prototype.initialize = function () {
|
|
_alias_mog_mcursor_temp_initialize.call(this);
|
|
this._mcursorData = [false, 0, 0, 0];
|
|
};
|
|
|
|
//=============================================================================
|
|
// ** Scene_Base
|
|
//=============================================================================
|
|
|
|
//==============================
|
|
// * Initialize
|
|
//==============================
|
|
var _mog_mcursor_scnBase_initialize = Scene_Base.prototype.initialize;
|
|
Scene_Base.prototype.initialize = function () {
|
|
_mog_mcursor_scnBase_initialize.call(this);
|
|
if ($gameTemp) {
|
|
$gameTemp._mcursorData = [false, 0, 0, 0];
|
|
}
|
|
this._sprite_mcursor = null;
|
|
};
|
|
|
|
//==============================
|
|
// * Update
|
|
//==============================
|
|
var _mog_mcursor_scnBase_update = Scene_Base.prototype.update;
|
|
Scene_Base.prototype.update = function () {
|
|
_mog_mcursor_scnBase_update.call(this);
|
|
if (!this._sprite_mcursor && $gameTemp && $gameTemp._mcursorData[0]) {
|
|
this.create_menucursor();
|
|
}
|
|
if (this._sprite_mcursor) {
|
|
this.update_mcursor();
|
|
}
|
|
};
|
|
|
|
//==============================
|
|
// * Create Menu Cursor
|
|
//==============================
|
|
Scene_Base.prototype.create_menucursor = function () {
|
|
this.removeChild(this._sprite_mcursor);
|
|
this._sprite_mcursor = new Sprite(ImageManager.loadSystem("Menu_Cursor"));
|
|
this._sprite_mcursor.opacity = 0;
|
|
this._sprite_mcursor.anchor.x = 0.5;
|
|
this._sprite_mcursor.anchor.y = 0.5;
|
|
this._mcursor_data = [-1, -1, 0, 0, 0, false, false, 0, 0, 0, 5, 0, 0];
|
|
if (String(Moghunter.mcursor_float) === "true") {
|
|
this._mcursor_data[5] = true;
|
|
}
|
|
if (String(Moghunter.mcursor_animated) === "true") {
|
|
this._mcursor_data[6] = true;
|
|
}
|
|
this._mcursor_data[11] = Math.min(
|
|
Math.max(Moghunter.mcursor_animationSpeed, 1),
|
|
999
|
|
);
|
|
this.addChild(this._sprite_mcursor);
|
|
this._sprite_mcursor.visible = false;
|
|
$gameTemp._preparedCursor = false;
|
|
};
|
|
|
|
//==============================
|
|
// * Update Menu Cursor
|
|
//==============================
|
|
Scene_Base.prototype.update_mcursor = function () {
|
|
if (this.isBusy()) {
|
|
this._sprite_mcursor.opacity -= 25;
|
|
return;
|
|
}
|
|
if (this._mcursor_data[0] == -1) {
|
|
this.set_mcursor_initial();
|
|
return;
|
|
}
|
|
if ($gameTemp._mcursorData[1] > 0) {
|
|
($gameTemp._mcursorData[1] -= 1), (this._sprite_mcursor.opacity += 45);
|
|
} else {
|
|
this._sprite_mcursor.opacity = 0;
|
|
}
|
|
if (this._mcursor_data[5]) {
|
|
this.update_mcursor_float();
|
|
}
|
|
if (this._mcursor_data[6]) {
|
|
this.update_mcursor_frames();
|
|
}
|
|
var nx =
|
|
$gameTemp._mcursorData[2] + this._mcursor_data[0] + this._mcursor_data[2];
|
|
var ny = $gameTemp._mcursorData[3] + this._mcursor_data[1];
|
|
this._sprite_mcursor.x = this.cursorMoveToSVD(this._sprite_mcursor.x, nx, 5);
|
|
this._sprite_mcursor.y = this.cursorMoveToSVD(this._sprite_mcursor.y, ny, 5);
|
|
if ($gameTemp._preparedCursor && !this._sprite_mcursor.visible) {
|
|
this._sprite_mcursor.x = nx;
|
|
this._sprite_mcursor.y = ny;
|
|
this._sprite_mcursor.visible = true;
|
|
}
|
|
};
|
|
|
|
//==============================
|
|
// * Set Mcursor Initial
|
|
//==============================
|
|
Scene_Base.prototype.set_mcursor_initial = function () {
|
|
if (!this._sprite_mcursor.bitmap.isReady()) {
|
|
return;
|
|
}
|
|
this._mcursor_data[0] = Moghunter.mcursor_x;
|
|
this._mcursor_data[1] =
|
|
this._sprite_mcursor.bitmap.height / 2 + Moghunter.mcursor_y;
|
|
if (this._mcursor_data[6]) {
|
|
this._mcursor_data[7] = Math.floor(
|
|
this._sprite_mcursor.bitmap.width / Moghunter.mcursor_maxframes
|
|
);
|
|
this._mcursor_data[8] = this._sprite_mcursor.bitmap.height;
|
|
}
|
|
};
|
|
|
|
//==============================
|
|
// * Udate Mcursor Frames
|
|
//==============================
|
|
Scene_Base.prototype.update_mcursor_frames = function () {
|
|
this._mcursor_data[10] += 1;
|
|
if (this._mcursor_data[10] < this._mcursor_data[11]) {
|
|
return;
|
|
}
|
|
this._mcursor_data[10] = 0;
|
|
this._sprite_mcursor.setFrame(
|
|
this._mcursor_data[7] * this._mcursor_data[9],
|
|
0,
|
|
this._mcursor_data[7],
|
|
this._mcursor_data[8]
|
|
);
|
|
this._mcursor_data[9] += 1;
|
|
if (this._mcursor_data[9] >= Moghunter.mcursor_maxframes) {
|
|
this._mcursor_data[9] = 0;
|
|
}
|
|
};
|
|
|
|
//==============================
|
|
// * Update Mcursor Float
|
|
//==============================
|
|
Scene_Base.prototype.update_mcursor_float = function () {
|
|
this._mcursor_data[4] += 1;
|
|
if (this._mcursor_data[4] < 2) {
|
|
return;
|
|
}
|
|
this._mcursor_data[4] = 0;
|
|
this._mcursor_data[3] += 1;
|
|
if (this._mcursor_data[3] < 15) {
|
|
this._mcursor_data[2] += 1;
|
|
} else if (this._mcursor_data[3] < 30) {
|
|
this._mcursor_data[2] -= 1;
|
|
} else {
|
|
this._mcursor_data[2] = 0;
|
|
this._mcursor_data[3] = 0;
|
|
}
|
|
};
|
|
|
|
//==============================
|
|
// * cursor Move toSVD
|
|
//==============================
|
|
Scene_Base.prototype.cursorMoveToSVD = function (value, real_value, speed) {
|
|
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);
|
|
};
|
|
|
|
//=============================================================================
|
|
// ** Window Selectable
|
|
//=============================================================================
|
|
|
|
//==============================
|
|
// * Initialize
|
|
//==============================
|
|
var _mog_mcursor_wselect_initialize = Window_Selectable.prototype.initialize;
|
|
Window_Selectable.prototype.initialize = function (x, y, width, height) {
|
|
_mog_mcursor_wselect_initialize.call(this, x, y, width, height);
|
|
this._refCursorIndex = false;
|
|
};
|
|
|
|
//==============================
|
|
// * Update Arrows
|
|
//==============================
|
|
var _mog_mcursor_wSelect_updateArrows =
|
|
Window_Selectable.prototype.updateArrows;
|
|
Window_Selectable.prototype.updateArrows = function () {
|
|
_mog_mcursor_wSelect_updateArrows.call(this);
|
|
if (this.need_set_mcursor_data()) {
|
|
this.set_mcursor_data();
|
|
}
|
|
};
|
|
|
|
//==============================
|
|
// * Need Set MCursor Data
|
|
//==============================x
|
|
Window_Selectable.prototype.need_set_mcursor_data = function () {
|
|
if (!this.active) {
|
|
return false;
|
|
}
|
|
if (!this.visible) {
|
|
return false;
|
|
}
|
|
if (this.index() < 0) {
|
|
return false;
|
|
}
|
|
if (this._opening) {
|
|
return false;
|
|
}
|
|
if (this._closing) {
|
|
return false;
|
|
}
|
|
if (this.openness <= 0) {
|
|
return false;
|
|
}
|
|
if (this.x <= -this.width || this.x >= Graphics.boxWidth) {
|
|
return false;
|
|
}
|
|
if (this.y <= -this.height || this.y >= Graphics.boxHeight) {
|
|
return false;
|
|
}
|
|
if (SceneManager.isSceneChanging()) {
|
|
return false;
|
|
}
|
|
return true;
|
|
};
|
|
|
|
//==============================
|
|
// * Set Mcursor Data
|
|
//==============================
|
|
Window_Selectable.prototype.set_mcursor_data = function () {
|
|
if (!this._refCursorIndex) {
|
|
this._refCursorIndex = true;
|
|
this.select(this.index());
|
|
}
|
|
var rect = this.itemRect(this.index());
|
|
if (
|
|
rect.x < 0 ||
|
|
rect.y < 0 ||
|
|
rect.x > this.width - 48 ||
|
|
rect.y > this.height - 48
|
|
) {
|
|
return;
|
|
}
|
|
$gameTemp._mcursorData[0] = true;
|
|
$gameTemp._mcursorData[1] = 1;
|
|
$gameTemp._mcursorData[2] = this.x + rect.x;
|
|
$gameTemp._mcursorData[3] = this.y + rect.y + rect.height / 2;
|
|
$gameTemp._preparedCursor = true;
|
|
this.updateScrollRoll();
|
|
};
|
|
|
|
//==============================
|
|
// * update SCroll Roll
|
|
//==============================
|
|
Window_Selectable.prototype.updateScrollRoll = function () {
|
|
if (this.isOpenAndActive() && this.maxItems() > 0) {
|
|
var srow = this.maxTopRow() === 0 ? 1 : this.maxCols();
|
|
var threshold = 20;
|
|
var idx = this._index;
|
|
if (TouchInput.wheelY >= threshold) {
|
|
this._index += srow;
|
|
if (this._index > this.maxItems() - 1) {
|
|
this._index = this.maxItems() - 1;
|
|
}
|
|
this.select(this._index);
|
|
if (idx != this._index) {
|
|
SoundManager.playCursor();
|
|
}
|
|
}
|
|
if (TouchInput.wheelY <= -threshold) {
|
|
this._index -= srow;
|
|
if (this._index < 0) {
|
|
this._index = 0;
|
|
}
|
|
this.select(this._index);
|
|
if (idx != this._index) {
|
|
SoundManager.playCursor();
|
|
}
|
|
}
|
|
}
|
|
};
|