/** * 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 ); };