shadowanimation.js

Tily.ShadowAnimation = (function(_super) {
  "use strict";
  Tily.utility.__extends(ShadowAnimation, _super);

  /**
   * Represents a shadow animation for animating active tile shadows.
   * @class
   * @extends Tily.Animation
   * @memberof Tily
   * @param {Tily.ActiveTile|Tily.ActiveTileLayer} activeTile The active tile or active tile
   * layer that this animation belongs to.
   * @param {Tily.utility.vec2} start The starting shadow.
   * @param {Tily.utility.vec2} finish The finishing shadow.
   * @param {AnimationOptions} [options] An optional options object for configuring the
   * animation.
   */
  function ShadowAnimation(activeTile, start, finish, options) {
    if (!options.easeFunction) {
      options.easeFunction = (a, b, i) => {
        const as = Tily.utility.shadow(a);
        const bs = Tily.utility.shadow(b);
        as.colour = Tily.utility.parseColor(as.colour);
        bs.colour = Tily.utility.parseColor(bs.colour);
        const result = {
          blur: Tily.utility.lerp(as.blur, bs.blur, i),
          xOffset: Tily.utility.lerp(as.xOffset, bs.xOffset, i),
          yOffset: Tily.utility.lerp(as.yOffset, bs.yOffset, i),
          colour: Tily.utility.colour({
            r: Tily.utility.lerp(as.colour.r, bs.colour.r, i),
            g: Tily.utility.lerp(as.colour.g, bs.colour.g, i),
            b: Tily.utility.lerp(as.colour.b, bs.colour.b, i),
            a: Tily.utility.lerp(as.colour.a, bs.colour.a, i)
          })
        };
        return `${result.blur} ${result.xOffset} ${result.yOffset} ${result.colour}`;
      };
    }
    _super.call(this, activeTile, start, finish, options);
  }

  /**
   * Update the animation and set the active tile shadow.
   * @name update
   * @function
   * @instance
   * @memberof Tily.ShadowAnimation
   * @param {number} elapsedTime The number of seconds that have elapsed since the last update.
   */
  ShadowAnimation.prototype.update = function(elapsedTime) {
    const amount = _super.prototype.update.call(this, elapsedTime);
    this.activeTile.shadow = this.easeFunction(this.start, this.finish, amount);
  };
  return ShadowAnimation;
}(Tily.Animation));