| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155 | 
							- import Cartesian2 from "../Core/Cartesian2.js";
 
- import Cartesian3 from "../Core/Cartesian3.js";
 
- import Color from "../Core/Color.js";
 
- import defaultValue from "../Core/defaultValue.js";
 
- import defined from "../Core/defined.js";
 
- const defaultSize = new Cartesian2(1.0, 1.0);
 
- /**
 
-  * A particle emitted by a {@link ParticleSystem}.
 
-  *
 
-  * @alias Particle
 
-  * @constructor
 
-  *
 
-  * @param {Object} options An object with the following properties:
 
-  * @param {Number} [options.mass=1.0] The mass of the particle in kilograms.
 
-  * @param {Cartesian3} [options.position=Cartesian3.ZERO] The initial position of the particle in world coordinates.
 
-  * @param {Cartesian3} [options.velocity=Cartesian3.ZERO] The velocity vector of the particle in world coordinates.
 
-  * @param {Number} [options.life=Number.MAX_VALUE] The life of the particle in seconds.
 
-  * @param {Object} [options.image] The URI, HTMLImageElement, or HTMLCanvasElement to use for the billboard.
 
-  * @param {Color} [options.startColor=Color.WHITE] The color of a particle when it is born.
 
-  * @param {Color} [options.endColor=Color.WHITE] The color of a particle when it dies.
 
-  * @param {Number} [options.startScale=1.0] The scale of the particle when it is born.
 
-  * @param {Number} [options.endScale=1.0] The scale of the particle when it dies.
 
-  * @param {Cartesian2} [options.imageSize=new Cartesian2(1.0, 1.0)] The dimensions, width by height, to scale the particle image in pixels.
 
-  */
 
- function Particle(options) {
 
-   options = defaultValue(options, defaultValue.EMPTY_OBJECT);
 
-   /**
 
-    * The mass of the particle in kilograms.
 
-    * @type {Number}
 
-    * @default 1.0
 
-    */
 
-   this.mass = defaultValue(options.mass, 1.0);
 
-   /**
 
-    * The positon of the particle in world coordinates.
 
-    * @type {Cartesian3}
 
-    * @default Cartesian3.ZERO
 
-    */
 
-   this.position = Cartesian3.clone(
 
-     defaultValue(options.position, Cartesian3.ZERO)
 
-   );
 
-   /**
 
-    * The velocity of the particle in world coordinates.
 
-    * @type {Cartesian3}
 
-    * @default Cartesian3.ZERO
 
-    */
 
-   this.velocity = Cartesian3.clone(
 
-     defaultValue(options.velocity, Cartesian3.ZERO)
 
-   );
 
-   /**
 
-    * The life of the particle in seconds.
 
-    * @type {Number}
 
-    * @default Number.MAX_VALUE
 
-    */
 
-   this.life = defaultValue(options.life, Number.MAX_VALUE);
 
-   /**
 
-    * The image to use for the particle.
 
-    * @type {Object}
 
-    * @default undefined
 
-    */
 
-   this.image = options.image;
 
-   /**
 
-    * The color of the particle when it is born.
 
-    * @type {Color}
 
-    * @default Color.WHITE
 
-    */
 
-   this.startColor = Color.clone(defaultValue(options.startColor, Color.WHITE));
 
-   /**
 
-    * The color of the particle when it dies.
 
-    * @type {Color}
 
-    * @default Color.WHITE
 
-    */
 
-   this.endColor = Color.clone(defaultValue(options.endColor, Color.WHITE));
 
-   /**
 
-    * the scale of the particle when it is born.
 
-    * @type {Number}
 
-    * @default 1.0
 
-    */
 
-   this.startScale = defaultValue(options.startScale, 1.0);
 
-   /**
 
-    * The scale of the particle when it dies.
 
-    * @type {Number}
 
-    * @default 1.0
 
-    */
 
-   this.endScale = defaultValue(options.endScale, 1.0);
 
-   /**
 
-    * The dimensions, width by height, to scale the particle image in pixels.
 
-    * @type {Cartesian2}
 
-    * @default new Cartesian(1.0, 1.0)
 
-    */
 
-   this.imageSize = Cartesian2.clone(
 
-     defaultValue(options.imageSize, defaultSize)
 
-   );
 
-   this._age = 0.0;
 
-   this._normalizedAge = 0.0;
 
-   // used by ParticleSystem
 
-   this._billboard = undefined;
 
- }
 
- Object.defineProperties(Particle.prototype, {
 
-   /**
 
-    * Gets the age of the particle in seconds.
 
-    * @memberof Particle.prototype
 
-    * @type {Number}
 
-    */
 
-   age: {
 
-     get: function () {
 
-       return this._age;
 
-     },
 
-   },
 
-   /**
 
-    * Gets the age normalized to a value in the range [0.0, 1.0].
 
-    * @memberof Particle.prototype
 
-    * @type {Number}
 
-    */
 
-   normalizedAge: {
 
-     get: function () {
 
-       return this._normalizedAge;
 
-     },
 
-   },
 
- });
 
- const deltaScratch = new Cartesian3();
 
- /**
 
-  * @private
 
-  */
 
- Particle.prototype.update = function (dt, particleUpdateFunction) {
 
-   // Apply the velocity
 
-   Cartesian3.multiplyByScalar(this.velocity, dt, deltaScratch);
 
-   Cartesian3.add(this.position, deltaScratch, this.position);
 
-   // Update any forces.
 
-   if (defined(particleUpdateFunction)) {
 
-     particleUpdateFunction(this, dt);
 
-   }
 
-   // Age the particle
 
-   this._age += dt;
 
-   // Compute the normalized age.
 
-   if (this.life === Number.MAX_VALUE) {
 
-     this._normalizedAge = 0.0;
 
-   } else {
 
-     this._normalizedAge = this._age / this.life;
 
-   }
 
-   // If this particle is older than it's lifespan then die.
 
-   return this._age <= this.life;
 
- };
 
- export default Particle;
 
 
  |