princess-synergy/www/js/plugins/JsScript178Set.js
2026-02-05 14:03:22 -06:00

88 lines
3.3 KiB
JavaScript

/*:
* @plugindesc
* @author You
* @help
*/
(function() {
'use strict';
function currentSpriteset() {
const scene = SceneManager._scene;
if (scene && scene._spriteset) return scene._spriteset;
return null;
}
class N_ScreenAnimationSprite extends Sprite_Base {
constructor(data) {
super();
this._data = data;
}
setupAfterAdd() {
const data = this._data;
this.x = Math.round(data.x || 0);
this.y = Math.round(data.y || 0);
const s = (data.scale != null ? Number(data.scale) : 1.0) || 1.0;
this.scale.x = s;
this.scale.y = s;
this._zOrder = (data.z != null ? Number(data.z) : 200) || 200;
this._mirror = !!data.mirror;
this._animId = Number(data.animId);
const anim = $dataAnimations[this._animId];
if (anim) {
this.startAnimation(anim, this._mirror, 0);
} else {
this._dead = true;
}
}
update() {
super.update();
if (this._dead || !this.isAnimationPlaying()) {
if (this.parent) this.parent.removeChild(this);
this.destroy({ children: true });
}
}
isAnimationPlaying() {
const list = this._animationSprites;
return list && list.length > 0;
}
z() { return this._zOrder; }
}
const ScreenAnim = {
_queue: [],
play(x, y, animId, opts) {
const spriteset = currentSpriteset();
if (!spriteset) return;
const container =
spriteset._effectsContainer ||
spriteset._baseSprite ||
spriteset;
const data = {
x: Number(x),
y: Number(y),
animId: Number(animId),
mirror: !!(opts && opts.mirror),
scale: (opts && opts.scale != null) ? Number(opts.scale) : 1.0,
z: (opts && opts.z != null) ? Number(opts.z) : 200
};
const spr = new N_ScreenAnimationSprite(data);
spr.z = spr.z();
container.addChild(spr);
spr.setupAfterAdd();
if (container.children && typeof container.children.sort === 'function') {
container.children.sort((a, b) => (a.z || 0) - (b.z || 0));
}
}
};
window.ScreenAnim = ScreenAnim;
const _Game_Interpreter_pluginCommand = Game_Interpreter.prototype.pluginCommand;
Game_Interpreter.prototype.pluginCommand = function(command, args) {
_Game_Interpreter_pluginCommand.call(this, command, args);
if (command === 'ScreenAnim') {
const x = Number(args[0] || 0);
const y = Number(args[1] || 0);
const animId = Number(args[2] || 1);
const mirror = args.length >= 4 ? Number(args[3]) !== 0 : false;
const scale = args.length >= 5 ? Number(args[4]) : 1.0;
const z = args.length >= 6 ? Number(args[5]) : 200;
ScreenAnim.play(x, y, animId, { mirror, scale, z });
}
};
})();