|
@@ -55171,6 +55171,12 @@ var BABYLON;
|
|
}
|
|
}
|
|
return ColorGradient;
|
|
return ColorGradient;
|
|
}());
|
|
}());
|
|
|
|
+ /** @hidden */
|
|
|
|
+ var FactorGradient = /** @class */ (function () {
|
|
|
|
+ function FactorGradient() {
|
|
|
|
+ }
|
|
|
|
+ return FactorGradient;
|
|
|
|
+ }());
|
|
/**
|
|
/**
|
|
* This represents a particle system in Babylon.
|
|
* This represents a particle system in Babylon.
|
|
* Particles are often small sprites used to simulate hard-to-reproduce phenomena like fire, smoke, water, or abstract visual effects like magic glitter and faery dust.
|
|
* Particles are often small sprites used to simulate hard-to-reproduce phenomena like fire, smoke, water, or abstract visual effects like magic glitter and faery dust.
|
|
@@ -55313,6 +55319,7 @@ var BABYLON;
|
|
*/
|
|
*/
|
|
this.gravity = BABYLON.Vector3.Zero();
|
|
this.gravity = BABYLON.Vector3.Zero();
|
|
this._colorGradients = null;
|
|
this._colorGradients = null;
|
|
|
|
+ this._sizeGradients = null;
|
|
/**
|
|
/**
|
|
* Random color of each particle after it has been emitted, between color1 and color2 vectors
|
|
* Random color of each particle after it has been emitted, between color1 and color2 vectors
|
|
*/
|
|
*/
|
|
@@ -55433,17 +55440,12 @@ var BABYLON;
|
|
continue;
|
|
continue;
|
|
}
|
|
}
|
|
else {
|
|
else {
|
|
|
|
+ var ratio = particle.age / particle.lifeTime;
|
|
|
|
+ // Color
|
|
if (_this._colorGradients && _this._colorGradients.length > 0) {
|
|
if (_this._colorGradients && _this._colorGradients.length > 0) {
|
|
- var ratio = particle.age / particle.lifeTime;
|
|
|
|
- for (var gradientIndex = 0; gradientIndex < _this._colorGradients.length - 1; gradientIndex++) {
|
|
|
|
- var currentGradient = _this._colorGradients[gradientIndex];
|
|
|
|
- var nextGradient = _this._colorGradients[gradientIndex + 1];
|
|
|
|
- if (ratio >= currentGradient.gradient && ratio <= nextGradient.gradient) {
|
|
|
|
- var scale = (ratio - currentGradient.gradient) / (nextGradient.gradient - currentGradient.gradient);
|
|
|
|
- BABYLON.Color4.LerpToRef(currentGradient.color, nextGradient.color, scale, particle.color);
|
|
|
|
- break;
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
|
|
+ _this._getCurrentGradient(ratio, _this._colorGradients, function (currentGradient, nextGradient, scale) {
|
|
|
|
+ BABYLON.Color4.LerpToRef(currentGradient.color, nextGradient.color, scale, particle.color);
|
|
|
|
+ });
|
|
}
|
|
}
|
|
else {
|
|
else {
|
|
particle.colorStep.scaleToRef(_this._scaledUpdateSpeed, _this._scaledColorStep);
|
|
particle.colorStep.scaleToRef(_this._scaledUpdateSpeed, _this._scaledColorStep);
|
|
@@ -55457,6 +55459,12 @@ var BABYLON;
|
|
particle.position.addInPlace(_this._scaledDirection);
|
|
particle.position.addInPlace(_this._scaledDirection);
|
|
_this.gravity.scaleToRef(_this._scaledUpdateSpeed, _this._scaledGravity);
|
|
_this.gravity.scaleToRef(_this._scaledUpdateSpeed, _this._scaledGravity);
|
|
particle.direction.addInPlace(_this._scaledGravity);
|
|
particle.direction.addInPlace(_this._scaledGravity);
|
|
|
|
+ // Gradient
|
|
|
|
+ if (_this._sizeGradients && _this._sizeGradients.length > 0) {
|
|
|
|
+ _this._getCurrentGradient(ratio, _this._sizeGradients, function (currentGradient, nextGradient, scale) {
|
|
|
|
+ particle.size = particle._initialSize * BABYLON.Scalar.Lerp(currentGradient.factor, nextGradient.factor, scale);
|
|
|
|
+ });
|
|
|
|
+ }
|
|
if (_this._isAnimationSheetEnabled) {
|
|
if (_this._isAnimationSheetEnabled) {
|
|
particle.updateCellIndex(_this._scaledUpdateSpeed);
|
|
particle.updateCellIndex(_this._scaledUpdateSpeed);
|
|
}
|
|
}
|
|
@@ -55598,6 +55606,59 @@ var BABYLON;
|
|
ParticleSystem.prototype.getClassName = function () {
|
|
ParticleSystem.prototype.getClassName = function () {
|
|
return "ParticleSystem";
|
|
return "ParticleSystem";
|
|
};
|
|
};
|
|
|
|
+ ParticleSystem.prototype._getCurrentGradient = function (ratio, gradients, updateFunc) {
|
|
|
|
+ for (var gradientIndex = 0; gradientIndex < gradients.length - 1; gradientIndex++) {
|
|
|
|
+ var currentGradient = gradients[gradientIndex];
|
|
|
|
+ var nextGradient = gradients[gradientIndex + 1];
|
|
|
|
+ if (ratio >= currentGradient.gradient && ratio <= nextGradient.gradient) {
|
|
|
|
+ var scale = (ratio - currentGradient.gradient) / (nextGradient.gradient - currentGradient.gradient);
|
|
|
|
+ updateFunc(currentGradient, nextGradient, scale);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ };
|
|
|
|
+ /**
|
|
|
|
+ * Adds a new size gradient
|
|
|
|
+ * @param gradient defines the gradient to use (between 0 and 1)
|
|
|
|
+ * @param factor defines the size factor to affect to the specified gradient
|
|
|
|
+ */
|
|
|
|
+ ParticleSystem.prototype.addSizeGradient = function (gradient, factor) {
|
|
|
|
+ if (!this._sizeGradients) {
|
|
|
|
+ this._sizeGradients = [];
|
|
|
|
+ }
|
|
|
|
+ var sizeGradient = new FactorGradient();
|
|
|
|
+ sizeGradient.gradient = gradient;
|
|
|
|
+ sizeGradient.factor = factor;
|
|
|
|
+ this._sizeGradients.push(sizeGradient);
|
|
|
|
+ this._sizeGradients.sort(function (a, b) {
|
|
|
|
+ if (a.gradient < b.gradient) {
|
|
|
|
+ return -1;
|
|
|
|
+ }
|
|
|
|
+ else if (a.gradient > b.gradient) {
|
|
|
|
+ return 1;
|
|
|
|
+ }
|
|
|
|
+ return 0;
|
|
|
|
+ });
|
|
|
|
+ return this;
|
|
|
|
+ };
|
|
|
|
+ /**
|
|
|
|
+ * Remove a specific size gradient
|
|
|
|
+ * @param gradient defines the gradient to remove
|
|
|
|
+ */
|
|
|
|
+ ParticleSystem.prototype.removeSizeGradient = function (gradient) {
|
|
|
|
+ if (!this._sizeGradients) {
|
|
|
|
+ return this;
|
|
|
|
+ }
|
|
|
|
+ var index = 0;
|
|
|
|
+ for (var _i = 0, _a = this._sizeGradients; _i < _a.length; _i++) {
|
|
|
|
+ var sizeGradient = _a[_i];
|
|
|
|
+ if (sizeGradient.gradient === gradient) {
|
|
|
|
+ this._sizeGradients.splice(index, 1);
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+ index++;
|
|
|
|
+ }
|
|
|
|
+ return this;
|
|
|
|
+ };
|
|
/**
|
|
/**
|
|
* Adds a new color gradient
|
|
* Adds a new color gradient
|
|
* @param gradient defines the gradient to use (between 0 and 1)
|
|
* @param gradient defines the gradient to use (between 0 and 1)
|
|
@@ -55883,6 +55944,7 @@ var BABYLON;
|
|
particle.direction.scaleInPlace(emitPower);
|
|
particle.direction.scaleInPlace(emitPower);
|
|
particle.lifeTime = BABYLON.Scalar.RandomRange(this.minLifeTime, this.maxLifeTime);
|
|
particle.lifeTime = BABYLON.Scalar.RandomRange(this.minLifeTime, this.maxLifeTime);
|
|
particle.size = BABYLON.Scalar.RandomRange(this.minSize, this.maxSize);
|
|
particle.size = BABYLON.Scalar.RandomRange(this.minSize, this.maxSize);
|
|
|
|
+ particle._initialSize = particle.size;
|
|
particle.scale.copyFromFloats(BABYLON.Scalar.RandomRange(this.minScaleX, this.maxScaleX), BABYLON.Scalar.RandomRange(this.minScaleY, this.maxScaleY));
|
|
particle.scale.copyFromFloats(BABYLON.Scalar.RandomRange(this.minScaleX, this.maxScaleX), BABYLON.Scalar.RandomRange(this.minScaleY, this.maxScaleY));
|
|
particle.angularSpeed = BABYLON.Scalar.RandomRange(this.minAngularSpeed, this.maxAngularSpeed);
|
|
particle.angularSpeed = BABYLON.Scalar.RandomRange(this.minAngularSpeed, this.maxAngularSpeed);
|
|
particle.angle = BABYLON.Scalar.RandomRange(this.minInitialRotation, this.maxInitialRotation);
|
|
particle.angle = BABYLON.Scalar.RandomRange(this.minInitialRotation, this.maxInitialRotation);
|