330 lines
11 KiB
JavaScript
330 lines
11 KiB
JavaScript
//=============================================================================
|
|
// TDS Particles
|
|
// Version: 1.0
|
|
//=============================================================================
|
|
// Add to Imported List
|
|
var Imported = Imported || {} ; Imported.TDS_Particles = true;
|
|
// Initialize Alias Object
|
|
var _TDS_ = _TDS_ || {} ; _TDS_.Particles = _TDS_.Particles || {};
|
|
//=============================================================================
|
|
/*:
|
|
* @plugindesc
|
|
* Particle system.
|
|
*
|
|
* @author TDS
|
|
*
|
|
*/
|
|
//=============================================================================
|
|
|
|
|
|
|
|
|
|
//=============================================================================
|
|
// ** Sprite_Particle
|
|
//-----------------------------------------------------------------------------
|
|
// This sprite class is used to draw and process particle sprites.
|
|
//=============================================================================
|
|
function Sprite_Particle() { this.initialize.apply(this, arguments); };
|
|
Sprite_Particle.prototype = Object.create(Sprite.prototype);
|
|
Sprite_Particle.prototype.constructor = Sprite_Particle;
|
|
//=============================================================================
|
|
// * Initialize Object
|
|
//=============================================================================
|
|
Sprite_Particle.prototype.initialize = function(bitmap) {
|
|
// Super Call
|
|
Sprite.prototype.initialize.call(this, bitmap);
|
|
// Phase Index
|
|
this._phaseIndex = 0;
|
|
// Phases
|
|
this._phases = []
|
|
};
|
|
//=============================================================================
|
|
// * Setup
|
|
//=============================================================================
|
|
Sprite_Particle.prototype.setup = function(phases) {
|
|
// Clone Phases
|
|
this._phases = phases.clone();
|
|
};
|
|
//=============================================================================
|
|
// * Determine if Finished
|
|
//=============================================================================
|
|
Sprite_Particle.prototype.isFinished = function() { return this._phaseIndex >= this._phases.length; };
|
|
//=============================================================================
|
|
// * Frame Update
|
|
//=============================================================================
|
|
Sprite_Particle.prototype.update = function() {
|
|
// Super Call
|
|
Sprite.prototype.update.call(this);
|
|
// Get Current Phase
|
|
var phase = this._phases[this._phaseIndex];
|
|
// If Phase Exists
|
|
if (phase) {
|
|
// Update Phase
|
|
this.updatePhase(phase);
|
|
// If Phase is Finished
|
|
if (phase.duration <= 0) {
|
|
// Increase Phase Index
|
|
this._phaseIndex++
|
|
};
|
|
};
|
|
};
|
|
//=============================================================================
|
|
// * Frame Update
|
|
//=============================================================================
|
|
Sprite_Particle.prototype.updatePhase = function(phase) {
|
|
// Decrease Phase Duration
|
|
phase.duration--
|
|
// If Phase as a Function
|
|
if (phase.functStart) { phase.functStart.call(this, phase); };
|
|
this.x += phase.x;
|
|
this.y += phase.y;
|
|
this.rotation += phase.rotation * (Math.PI / 360);
|
|
this.opacity += phase.opacity;
|
|
this.scale.x += phase.scaleX;
|
|
this.scale.y += phase.scaleY;
|
|
// If Phase as a Function
|
|
if (phase.functEnd) { phase.functEnd.call(this, phase); };
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//=============================================================================
|
|
// ** Sprite_BattleFaceStatusEmitter
|
|
//-----------------------------------------------------------------------------
|
|
// This sprite is used to display battle face status particles.
|
|
//=============================================================================
|
|
function Sprite_BattleFaceStatusEmitter() { this.initialize.apply(this, arguments); };
|
|
Sprite_BattleFaceStatusEmitter.prototype = Object.create(Sprite.prototype);
|
|
Sprite_BattleFaceStatusEmitter.prototype.constructor = Sprite_BattleFaceStatusEmitter;
|
|
//=============================================================================
|
|
// * Initialize Object
|
|
//=============================================================================
|
|
Sprite_BattleFaceStatusEmitter.prototype.initialize = function() {
|
|
// Super Call
|
|
Sprite.prototype.initialize.call(this);
|
|
// Clear Values
|
|
this.clear();
|
|
// Deactivate
|
|
this.deactivate();
|
|
|
|
|
|
|
|
// this.setupGenerator('suns')
|
|
// this.activate();
|
|
};
|
|
//=============================================================================
|
|
// * Activate & Deactivate
|
|
//=============================================================================
|
|
Sprite_BattleFaceStatusEmitter.prototype.activate = function() { this._active = true;};
|
|
Sprite_BattleFaceStatusEmitter.prototype.deactivate = function() { this._active = false;};
|
|
//=============================================================================
|
|
// * Clear
|
|
//=============================================================================
|
|
Sprite_BattleFaceStatusEmitter.prototype.clear = function() {
|
|
// Set Intensity (How many sprites to spawn each time)
|
|
this._intensity = 1;
|
|
this._intensityVariance = 0;
|
|
// Set Generation Type
|
|
this._generateFunct = null;
|
|
// Set Spawn Timer
|
|
this._spawnTimer = 0;
|
|
this._spawnTimerVariance = 0;
|
|
this._spawnTimerCount = this._spawnTimer;
|
|
// Set Child Limit
|
|
this._childLimit = 0;
|
|
};
|
|
//=============================================================================
|
|
// * Setup generator
|
|
//=============================================================================
|
|
Sprite_BattleFaceStatusEmitter.prototype.setupGenerator = function(type, settings = {}) {
|
|
// Clear
|
|
this.clear();
|
|
// Switch Type Case
|
|
switch (type.toLowerCase()) {
|
|
case 'angrytest':
|
|
this._intensity = 1;
|
|
this._intensityVariance = 0;
|
|
// Set Generation Type
|
|
this._generateFunct = this.generateAngry;
|
|
// Set Spawn Timer
|
|
this._spawnTimer = 10;
|
|
this._spawnTimerVariance = 0;
|
|
this._spawnTimerCount = this._spawnTimer;
|
|
// Set Child Limit
|
|
this._childLimit = 20;
|
|
break;
|
|
}
|
|
|
|
};
|
|
//=============================================================================
|
|
// * Generate Angry
|
|
//=============================================================================
|
|
Sprite_BattleFaceStatusEmitter.prototype.generateAngry = function() {
|
|
// Get Bitmap
|
|
var bitmap = ImageManager.loadPicture('StatusParticles');
|
|
// Create Sprite
|
|
var sprite = new Sprite_Particle(bitmap);
|
|
sprite.anchor.set(0.5, 0.5)
|
|
sprite.x = (Math.round(Math.random()) * 2 - 1) * Math.randomInt(45)
|
|
sprite.y = 0
|
|
sprite.setFrame(30, 30, 30, 31)
|
|
sprite.opacity = 0;
|
|
sprite.scale.set(0, 0);
|
|
this.addChild(sprite);
|
|
|
|
|
|
// Set Unique Sprite Values
|
|
sprite._baseX = sprite.x;
|
|
sprite._angryOffset = Math.randomInt(5)
|
|
sprite._angrySpeed = 1.5 + (Math.randomInt(100) / 100);
|
|
|
|
// Create Shake Function
|
|
var shakeFunct = function() {
|
|
// Shake Sprite X value
|
|
this.x = sprite._baseX + (Math.sin((Graphics.frameCount + sprite._angryOffset) * sprite._angrySpeed) * 3);
|
|
};
|
|
// Initialize Phase
|
|
var phases = [];
|
|
// Set Phase Values
|
|
var xSpeed = 0;
|
|
var ySpeed = -(1 + Math.randomInt(1));
|
|
var rotation = 0
|
|
|
|
// Appear Phase
|
|
var phase = {duration: 10, x: xSpeed, y: ySpeed, rotation: rotation, opacity: 26, scaleX: 0.1, scaleY: 0.1}
|
|
phase.functEnd = shakeFunct;
|
|
phases.push(phase);
|
|
|
|
// Main Phase (Move up)
|
|
var phase = {duration: 30, x: xSpeed, y: ySpeed * 2, rotation: rotation, opacity: 0, scaleX: 0, scaleY: 0}
|
|
phase.functEnd = shakeFunct;
|
|
phases.push(phase);
|
|
|
|
// Disappear Phase (Explode rotating)
|
|
var phase = {duration: 10, x: xSpeed, y: ySpeed, rotation: 30, opacity: -26, scaleX: 0.1, scaleY: 0.1}
|
|
phase.functEnd = shakeFunct;
|
|
phases.push(phase);
|
|
// Setup Particle Phases
|
|
sprite.setup(phases)
|
|
};
|
|
//=============================================================================
|
|
// * Frame Update
|
|
//=============================================================================
|
|
Sprite_BattleFaceStatusEmitter.prototype.update = function() {
|
|
// Super Call
|
|
Sprite.prototype.update.call(this);
|
|
// If Children Exists
|
|
if (this.children.length > 0) {
|
|
// Go Through Children
|
|
this.children.forEach(function(particle) {
|
|
// Remove Child if Finished
|
|
if (particle.isFinished()) { this.removeChild(particle); };
|
|
}, this);
|
|
};
|
|
// If Active
|
|
if (this._active) {
|
|
// If Children Length exceeds child limit
|
|
if (this.children.length >= this._childLimit) { return; }
|
|
|
|
// If Spawn Timer is not null
|
|
if (this._spawnTimerCount !== null) {
|
|
// Reduce Spawn Timer Count
|
|
this._spawnTimerCount--;
|
|
// If Timer is 0 or less
|
|
if (this._spawnTimerCount <= 0) {
|
|
// Set Spawn Timer Count
|
|
this._spawnTimerCount = this._spawnTimer + Math.randomInt(this._spawnTimerVariance);
|
|
} else {
|
|
return;
|
|
};
|
|
}
|
|
|
|
// Call Generation Function
|
|
if (this._generateFunct) {
|
|
// Generate Amount of Sprites
|
|
for (var i = 0; i < this._intensity + Math.randomInt(this._intensityVariance); i++) {
|
|
// Run Generation Function
|
|
this._generateFunct();
|
|
};
|
|
};
|
|
};
|
|
};
|
|
|
|
|
|
|
|
|
|
//=============================================================================
|
|
// * Generate
|
|
//=============================================================================
|
|
Sprite_BattleFaceStatusEmitter.prototype.generate = function() {
|
|
|
|
var bitmap = ImageManager.loadPicture('StatusParticles');
|
|
|
|
var sprite = new Sprite_Particle(bitmap);
|
|
sprite.anchor.set(0.5, 0.5)
|
|
sprite.x = (Math.round(Math.random()) * 2 - 1) * Math.randomInt(50)
|
|
sprite.y = Math.randomInt(5);
|
|
sprite.setFrame(30, 30, 30, 31)
|
|
sprite.opacity = 0;
|
|
sprite.scale.set(0, 0);
|
|
this.addChild(sprite);
|
|
|
|
// sprite.opacity = 0;
|
|
// sprite.scale.x = sprite.scale.y = 0;
|
|
// sprite.blendMode = Math.random() > 0.5 ? Graphics.BLEND_ADD : 0;
|
|
// sprite.setBlendColor([219, 10, 91, 100]);
|
|
|
|
|
|
|
|
var phases = [];
|
|
|
|
sprite._sadSpeed = Math.randomInt(10) / 100
|
|
|
|
var shakeFunct = function() {
|
|
|
|
this.x = sprite._baseX + (Math.sin(Graphics.frameCount * sprite._sadSpeed) * 3);
|
|
// this.x = this._baseX + (Math.round(Math.random()) * 2 - 1) * Math.randomInt(3)
|
|
}
|
|
|
|
|
|
var xSpeed = 0;
|
|
var ySpeed = 0//- (1 + Math.randomInt(1))
|
|
|
|
sprite.x = (Math.round(Math.random()) * 2 - 1) * Math.randomInt(30)
|
|
sprite.y = -80;
|
|
sprite.y += Math.randomInt(10)
|
|
sprite.setFrame(90, 30, 30, 31)
|
|
|
|
sprite._baseX = sprite.x;
|
|
|
|
// Appear Phase
|
|
var phase = {duration: 10, x: xSpeed, y: ySpeed, rotation: 0, opacity: 26, scaleX: 0.1, scaleY: 0.1}
|
|
phase.functEnd = shakeFunct;
|
|
phases.push(phase);
|
|
|
|
var phase = {duration: 60, x: xSpeed, y: ySpeed, rotation: 0, opacity: 0, scaleX: 0, scaleY: 0}
|
|
phase.functEnd = shakeFunct;
|
|
phases.push(phase);
|
|
|
|
|
|
var phase = {duration: 10, x: xSpeed, y: ySpeed, rotation: 10 + Math.randomInt(10), opacity: -26, scaleX: -0.1, scaleY: -0.1}
|
|
phase.functEnd = shakeFunct;
|
|
|
|
phases.push(phase);
|
|
|
|
|
|
// Setup Particle Phases
|
|
sprite.setup(phases)
|
|
};
|
|
|