258 lines
7.6 KiB
JavaScript
258 lines
7.6 KiB
JavaScript
/**
|
|
* Raw Particle API object - should always correspond with the Particle Schema
|
|
* @param id
|
|
* @param name
|
|
* @param lifeTime
|
|
* @param elapsed
|
|
* @param mesh
|
|
* @param opacityType
|
|
* @param fadeInFactor
|
|
* @param fadeOutFactor
|
|
* @param positionOffsetType
|
|
* @param positionOffset
|
|
* @param positionOffsetFn
|
|
* @param directionType
|
|
* @param rotation
|
|
* @param scale
|
|
* @param direction
|
|
* @param directionFn
|
|
* @param speedType
|
|
* @param speed
|
|
* @param scaleFn
|
|
* @param scaleType
|
|
* @param rotationType
|
|
* @param rotationFn
|
|
* @param parentParticleEngine
|
|
* @param parentEntity
|
|
* @constructor
|
|
*/
|
|
GameLib.D3.API.Particle = function(
|
|
id,
|
|
name,
|
|
lifeTime,
|
|
elapsed,
|
|
mesh,
|
|
opacityType,
|
|
fadeInFactor,
|
|
fadeOutFactor,
|
|
positionOffsetType,
|
|
positionOffset,
|
|
positionOffsetFn,
|
|
directionType,
|
|
direction,
|
|
directionFn,
|
|
speedType,
|
|
speed,
|
|
scaleType,
|
|
scale,
|
|
scaleFn,
|
|
rotationType,
|
|
rotation,
|
|
rotationFn,
|
|
parentParticleEngine,
|
|
parentEntity
|
|
) {
|
|
|
|
if (GameLib.Utils.UndefinedOrNull(id)) {
|
|
id = GameLib.Utils.RandomId();
|
|
}
|
|
this.id = id;
|
|
|
|
if (GameLib.Utils.UndefinedOrNull(name)) {
|
|
name = 'Particle (' + this.id + ')';
|
|
}
|
|
this.name = name;
|
|
|
|
if (GameLib.Utils.UndefinedOrNull(lifeTime)) {
|
|
lifeTime = 10;
|
|
}
|
|
this.lifeTime = lifeTime;
|
|
|
|
if (GameLib.Utils.UndefinedOrNull(elapsed)) {
|
|
elapsed = 0;
|
|
}
|
|
this.elapsed = elapsed;
|
|
|
|
if (GameLib.Utils.UndefinedOrNull(mesh)) {
|
|
mesh = null;
|
|
}
|
|
this.mesh = mesh;
|
|
|
|
if (GameLib.Utils.UndefinedOrNull(opacityType)) {
|
|
opacityType = GameLib.D3.API.Particle.OPACITY_TYPE_CONSTANT;
|
|
}
|
|
this.opacityType = opacityType;
|
|
|
|
if (GameLib.Utils.UndefinedOrNull(fadeInFactor)) {
|
|
fadeInFactor = 0.01;
|
|
}
|
|
this.fadeInFactor = fadeInFactor;
|
|
|
|
if (GameLib.Utils.UndefinedOrNull(fadeOutFactor)) {
|
|
fadeOutFactor = 0.01;
|
|
}
|
|
this.fadeOutFactor = fadeOutFactor;
|
|
|
|
if (GameLib.Utils.UndefinedOrNull(positionOffsetType)) {
|
|
positionOffsetType = GameLib.D3.API.Particle.POSITION_OFFSET_TYPE_CONSTANT;
|
|
}
|
|
this.positionOffsetType = positionOffsetType;
|
|
|
|
if (GameLib.Utils.UndefinedOrNull(positionOffset)) {
|
|
positionOffset = new GameLib.API.Vector3(0, 0, 0);
|
|
}
|
|
this.positionOffset = positionOffset;
|
|
|
|
if (GameLib.Utils.UndefinedOrNull(positionOffsetFn)) {
|
|
positionOffsetFn = '//@ sourceURL=positionOffsetFn.js';
|
|
}
|
|
this.positionOffsetFn = positionOffsetFn;
|
|
|
|
if (GameLib.Utils.UndefinedOrNull(directionType)) {
|
|
directionType = GameLib.D3.API.Particle.DIRECTION_TYPE_CONSTANT;
|
|
}
|
|
this.directionType = directionType;
|
|
|
|
if (GameLib.Utils.UndefinedOrNull(direction)) {
|
|
direction = new GameLib.API.Vector3(0, 1, 0);
|
|
}
|
|
this.direction = direction;
|
|
|
|
if (GameLib.Utils.UndefinedOrNull(directionFn)) {
|
|
directionFn = '//@ sourceURL=directionFn.js';
|
|
}
|
|
this.directionFn = directionFn;
|
|
|
|
if (GameLib.Utils.UndefinedOrNull(speedType)) {
|
|
speedType = GameLib.D3.API.Particle.SPEED_TYPE_CONSTANT;
|
|
}
|
|
this.speedType = speedType;
|
|
|
|
if (GameLib.Utils.UndefinedOrNull(speed)) {
|
|
speed = 1;
|
|
}
|
|
this.speed = speed;
|
|
|
|
if (GameLib.Utils.UndefinedOrNull(scaleType)) {
|
|
scaleType = GameLib.D3.API.Particle.SCALE_TYPE_CONSTANT;
|
|
}
|
|
this.scaleType = scaleType;
|
|
|
|
if (GameLib.Utils.UndefinedOrNull(scale)) {
|
|
scale = new GameLib.API.Vector3(1, 1, 1);
|
|
}
|
|
this.scale = scale;
|
|
|
|
if (GameLib.Utils.UndefinedOrNull(scaleFn)) {
|
|
scaleFn = '//@ sourceURL=scaleFn.js';
|
|
}
|
|
this.scaleFn = scaleFn;
|
|
|
|
if (GameLib.Utils.UndefinedOrNull(rotationType)) {
|
|
rotationType = GameLib.D3.API.Particle.ROTATION_TYPE_CONSTANT;
|
|
}
|
|
this.rotationType = rotationType;
|
|
|
|
if (GameLib.Utils.UndefinedOrNull(rotation)) {
|
|
rotation = new GameLib.API.Vector3(0, 0, 0);
|
|
}
|
|
this.rotation = rotation;
|
|
|
|
if (GameLib.Utils.UndefinedOrNull(rotationFn)) {
|
|
rotationFn = '//@ sourceURL=rotationFn.js';
|
|
}
|
|
this.rotationFn = rotationFn;
|
|
|
|
if (GameLib.Utils.UndefinedOrNull(parentParticleEngine)) {
|
|
parentParticleEngine = null;
|
|
}
|
|
this.parentParticleEngine = parentParticleEngine;
|
|
|
|
GameLib.API.Component.call(
|
|
this,
|
|
GameLib.Component.PARTICLE,
|
|
parentEntity
|
|
);
|
|
};
|
|
|
|
GameLib.D3.API.Particle.prototype = Object.create(GameLib.API.Component.prototype);
|
|
GameLib.D3.API.Particle.prototype.constructor = GameLib.D3.API.Particle;
|
|
|
|
GameLib.D3.API.Particle.OPACITY_TYPE_CONSTANT = 0x1;
|
|
GameLib.D3.API.Particle.OPACITY_TYPE_FADE_OUT_LINEAR = 0x2;
|
|
GameLib.D3.API.Particle.OPACITY_TYPE_FADE_IN_LINEAR = 0x3;
|
|
GameLib.D3.API.Particle.OPACITY_TYPE_FADE_IN_OUT_LINEAR = 0x4;
|
|
|
|
GameLib.D3.API.Particle.POSITION_OFFSET_TYPE_CONSTANT = 0x1;
|
|
GameLib.D3.API.Particle.POSITION_OFFSET_TYPE_RANDOM = 0x2;
|
|
GameLib.D3.API.Particle.POSITION_OFFSET_TYPE_FUNCTION = 0x3;
|
|
|
|
GameLib.D3.API.Particle.DIRECTION_TYPE_CONSTANT = 0x1;
|
|
GameLib.D3.API.Particle.DIRECTION_TYPE_RANDOM = 0x2;
|
|
GameLib.D3.API.Particle.DIRECTION_TYPE_RANDOM_NORMALIZED = 0x3;
|
|
GameLib.D3.API.Particle.DIRECTION_TYPE_FUNCTION = 0x4;
|
|
|
|
GameLib.D3.API.Particle.SCALE_TYPE_CONSTANT = 0x1;
|
|
GameLib.D3.API.Particle.SCALE_TYPE_LINEAR = 0x2;
|
|
GameLib.D3.API.Particle.SCALE_TYPE_EXPONENTIAL = 0x3;
|
|
GameLib.D3.API.Particle.SCALE_TYPE_RANDOM = 0x4;
|
|
GameLib.D3.API.Particle.SCALE_TYPE_RANDOM_X_EQUALS_Y = 0x6;
|
|
GameLib.D3.API.Particle.SCALE_TYPE_FUNCTION = 0x7;
|
|
|
|
GameLib.D3.API.Particle.SPEED_TYPE_CONSTANT = 0x1;
|
|
GameLib.D3.API.Particle.SPEED_TYPE_LINEAR = 0x2;
|
|
GameLib.D3.API.Particle.SPEED_TYPE_EXPONENTIAL = 0x3;
|
|
GameLib.D3.API.Particle.SPEED_TYPE_LOGARITHMIC = 0x4;
|
|
GameLib.D3.API.Particle.SPEED_TYPE_ONE_OVER_LOG = 0x5;
|
|
GameLib.D3.API.Particle.SPEED_TYPE_EXP = 0x6;
|
|
GameLib.D3.API.Particle.SPEED_TYPE_ONE_OVER_EXP = 0x7;
|
|
|
|
GameLib.D3.API.Particle.ROTATION_TYPE_CONSTANT = 0x1;
|
|
GameLib.D3.API.Particle.ROTATION_TYPE_RANDOM = 0x2;
|
|
GameLib.D3.API.Particle.ROTATION_TYPE_FUNCTION = 0x3;
|
|
|
|
/**
|
|
* Creates an API Particle from an Object Particle
|
|
* @param objectParticle
|
|
* @constructor
|
|
*/
|
|
GameLib.D3.API.Particle.FromObject = function(objectParticle) {
|
|
|
|
var apiMesh = null;
|
|
if (objectParticle.mesh) {
|
|
if (objectParticle.mesh instanceof Object) {
|
|
apiMesh = GameLib.D3.API.Mesh.FromObject(objectParticle.mesh);
|
|
} else {
|
|
apiMesh = objectParticle.mesh;
|
|
}
|
|
}
|
|
|
|
return new GameLib.D3.API.Particle(
|
|
objectParticle.id,
|
|
objectParticle.name,
|
|
objectParticle.lifeTime,
|
|
objectParticle.elapsed,
|
|
apiMesh,
|
|
objectParticle.opacityType,
|
|
objectParticle.fadeInFactor,
|
|
objectParticle.fadeOutFactor,
|
|
objectParticle.positionOffsetType,
|
|
GameLib.API.Vector3.FromObject(objectParticle.positionOffset),
|
|
objectParticle.positionOffsetFn,
|
|
objectParticle.directionType,
|
|
GameLib.API.Vector3.FromObject(objectParticle.direction),
|
|
objectParticle.directionFn,
|
|
objectParticle.speedType,
|
|
objectParticle.speed,
|
|
objectParticle.scaleType,
|
|
GameLib.API.Vector3.FromObject(objectParticle.scale),
|
|
objectParticle.scaleFn,
|
|
objectParticle.rotationType,
|
|
GameLib.API.Vector3.FromObject(objectParticle.rotation),
|
|
objectParticle.rotationFn,
|
|
objectParticle.parentParticleEngine,
|
|
objectParticle.parentEntity
|
|
);
|
|
|
|
};
|