particles can fade in / out now - linking parentParticleEngines properly
parent
de0cad37ab
commit
a09db70d07
|
@ -6,7 +6,8 @@
|
||||||
* @param elapsed
|
* @param elapsed
|
||||||
* @param mesh
|
* @param mesh
|
||||||
* @param opacityType
|
* @param opacityType
|
||||||
* @param opacityFactor
|
* @param fadeInFactor
|
||||||
|
* @param fadeOutFactor
|
||||||
* @param positionOffsetType
|
* @param positionOffsetType
|
||||||
* @param positionOffset
|
* @param positionOffset
|
||||||
* @param positionOffsetFn
|
* @param positionOffsetFn
|
||||||
|
@ -32,7 +33,8 @@ GameLib.D3.API.Particle = function(
|
||||||
elapsed,
|
elapsed,
|
||||||
mesh,
|
mesh,
|
||||||
opacityType,
|
opacityType,
|
||||||
opacityFactor,
|
fadeInFactor,
|
||||||
|
fadeOutFactor,
|
||||||
positionOffsetType,
|
positionOffsetType,
|
||||||
positionOffset,
|
positionOffset,
|
||||||
positionOffsetFn,
|
positionOffsetFn,
|
||||||
|
@ -77,17 +79,22 @@ GameLib.D3.API.Particle = function(
|
||||||
this.mesh = mesh;
|
this.mesh = mesh;
|
||||||
|
|
||||||
if (GameLib.Utils.UndefinedOrNull(opacityType)) {
|
if (GameLib.Utils.UndefinedOrNull(opacityType)) {
|
||||||
opacityType = GameLib.D3.Particle.OPACITY_TYPE_CONSTANT;
|
opacityType = GameLib.D3.API.Particle.OPACITY_TYPE_CONSTANT;
|
||||||
}
|
}
|
||||||
this.opacityType = opacityType;
|
this.opacityType = opacityType;
|
||||||
|
|
||||||
if (GameLib.Utils.UndefinedOrNull(opacityFactor)) {
|
if (GameLib.Utils.UndefinedOrNull(fadeInFactor)) {
|
||||||
opacityFactor = 0.01;
|
fadeInFactor = 0.01;
|
||||||
}
|
}
|
||||||
this.opacityFactor = opacityFactor;
|
this.fadeInFactor = fadeInFactor;
|
||||||
|
|
||||||
|
if (GameLib.Utils.UndefinedOrNull(fadeOutFactor)) {
|
||||||
|
fadeOutFactor = 0.01;
|
||||||
|
}
|
||||||
|
this.fadeOutFactor = fadeOutFactor;
|
||||||
|
|
||||||
if (GameLib.Utils.UndefinedOrNull(positionOffsetType)) {
|
if (GameLib.Utils.UndefinedOrNull(positionOffsetType)) {
|
||||||
positionOffsetType = GameLib.D3.Particle.POSITION_OFFSET_TYPE_CONSTANT;
|
positionOffsetType = GameLib.D3.API.Particle.POSITION_OFFSET_TYPE_CONSTANT;
|
||||||
}
|
}
|
||||||
this.positionOffsetType = positionOffsetType;
|
this.positionOffsetType = positionOffsetType;
|
||||||
|
|
||||||
|
@ -102,7 +109,7 @@ GameLib.D3.API.Particle = function(
|
||||||
this.positionOffsetFn = positionOffsetFn;
|
this.positionOffsetFn = positionOffsetFn;
|
||||||
|
|
||||||
if (GameLib.Utils.UndefinedOrNull(directionType)) {
|
if (GameLib.Utils.UndefinedOrNull(directionType)) {
|
||||||
directionType = GameLib.D3.Particle.DIRECTION_TYPE_CONSTANT;
|
directionType = GameLib.D3.API.Particle.DIRECTION_TYPE_CONSTANT;
|
||||||
}
|
}
|
||||||
this.directionType = directionType;
|
this.directionType = directionType;
|
||||||
|
|
||||||
|
@ -117,7 +124,7 @@ GameLib.D3.API.Particle = function(
|
||||||
this.directionFn = directionFn;
|
this.directionFn = directionFn;
|
||||||
|
|
||||||
if (GameLib.Utils.UndefinedOrNull(speedType)) {
|
if (GameLib.Utils.UndefinedOrNull(speedType)) {
|
||||||
speedType = GameLib.D3.Particle.SPEED_TYPE_CONSTANT;
|
speedType = GameLib.D3.API.Particle.SPEED_TYPE_CONSTANT;
|
||||||
}
|
}
|
||||||
this.speedType = speedType;
|
this.speedType = speedType;
|
||||||
|
|
||||||
|
@ -127,7 +134,7 @@ GameLib.D3.API.Particle = function(
|
||||||
this.speed = speed;
|
this.speed = speed;
|
||||||
|
|
||||||
if (GameLib.Utils.UndefinedOrNull(scaleType)) {
|
if (GameLib.Utils.UndefinedOrNull(scaleType)) {
|
||||||
scaleType = GameLib.D3.Particle.SCALE_TYPE_CONSTANT;
|
scaleType = GameLib.D3.API.Particle.SCALE_TYPE_CONSTANT;
|
||||||
}
|
}
|
||||||
this.scaleType = scaleType;
|
this.scaleType = scaleType;
|
||||||
|
|
||||||
|
@ -142,7 +149,7 @@ GameLib.D3.API.Particle = function(
|
||||||
this.scaleFn = scaleFn;
|
this.scaleFn = scaleFn;
|
||||||
|
|
||||||
if (GameLib.Utils.UndefinedOrNull(rotationType)) {
|
if (GameLib.Utils.UndefinedOrNull(rotationType)) {
|
||||||
rotationType = GameLib.D3.Particle.ROTATION_TYPE_CONSTANT;
|
rotationType = GameLib.D3.API.Particle.ROTATION_TYPE_CONSTANT;
|
||||||
}
|
}
|
||||||
this.rotationType = rotationType;
|
this.rotationType = rotationType;
|
||||||
|
|
||||||
|
@ -171,6 +178,39 @@ GameLib.D3.API.Particle = function(
|
||||||
GameLib.D3.API.Particle.prototype = Object.create(GameLib.API.Component.prototype);
|
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.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
|
* Creates an API Particle from an Object Particle
|
||||||
* @param objectParticle
|
* @param objectParticle
|
||||||
|
@ -194,7 +234,8 @@ GameLib.D3.API.Particle.FromObject = function(objectParticle) {
|
||||||
objectParticle.elapsed,
|
objectParticle.elapsed,
|
||||||
apiMesh,
|
apiMesh,
|
||||||
objectParticle.opacityType,
|
objectParticle.opacityType,
|
||||||
objectParticle.opacityFactor,
|
objectParticle.fadeInFactor,
|
||||||
|
objectParticle.fadeOutFactor,
|
||||||
objectParticle.positionOffsetType,
|
objectParticle.positionOffsetType,
|
||||||
GameLib.API.Vector3.FromObject(objectParticle.positionOffset),
|
GameLib.API.Vector3.FromObject(objectParticle.positionOffset),
|
||||||
objectParticle.positionOffsetFn,
|
objectParticle.positionOffsetFn,
|
||||||
|
|
|
@ -24,7 +24,8 @@ GameLib.D3.Particle = function(
|
||||||
apiParticle.elapsed,
|
apiParticle.elapsed,
|
||||||
apiParticle.mesh,
|
apiParticle.mesh,
|
||||||
apiParticle.opacityType,
|
apiParticle.opacityType,
|
||||||
apiParticle.opacityFactor,
|
apiParticle.fadeInFactor,
|
||||||
|
apiParticle.fadeOutFactor,
|
||||||
apiParticle.positionOffsetType,
|
apiParticle.positionOffsetType,
|
||||||
apiParticle.positionOffset,
|
apiParticle.positionOffset,
|
||||||
apiParticle.positionOffsetFn,
|
apiParticle.positionOffsetFn,
|
||||||
|
@ -87,38 +88,6 @@ GameLib.D3.Particle = function(
|
||||||
GameLib.D3.Particle.prototype = Object.create(GameLib.Component.prototype);
|
GameLib.D3.Particle.prototype = Object.create(GameLib.Component.prototype);
|
||||||
GameLib.D3.Particle.prototype.constructor = GameLib.D3.Particle;
|
GameLib.D3.Particle.prototype.constructor = GameLib.D3.Particle;
|
||||||
|
|
||||||
GameLib.D3.Particle.OPACITY_TYPE_CONSTANT = 0x1;
|
|
||||||
GameLib.D3.Particle.OPACITY_TYPE_DECREASE_LINEAR = 0x2;
|
|
||||||
GameLib.D3.Particle.OPACITY_TYPE_INCREASE_LINEAR = 0x3;
|
|
||||||
|
|
||||||
GameLib.D3.Particle.POSITION_OFFSET_TYPE_CONSTANT = 0x1;
|
|
||||||
GameLib.D3.Particle.POSITION_OFFSET_TYPE_RANDOM = 0x2;
|
|
||||||
GameLib.D3.Particle.POSITION_OFFSET_TYPE_FUNCTION = 0x3;
|
|
||||||
|
|
||||||
GameLib.D3.Particle.DIRECTION_TYPE_CONSTANT = 0x1;
|
|
||||||
GameLib.D3.Particle.DIRECTION_TYPE_RANDOM = 0x2;
|
|
||||||
GameLib.D3.Particle.DIRECTION_TYPE_RANDOM_NORMALIZED = 0x3;
|
|
||||||
GameLib.D3.Particle.DIRECTION_TYPE_FUNCTION = 0x4;
|
|
||||||
|
|
||||||
GameLib.D3.Particle.SCALE_TYPE_CONSTANT = 0x1;
|
|
||||||
GameLib.D3.Particle.SCALE_TYPE_LINEAR = 0x2;
|
|
||||||
GameLib.D3.Particle.SCALE_TYPE_EXPONENTIAL = 0x3;
|
|
||||||
GameLib.D3.Particle.SCALE_TYPE_RANDOM = 0x4;
|
|
||||||
GameLib.D3.Particle.SCALE_TYPE_RANDOM_X_EQUALS_Y = 0x6;
|
|
||||||
GameLib.D3.Particle.SCALE_TYPE_FUNCTION = 0x7;
|
|
||||||
|
|
||||||
GameLib.D3.Particle.SPEED_TYPE_CONSTANT = 0x1;
|
|
||||||
GameLib.D3.Particle.SPEED_TYPE_LINEAR = 0x2;
|
|
||||||
GameLib.D3.Particle.SPEED_TYPE_EXPONENTIAL = 0x3;
|
|
||||||
GameLib.D3.Particle.SPEED_TYPE_LOGARITHMIC = 0x4;
|
|
||||||
GameLib.D3.Particle.SPEED_TYPE_ONE_OVER_LOG = 0x5;
|
|
||||||
GameLib.D3.Particle.SPEED_TYPE_EXP = 0x6;
|
|
||||||
GameLib.D3.Particle.SPEED_TYPE_ONE_OVER_EXP = 0x7;
|
|
||||||
|
|
||||||
GameLib.D3.Particle.ROTATION_TYPE_CONSTANT = 0x1;
|
|
||||||
GameLib.D3.Particle.ROTATION_TYPE_RANDOM = 0x2;
|
|
||||||
GameLib.D3.Particle.ROTATION_TYPE_FUNCTION = 0x3;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Particle create instance
|
* Particle create instance
|
||||||
*/
|
*/
|
||||||
|
@ -163,6 +132,12 @@ GameLib.D3.Particle.prototype.updateInstance = function(property) {
|
||||||
this.rotation.instance.z = this.rotation.z;
|
this.rotation.instance.z = this.rotation.z;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (property === 'mesh') {
|
||||||
|
if (this.mesh) {
|
||||||
|
this.createInstance();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -184,7 +159,7 @@ GameLib.D3.Particle.prototype.cloneInstance = function() {
|
||||||
|
|
||||||
clone.visible = true;
|
clone.visible = true;
|
||||||
|
|
||||||
if (this.positionOffsetType === GameLib.D3.Particle.POSITION_OFFSET_TYPE_CONSTANT) {
|
if (this.positionOffsetType === GameLib.D3.API.Particle.POSITION_OFFSET_TYPE_CONSTANT) {
|
||||||
clone.position.add(this.positionOffset.instance);
|
clone.position.add(this.positionOffset.instance);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -192,7 +167,7 @@ GameLib.D3.Particle.prototype.cloneInstance = function() {
|
||||||
var addY = 1;
|
var addY = 1;
|
||||||
var addZ = 1;
|
var addZ = 1;
|
||||||
|
|
||||||
if (this.positionOffsetType === GameLib.D3.Particle.POSITION_OFFSET_TYPE_RANDOM) {
|
if (this.positionOffsetType === GameLib.D3.API.Particle.POSITION_OFFSET_TYPE_RANDOM) {
|
||||||
|
|
||||||
addX = GameLib.Utils.GetRandomIntInclusive(1,2);
|
addX = GameLib.Utils.GetRandomIntInclusive(1,2);
|
||||||
addY = GameLib.Utils.GetRandomIntInclusive(1,2);
|
addY = GameLib.Utils.GetRandomIntInclusive(1,2);
|
||||||
|
@ -219,15 +194,15 @@ GameLib.D3.Particle.prototype.cloneInstance = function() {
|
||||||
|
|
||||||
clone.userData.direction = this.direction.clone();
|
clone.userData.direction = this.direction.clone();
|
||||||
|
|
||||||
if (this.directionType === GameLib.D3.Particle.DIRECTION_TYPE_CONSTANT) {
|
if (this.directionType === GameLib.D3.API.Particle.DIRECTION_TYPE_CONSTANT) {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Nothing to do
|
* Nothing to do
|
||||||
*/
|
*/
|
||||||
|
|
||||||
} else if (
|
} else if (
|
||||||
this.directionType === GameLib.D3.Particle.DIRECTION_TYPE_RANDOM ||
|
this.directionType === GameLib.D3.API.Particle.DIRECTION_TYPE_RANDOM ||
|
||||||
this.directionType === GameLib.D3.Particle.DIRECTION_TYPE_RANDOM_NORMALIZED
|
this.directionType === GameLib.D3.API.Particle.DIRECTION_TYPE_RANDOM_NORMALIZED
|
||||||
) {
|
) {
|
||||||
|
|
||||||
addX = GameLib.Utils.GetRandomIntInclusive(1,2);
|
addX = GameLib.Utils.GetRandomIntInclusive(1,2);
|
||||||
|
@ -256,7 +231,7 @@ GameLib.D3.Particle.prototype.cloneInstance = function() {
|
||||||
clone.userData.direction.z += Math.random() * this.direction.z;
|
clone.userData.direction.z += Math.random() * this.direction.z;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.directionType === GameLib.D3.Particle.DIRECTION_TYPE_RANDOM_NORMALIZED) {
|
if (this.directionType === GameLib.D3.API.Particle.DIRECTION_TYPE_RANDOM_NORMALIZED) {
|
||||||
clone.userData.direction.normalize();
|
clone.userData.direction.normalize();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -265,13 +240,13 @@ GameLib.D3.Particle.prototype.cloneInstance = function() {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if (this.scaleType === GameLib.D3.Particle.SCALE_TYPE_CONSTANT) {
|
if (this.scaleType === GameLib.D3.API.Particle.SCALE_TYPE_CONSTANT) {
|
||||||
clone.scale.x += this.scale.x;
|
clone.scale.x += this.scale.x;
|
||||||
clone.scale.y += this.scale.y;
|
clone.scale.y += this.scale.y;
|
||||||
clone.scale.z += this.scale.z;
|
clone.scale.z += this.scale.z;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.scaleType === GameLib.D3.Particle.SCALE_TYPE_RANDOM) {
|
if (this.scaleType === GameLib.D3.API.Particle.SCALE_TYPE_RANDOM) {
|
||||||
|
|
||||||
add = GameLib.Utils.GetRandomIntInclusive(1,2);
|
add = GameLib.Utils.GetRandomIntInclusive(1,2);
|
||||||
|
|
||||||
|
@ -286,7 +261,7 @@ GameLib.D3.Particle.prototype.cloneInstance = function() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.scaleType === GameLib.D3.Particle.SCALE_TYPE_RANDOM_X_EQUALS_Y) {
|
if (this.scaleType === GameLib.D3.API.Particle.SCALE_TYPE_RANDOM_X_EQUALS_Y) {
|
||||||
|
|
||||||
add = GameLib.Utils.GetRandomIntInclusive(1,2);
|
add = GameLib.Utils.GetRandomIntInclusive(1,2);
|
||||||
|
|
||||||
|
@ -303,7 +278,21 @@ GameLib.D3.Particle.prototype.cloneInstance = function() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var fadeIn = true;
|
||||||
|
|
||||||
|
if (
|
||||||
|
this.opacityType === GameLib.D3.API.Particle.OPACITY_TYPE_FADE_IN_LINEAR ||
|
||||||
|
this.opacityType === GameLib.D3.API.Particle.OPACITY_TYPE_FADE_IN_OUT_LINEAR
|
||||||
|
) {
|
||||||
|
clone.material.opacity = 0;
|
||||||
|
fadeIn = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this.opacityType === GameLib.D3.API.Particle.OPACITY_TYPE_FADE_OUT_LINEAR) {
|
||||||
|
clone.material.opacity = 1;
|
||||||
|
fadeIn = false;
|
||||||
|
}
|
||||||
|
clone.userData.fadeIn = fadeIn;
|
||||||
clone.userData.scale = this.scale.clone();
|
clone.userData.scale = this.scale.clone();
|
||||||
clone.userData.lifeTime = this.lifeTime;
|
clone.userData.lifeTime = this.lifeTime;
|
||||||
clone.userData.speedType = this.speedType;
|
clone.userData.speedType = this.speedType;
|
||||||
|
@ -330,7 +319,8 @@ GameLib.D3.Particle.prototype.toApiObject = function() {
|
||||||
this.elapsed,
|
this.elapsed,
|
||||||
GameLib.Utils.IdOrNull(this.mesh),
|
GameLib.Utils.IdOrNull(this.mesh),
|
||||||
this.opacityType,
|
this.opacityType,
|
||||||
this.opacityFactor,
|
this.fadeInFactor,
|
||||||
|
this.fadeOutFactor,
|
||||||
this.positionOffsetType,
|
this.positionOffsetType,
|
||||||
this.positionOffset.toApiObject(),
|
this.positionOffset.toApiObject(),
|
||||||
this.positionOffsetFn,
|
this.positionOffsetFn,
|
||||||
|
|
|
@ -929,9 +929,10 @@ GameLib.System.GUI.prototype.buildControl = function(folder, componentTemplate,
|
||||||
object,
|
object,
|
||||||
property,
|
property,
|
||||||
{
|
{
|
||||||
'constant': GameLib.D3.Particle.OPACITY_TYPE_CONSTANT,
|
'constant': GameLib.D3.API.Particle.OPACITY_TYPE_CONSTANT,
|
||||||
'decrease': GameLib.D3.Particle.OPACITY_TYPE_DECREASE_LINEAR,
|
'fade out': GameLib.D3.API.Particle.OPACITY_TYPE_FADE_OUT_LINEAR,
|
||||||
'increase': GameLib.D3.Particle.OPACITY_TYPE_INCREASE_LINEAR
|
'fade in': GameLib.D3.API.Particle.OPACITY_TYPE_FADE_IN_LINEAR,
|
||||||
|
'fade in / out': GameLib.D3.API.Particle.OPACITY_TYPE_FADE_IN_OUT_LINEAR
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
@ -941,9 +942,9 @@ GameLib.System.GUI.prototype.buildControl = function(folder, componentTemplate,
|
||||||
object,
|
object,
|
||||||
property,
|
property,
|
||||||
{
|
{
|
||||||
'constant': GameLib.D3.Particle.POSITION_OFFSET_TYPE_CONSTANT,
|
'constant': GameLib.D3.API.Particle.POSITION_OFFSET_TYPE_CONSTANT,
|
||||||
'random': GameLib.D3.Particle.POSITION_OFFSET_TYPE_RANDOM,
|
'random': GameLib.D3.API.Particle.POSITION_OFFSET_TYPE_RANDOM,
|
||||||
'function': GameLib.D3.Particle.POSITION_OFFSET_TYPE_FUNCTION
|
'function': GameLib.D3.API.Particle.POSITION_OFFSET_TYPE_FUNCTION
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
@ -953,10 +954,10 @@ GameLib.System.GUI.prototype.buildControl = function(folder, componentTemplate,
|
||||||
object,
|
object,
|
||||||
property,
|
property,
|
||||||
{
|
{
|
||||||
'constant': GameLib.D3.Particle.DIRECTION_TYPE_CONSTANT,
|
'constant': GameLib.D3.API.Particle.DIRECTION_TYPE_CONSTANT,
|
||||||
'random': GameLib.D3.Particle.DIRECTION_TYPE_RANDOM,
|
'random': GameLib.D3.API.Particle.DIRECTION_TYPE_RANDOM,
|
||||||
'random normalized': GameLib.D3.Particle.DIRECTION_TYPE_RANDOM_NORMALIZED,
|
'random normalized': GameLib.D3.API.Particle.DIRECTION_TYPE_RANDOM_NORMALIZED,
|
||||||
'function': GameLib.D3.Particle.DIRECTION_TYPE_FUNCTION
|
'function': GameLib.D3.API.Particle.DIRECTION_TYPE_FUNCTION
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
@ -966,13 +967,13 @@ GameLib.System.GUI.prototype.buildControl = function(folder, componentTemplate,
|
||||||
object,
|
object,
|
||||||
property,
|
property,
|
||||||
{
|
{
|
||||||
'constant': GameLib.D3.Particle.SPEED_TYPE_CONSTANT,
|
'constant': GameLib.D3.API.Particle.SPEED_TYPE_CONSTANT,
|
||||||
'linear': GameLib.D3.Particle.SPEED_TYPE_LINEAR,
|
'linear': GameLib.D3.API.Particle.SPEED_TYPE_LINEAR,
|
||||||
'exponential': GameLib.D3.Particle.SPEED_TYPE_EXPONENTIAL,
|
'exponential': GameLib.D3.API.Particle.SPEED_TYPE_EXPONENTIAL,
|
||||||
'logarithmic': GameLib.D3.Particle.SPEED_TYPE_LOGARITHMIC,
|
'logarithmic': GameLib.D3.API.Particle.SPEED_TYPE_LOGARITHMIC,
|
||||||
'1 / log': GameLib.D3.Particle.SPEED_TYPE_ONE_OVER_LOG,
|
'1 / log': GameLib.D3.API.Particle.SPEED_TYPE_ONE_OVER_LOG,
|
||||||
'exp' : GameLib.D3.Particle.SPEED_TYPE_EXP,
|
'exp' : GameLib.D3.API.Particle.SPEED_TYPE_EXP,
|
||||||
'1 / exp' : GameLib.D3.Particle.SPEED_TYPE_ONE_OVER_EXP
|
'1 / exp' : GameLib.D3.API.Particle.SPEED_TYPE_ONE_OVER_EXP
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
@ -982,12 +983,12 @@ GameLib.System.GUI.prototype.buildControl = function(folder, componentTemplate,
|
||||||
object,
|
object,
|
||||||
property,
|
property,
|
||||||
{
|
{
|
||||||
'constant': GameLib.D3.Particle.SCALE_TYPE_CONSTANT,
|
'constant': GameLib.D3.API.Particle.SCALE_TYPE_CONSTANT,
|
||||||
'linear': GameLib.D3.Particle.SCALE_TYPE_LINEAR,
|
'linear': GameLib.D3.API.Particle.SCALE_TYPE_LINEAR,
|
||||||
'exponential': GameLib.D3.Particle.SCALE_TYPE_EXPONENTIAL,
|
'exponential': GameLib.D3.API.Particle.SCALE_TYPE_EXPONENTIAL,
|
||||||
'random': GameLib.D3.Particle.SCALE_TYPE_RANDOM,
|
'random': GameLib.D3.API.Particle.SCALE_TYPE_RANDOM,
|
||||||
'random (x = y)': GameLib.D3.Particle.SCALE_TYPE_RANDOM_X_EQUALS_Y,
|
'random (x = y)': GameLib.D3.API.Particle.SCALE_TYPE_RANDOM_X_EQUALS_Y,
|
||||||
'function': GameLib.D3.Particle.SCALE_TYPE_FUNCTION
|
'function': GameLib.D3.API.Particle.SCALE_TYPE_FUNCTION
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
@ -997,9 +998,9 @@ GameLib.System.GUI.prototype.buildControl = function(folder, componentTemplate,
|
||||||
object,
|
object,
|
||||||
property,
|
property,
|
||||||
{
|
{
|
||||||
'constant': GameLib.D3.Particle.ROTATION_TYPE_CONSTANT,
|
'constant': GameLib.D3.API.Particle.ROTATION_TYPE_CONSTANT,
|
||||||
'random': GameLib.D3.Particle.ROTATION_TYPE_RANDOM,
|
'random': GameLib.D3.API.Particle.ROTATION_TYPE_RANDOM,
|
||||||
'function': GameLib.D3.Particle.ROTATION_TYPE_FUNCTION
|
'function': GameLib.D3.API.Particle.ROTATION_TYPE_FUNCTION
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
@ -1374,7 +1375,8 @@ GameLib.System.GUI.prototype.buildControl = function(folder, componentTemplate,
|
||||||
*/
|
*/
|
||||||
if (
|
if (
|
||||||
property === 'opacity' ||
|
property === 'opacity' ||
|
||||||
property === 'opacityFactor' ||
|
property === 'fadeInFactor' ||
|
||||||
|
property === 'fadeOutFactor' ||
|
||||||
property === 'metalness' ||
|
property === 'metalness' ||
|
||||||
property === 'roughness' ||
|
property === 'roughness' ||
|
||||||
property === 'volume'
|
property === 'volume'
|
||||||
|
|
|
@ -668,18 +668,6 @@ GameLib.System.Linking.prototype.instanceCreated = function(data) {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (
|
|
||||||
data.component.parentParticleEngine &&
|
|
||||||
typeof data.component.parentParticleEngine === 'string'
|
|
||||||
) {
|
|
||||||
GameLib.EntityManager.Instance.queryComponents(GameLib.Component.PARTICLE_ENGINE).map(
|
|
||||||
function (particleEngine) {
|
|
||||||
if (data.component.parentParticleEngine === particleEngine.id) {
|
|
||||||
data.component.parentParticleEngine = particleEngine;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Link all meshes
|
* Link all meshes
|
||||||
|
|
|
@ -61,8 +61,36 @@ GameLib.System.Particle.prototype.start = function() {
|
||||||
* @param data
|
* @param data
|
||||||
*/
|
*/
|
||||||
GameLib.System.Particle.prototype.instanceCreated = function(data) {
|
GameLib.System.Particle.prototype.instanceCreated = function(data) {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* If we loaded a ParticleEngine - store a reference to it for later, also link all particles with this as parent
|
||||||
|
*/
|
||||||
if (data.component instanceof GameLib.D3.ParticleEngine) {
|
if (data.component instanceof GameLib.D3.ParticleEngine) {
|
||||||
this.particleEngines.push(data.component);
|
this.particleEngines.push(data.component);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Link parent particle engines of already loaded particles
|
||||||
|
*/
|
||||||
|
GameLib.EntityManager.Instance.queryComponents(GameLib.Component.PARTICLE).map(
|
||||||
|
function(particle){
|
||||||
|
if (particle.parentParticleEngine === data.component.id) {
|
||||||
|
particle.parentParticleEngine = data.component;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* If we load a Particle, check to see if its engine loaded and link it.
|
||||||
|
*/
|
||||||
|
if (data.component instanceof GameLib.D3.Particle) {
|
||||||
|
GameLib.EntityManager.Instance.queryComponents(GameLib.Component.PARTICLE_ENGINE).map(
|
||||||
|
function (particleEngine) {
|
||||||
|
if (data.component.parentParticleEngine === particleEngine.id) {
|
||||||
|
data.component.parentParticleEngine = particleEngine;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -100,7 +128,6 @@ GameLib.System.Particle.prototype.beforeRender = function(data) {
|
||||||
function(particleEngine) {
|
function(particleEngine) {
|
||||||
|
|
||||||
if (
|
if (
|
||||||
GameLib.Utils.UndefinedOrNull(particleEngine.camera) ||
|
|
||||||
GameLib.Utils.UndefinedOrNull(particleEngine.templateParticle) ||
|
GameLib.Utils.UndefinedOrNull(particleEngine.templateParticle) ||
|
||||||
GameLib.Utils.UndefinedOrNull(particleEngine.templateParticle.mesh) ||
|
GameLib.Utils.UndefinedOrNull(particleEngine.templateParticle.mesh) ||
|
||||||
GameLib.Utils.UndefinedOrNull(particleEngine.templateParticle.mesh.parentScene) ||
|
GameLib.Utils.UndefinedOrNull(particleEngine.templateParticle.mesh.parentScene) ||
|
||||||
|
@ -116,36 +143,36 @@ GameLib.System.Particle.prototype.beforeRender = function(data) {
|
||||||
|
|
||||||
var speed = particle.userData.speed;
|
var speed = particle.userData.speed;
|
||||||
|
|
||||||
if (particle.userData.speedType === GameLib.D3.Particle.SPEED_TYPE_CONSTANT) {
|
if (particle.userData.speedType === GameLib.D3.API.Particle.SPEED_TYPE_CONSTANT) {
|
||||||
speed = data.delta * particle.userData.speed;
|
speed = data.delta * particle.userData.speed;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (particle.userData.speedType === GameLib.D3.Particle.SPEED_TYPE_LINEAR) {
|
if (particle.userData.speedType === GameLib.D3.API.Particle.SPEED_TYPE_LINEAR) {
|
||||||
speed = data.delta * particle.userData.speed;
|
speed = data.delta * particle.userData.speed;
|
||||||
particle.userData.speed += speed;
|
particle.userData.speed += speed;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (particle.userData.speedType === GameLib.D3.Particle.SPEED_TYPE_EXPONENTIAL) {
|
if (particle.userData.speedType === GameLib.D3.API.Particle.SPEED_TYPE_EXPONENTIAL) {
|
||||||
speed = Math.pow(particle.userData.speed, 2) * data.delta;
|
speed = Math.pow(particle.userData.speed, 2) * data.delta;
|
||||||
particle.userData.speed += speed;
|
particle.userData.speed += speed;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (particle.userData.speedType === GameLib.D3.Particle.SPEED_TYPE_LOGARITHMIC) {
|
if (particle.userData.speedType === GameLib.D3.API.Particle.SPEED_TYPE_LOGARITHMIC) {
|
||||||
speed = Math.log(particle.userData.speed) * data.delta;
|
speed = Math.log(particle.userData.speed) * data.delta;
|
||||||
particle.userData.speed += speed;
|
particle.userData.speed += speed;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (particle.userData.speedType === GameLib.D3.Particle.SPEED_TYPE_ONE_OVER_LOG) {
|
if (particle.userData.speedType === GameLib.D3.API.Particle.SPEED_TYPE_ONE_OVER_LOG) {
|
||||||
speed = 1 / Math.log(particle.userData.speed) * data.delta;
|
speed = 1 / Math.log(particle.userData.speed) * data.delta;
|
||||||
particle.userData.speed += speed;
|
particle.userData.speed += speed;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (particle.userData.speedType === GameLib.D3.Particle.SPEED_TYPE_EXP) {
|
if (particle.userData.speedType === GameLib.D3.API.Particle.SPEED_TYPE_EXP) {
|
||||||
speed = Math.exp(particle.userData.speed) * data.delta;
|
speed = Math.exp(particle.userData.speed) * data.delta;
|
||||||
particle.userData.speed += speed;
|
particle.userData.speed += speed;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (particle.userData.speedType === GameLib.D3.Particle.SPEED_TYPE_ONE_OVER_EXP) {
|
if (particle.userData.speedType === GameLib.D3.API.Particle.SPEED_TYPE_ONE_OVER_EXP) {
|
||||||
speed = 1 / Math.exp(particle.userData.speed) * data.delta;
|
speed = 1 / Math.exp(particle.userData.speed) * data.delta;
|
||||||
particle.userData.speed += speed;
|
particle.userData.speed += speed;
|
||||||
}
|
}
|
||||||
|
@ -154,7 +181,7 @@ GameLib.System.Particle.prototype.beforeRender = function(data) {
|
||||||
particle.position.y += particle.userData.direction.y * speed;
|
particle.position.y += particle.userData.direction.y * speed;
|
||||||
particle.position.z += particle.userData.direction.z * speed;
|
particle.position.z += particle.userData.direction.z * speed;
|
||||||
|
|
||||||
if (particleEngine.templateParticle.scaleType === GameLib.D3.Particle.SCALE_TYPE_CONSTANT) {
|
if (particleEngine.templateParticle.scaleType === GameLib.D3.API.Particle.SCALE_TYPE_CONSTANT) {
|
||||||
/**
|
/**
|
||||||
* Do nothing - scale should already be set
|
* Do nothing - scale should already be set
|
||||||
*/
|
*/
|
||||||
|
@ -164,20 +191,35 @@ GameLib.System.Particle.prototype.beforeRender = function(data) {
|
||||||
*/
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
if (particleEngine.templateParticle.scaleType === GameLib.D3.Particle.SCALE_TYPE_LINEAR) {
|
if (particleEngine.templateParticle.scaleType === GameLib.D3.API.Particle.SCALE_TYPE_LINEAR) {
|
||||||
particle.scale.x += particle.userData.scale.x * data.delta;
|
particle.scale.x += particle.userData.scale.x * data.delta;
|
||||||
particle.scale.y += particle.userData.scale.x * data.delta;
|
particle.scale.y += particle.userData.scale.x * data.delta;
|
||||||
particle.scale.z += particle.userData.scale.x * data.delta;
|
particle.scale.z += particle.userData.scale.x * data.delta;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (particleEngine.camera && particleEngine.camera.instance) {
|
||||||
particle.quaternion.copy(particleEngine.camera.instance.quaternion);
|
particle.quaternion.copy(particleEngine.camera.instance.quaternion);
|
||||||
|
|
||||||
if (particleEngine.templateParticle.opacityType === GameLib.D3.Particle.OPACITY_TYPE_INCREASE_LINEAR) {
|
|
||||||
particle.material.opacity += particleEngine.templateParticle.opacityFactor;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (particleEngine.templateParticle.opacityType === GameLib.D3.Particle.OPACITY_TYPE_DECREASE_LINEAR) {
|
if (particleEngine.templateParticle.opacityType === GameLib.D3.API.Particle.OPACITY_TYPE_FADE_IN_LINEAR) {
|
||||||
particle.material.opacity -= particleEngine.templateParticle.opacityFactor;
|
particle.material.opacity += particleEngine.templateParticle.fadeInFactor;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (particleEngine.templateParticle.opacityType === GameLib.D3.API.Particle.OPACITY_TYPE_FADE_OUT_LINEAR) {
|
||||||
|
particle.material.opacity -= particleEngine.templateParticle.fadeOutFactor;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (particleEngine.templateParticle.opacityType === GameLib.D3.API.Particle.OPACITY_TYPE_FADE_IN_OUT_LINEAR) {
|
||||||
|
|
||||||
|
if (particle.userData.fadeIn) {
|
||||||
|
particle.material.opacity += particleEngine.templateParticle.fadeInFactor;
|
||||||
|
} else {
|
||||||
|
particle.material.opacity -= particleEngine.templateParticle.fadeOutFactor;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (particle.material.opacity >= 1) {
|
||||||
|
particle.userData.fadeIn = false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
particle.userData.elapsed += data.delta;
|
particle.userData.elapsed += data.delta;
|
||||||
|
|
Loading…
Reference in New Issue