"use strict";
Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
const tslib_es6 = require("../../../node_modules/tslib/tslib.es6.js");
const Polyline = require("./Polyline.js");
const EffectLine = require("./EffectLine.js");
const vector = require("../../../../../../zrender@5.4.4/node_modules/zrender/lib/core/vector.js");
var EffectPolyline = (
  /** @class */
  function(_super) {
    tslib_es6.__extends(EffectPolyline2, _super);
    function EffectPolyline2() {
      var _this = _super !== null && _super.apply(this, arguments) || this;
      _this._lastFrame = 0;
      _this._lastFramePercent = 0;
      return _this;
    }
    EffectPolyline2.prototype.createLine = function(lineData, idx, seriesScope) {
      return new Polyline.default(lineData, idx, seriesScope);
    };
    EffectPolyline2.prototype._updateAnimationPoints = function(symbol, points) {
      this._points = points;
      var accLenArr = [0];
      var len = 0;
      for (var i = 1; i < points.length; i++) {
        var p1 = points[i - 1];
        var p2 = points[i];
        len += vector.dist(p1, p2);
        accLenArr.push(len);
      }
      if (len === 0) {
        this._length = 0;
        return;
      }
      for (var i = 0; i < accLenArr.length; i++) {
        accLenArr[i] /= len;
      }
      this._offsets = accLenArr;
      this._length = len;
    };
    EffectPolyline2.prototype._getLineLength = function() {
      return this._length;
    };
    EffectPolyline2.prototype._updateSymbolPosition = function(symbol) {
      var t = symbol.__t < 1 ? symbol.__t : 2 - symbol.__t;
      var points = this._points;
      var offsets = this._offsets;
      var len = points.length;
      if (!offsets) {
        return;
      }
      var lastFrame = this._lastFrame;
      var frame;
      if (t < this._lastFramePercent) {
        var start = Math.min(lastFrame + 1, len - 1);
        for (frame = start; frame >= 0; frame--) {
          if (offsets[frame] <= t) {
            break;
          }
        }
        frame = Math.min(frame, len - 2);
      } else {
        for (frame = lastFrame; frame < len; frame++) {
          if (offsets[frame] > t) {
            break;
          }
        }
        frame = Math.min(frame - 1, len - 2);
      }
      var p = (t - offsets[frame]) / (offsets[frame + 1] - offsets[frame]);
      var p0 = points[frame];
      var p1 = points[frame + 1];
      symbol.x = p0[0] * (1 - p) + p * p1[0];
      symbol.y = p0[1] * (1 - p) + p * p1[1];
      var tx = symbol.__t < 1 ? p1[0] - p0[0] : p0[0] - p1[0];
      var ty = symbol.__t < 1 ? p1[1] - p0[1] : p0[1] - p1[1];
      symbol.rotation = -Math.atan2(ty, tx) - Math.PI / 2;
      this._lastFrame = frame;
      this._lastFramePercent = t;
      symbol.ignore = false;
    };
    return EffectPolyline2;
  }(EffectLine.default)
);
const EffectPolyline$1 = EffectPolyline;
exports.default = EffectPolyline$1;
