UNPKG

proton-engine

Version:

Proton is a simple and powerful javascript particle animation engine.

89 lines (80 loc) 2.8 kB
import ColorUtil from "../utils/ColorUtil"; import ArraySpan from "../math/ArraySpan"; import Behaviour from "./Behaviour"; export default class Color extends Behaviour { /** * @memberof! Proton# * @augments Proton.Behaviour * @constructor * @alias Proton.Color * * @param {Proton.ArraySpan | String} [a] the string should be a hex e.g. #000000 for black * @param {Proton.ArraySpan | String} [b] the string should be a hex e.g. #000000 for black * @param {Number} [life=Infinity] this behaviour's life * @param {String} [easing=easeLinear] this behaviour's easing * * @property {String} name The Behaviour name */ constructor(a, b, life, easing) { super(life, easing); this.reset(a, b); this.name = "Color"; } /** * Reset this behaviour's parameters * * @method reset * @memberof Proton#Proton.Color * @instance * * @param {Proton.ArraySpan | String} a the string should be a hex e.g. #000000 for black * @param {Proton.ArraySpan | String} b the string should be a hex e.g. #000000 for black * @param {Number} [life=Infinity] this behaviour's life * @param {String} [easing=easeLinear] this behaviour's easing */ reset(a, b, life, easing) { this.a = ArraySpan.createArraySpan(a); this.b = ArraySpan.createArraySpan(b); life && super.reset(life, easing); } /** * Initialize the behaviour's parameters for all particles * * @method initialize * @memberof Proton#Proton.Color * @instance * * @param {Proton.Particle} particle */ initialize(particle) { particle.color = this.a.getValue(); particle.data.colorA = ColorUtil.hexToRgb(particle.color); if (this.b) particle.data.colorB = ColorUtil.hexToRgb(this.b.getValue()); } /** * Apply this behaviour for all particles every time * * @method applyBehaviour * @memberof Proton#Proton.Color * @instance * * @param {Proton.Particle} particle * @param {Number} the integrate time 1/ms * @param {Int} the particle index */ applyBehaviour(particle, time, index) { if (this.b) { this.calculate(particle, time, index); particle.rgb.r = particle.data.colorB.r + (particle.data.colorA.r - particle.data.colorB.r) * this.energy; particle.rgb.g = particle.data.colorB.g + (particle.data.colorA.g - particle.data.colorB.g) * this.energy; particle.rgb.b = particle.data.colorB.b + (particle.data.colorA.b - particle.data.colorB.b) * this.energy; particle.rgb.r = particle.rgb.r << 0; particle.rgb.g = particle.rgb.g << 0; particle.rgb.b = particle.rgb.b << 0; } else { particle.rgb.r = particle.data.colorA.r; particle.rgb.g = particle.data.colorA.g; particle.rgb.b = particle.data.colorA.b; } } }