262 lines
8.1 KiB
JavaScript
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);
|