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

262 lines
8.1 KiB
JavaScript

// Copyright (c) 2017 Sanshiro
// http://opensource.org/licenses/mit-license.php
/*:
* @plugindesc
* キャラクターの残像スプライトを生成します。
* @author サンシロ https://twitter.com/rev2nym
* @version 1.0.2 2017/02/23 ヘルプの誤りを修正。
* 1.0.1 2017/02/23 セーブデータ互換対策。
* 1.0.0 2017/02/23 作成
*
* @help
*/
var Imported = Imported || {};
Imported.SAN_ResidualSprites = true;
var Sanshiro = Sanshiro || {};
Sanshiro.ResidualSprites = Sanshiro.ResidualSprites || {};
Sanshiro.ResidualSprites.version = '1.0.2';
(function(SAN) {
'use strict';
function Residual() {
this.initialize.apply(this, arguments);
}
Residual.prototype.initialize = function() {
this._version = SAN.ResidualSprites.version;
this._valid = false;
this._aliveCount = 0;
this._period = 4;
this._duration = 30;
this._colorTone = [0, 0, 255, 255];
this._opacity = 128;
};
Residual.prototype.isCurrentVersion = function() {
return this._version === SAN.ResidualSprites.version;
};
Residual.prototype.setValid = function(valid) {
this._valid = valid;
this._count = 0;
};
Residual.prototype.valid = function() {
return this._valid;
};
Residual.prototype.setPeriod = function(period) {
this._period = period;
};
Residual.prototype.setDuration = function(duration) {
this._duration = duration;
};
Residual.prototype.duration = function() {
return this._duration;
};
Residual.prototype.setColorTone = function(colorTone) {
this._colorTone = colorTone;
};
Residual.prototype.colorTone = function() {
return this._colorTone;
};
Residual.prototype.setOpacity = function(opacity) {
this._opacity = opacity;
};
Residual.prototype.opacity = function() {
return this._opacity;
};
Residual.prototype.update = function() {
if (this._valid) {
this._aliveCount += 1;
}
};
Residual.prototype.needs = function() {
return this._valid && this._aliveCount % this._period === 0;
};
var _Game_Character_initMembers = Game_Character.prototype.initMembers;
Game_Character.prototype.initMembers = function() {
_Game_Character_initMembers.call(this);
this.initResidual();
};
Game_Character.prototype.initResidual = function() {
this._residual = new Residual();
};
Game_Character.prototype.residual = function() {
if (!this._residual ||
!this._residual.isCurrentVersion ||
!this._residual.isCurrentVersion())
{
this.initResidual();
}
return this._residual;
};
Game_Character.prototype.updateResidual = function() {
this.residual().update();
};
var _Game_Battler_initMembers = Game_Battler.prototype.initMembers;
Game_Battler.prototype.initMembers = function() {
_Game_Battler_initMembers.call(this);
this.initResidual();
};
Game_Battler.prototype.initResidual = function() {
this._residual = new Residual();
};
Game_Battler.prototype.residual = function() {
if (!this._residual ||
!this._residual.isCurrentVersion ||
!this._residual.isCurrentVersion())
{
this.initResidual();
}
return this._residual;
};
Game_Battler.prototype.updateResidual = function() {
this.residual().update();
};
Sprite.prototype.frame = function() {
return this._frame;
};
function Sprite_Residual() {
this.initialize.apply(this, arguments);
}
Sprite_Residual.prototype = Object.create(Sprite.prototype);
Sprite_Residual.prototype.constructor = Sprite_Residual;
Sprite_Residual.prototype.initialize = function() {
Sprite.prototype.initialize.call(this);
this.initMembers();
};
Sprite_Residual.prototype.initMembers = function() {
this._orgX = 0.0;
this._orgY = 0.0;
this._orgOpacity = 0;
this._duration = 0;
this._aliveCount = 0;
};
Sprite_Residual.prototype.setup =
function(containerSprite, sourceSprite, colorTone, opacity, duration)
{
this.setupPosition(containerSprite);
this.setupBitmap(sourceSprite);
this.setColorTone(colorTone);
this._orgOpacity = opacity;
this._duration = duration;
this._aliveCount = 0;
};
Sprite_Residual.prototype.setupPosition = function(sourceSprite) {
this.x = sourceSprite.x;
this.y = sourceSprite.y;
this.z = sourceSprite.z ? sourceSprite.z - 0.5 : 0.0;
this._orgX = this.x;
this._orgY = this.y;
if (!!sourceSprite.parent.origin) {
this._orgX += sourceSprite.parent.origin.x;
this._orgY += sourceSprite.parent.origin.y;
}
this.scale.x = sourceSprite.scale.x;
this.scale.y = sourceSprite.scale.y;
this.anchor.x = sourceSprite.anchor.x;
this.anchor.y = sourceSprite.anchor.y;
this.rotation = sourceSprite.rotation;
};
Sprite_Residual.prototype.setupBitmap = function(sourceSprite) {
var frame = sourceSprite.frame();
if (frame.width !== 0 && frame.height !== 0) {
this.bitmap = sourceSprite.bitmap;
this.setFrame(frame.x, frame.y, frame.width, frame.height);
}
};
Sprite_Residual.prototype.isAlive = function() {
return this._aliveCount < this._duration;
};
Sprite_Residual.prototype.update = function() {
this.updatePosition();
this.updateOpacity();
this.updateAlive();
Sprite.prototype.update.call(this);
};
Sprite_Residual.prototype.updatePosition = function() {
if (!!this.parent.origin) {
this.x = this._orgX - this.parent.origin.x;
this.y = this._orgY - this.parent.origin.y;
}
};
Sprite_Residual.prototype.updateOpacity = function() {
this.opacity = this._orgOpacity * (1.0 - (this._aliveCount / this._duration));
};
Sprite_Residual.prototype.updateAlive = function() {
if (this.isAlive()) {
this._aliveCount++;
} else {
this.parent.removeChild(this);
}
};
var _Sprite_Character_update = Sprite_Character.prototype.update;
Sprite_Character.prototype.update = function() {
_Sprite_Character_update.call(this)
this.updateResidual();
};
Sprite_Character.prototype.updateResidual = function() {
this._character.updateResidual();
if (this._character.residual().needs()) {
this.createResidualSprite();
}
};
Sprite_Character.prototype.createResidualSprite = function() {
var residual = this._character.residual();
var residualSprite = new Sprite_Residual();
residualSprite.setup(
this,
this,
residual.colorTone(),
residual.opacity(),
residual.duration()
);
var index = this.parent.getChildIndex(this);
this.parent.addChildAt(residualSprite, index);
};
var _Sprite_Actor_update = Sprite_Actor.prototype.update;
Sprite_Actor.prototype.update = function() {
_Sprite_Actor_update.call(this)
this.updateResidual();
};
Sprite_Actor.prototype.updateResidual = function() {
if (!!this._actor) {
this._actor.updateResidual();
if (this._actor.residual().needs()) {
this.createResidualSprite();
}
}
};
Sprite_Actor.prototype.createResidualSprite = function() {
var residual = this._actor.residual();
var residualSprite = new Sprite_Residual();
residualSprite.setup(
this,
this._mainSprite,
residual.colorTone(),
residual.opacity(),
residual.duration()
);
var index = this.parent.getChildIndex(this);
this.parent.addChildAt(residualSprite, index);
};
var _Sprite_Enemy_update = Sprite_Enemy.prototype.update;
Sprite_Enemy.prototype.update = function() {
_Sprite_Enemy_update.call(this)
this.updateResidual();
};
Sprite_Enemy.prototype.updateResidual = function() {
this._battler.updateResidual();
if (this._battler.residual().needs()) {
this.createResidualSprite();
}
};
Sprite_Enemy.prototype.createResidualSprite = function() {
var residual = this._battler.residual();
var residualSprite = new Sprite_Residual();
residualSprite.setup(
this,
this,
residual.colorTone(),
residual.opacity(),
residual.duration()
);
var index = this.parent.getChildIndex(this);
this.parent.addChildAt(residualSprite, index);
};
}) (Sanshiro);