shadow$provide.module$node_modules$pixi_DOT_js$lib$maths$shapes$Polygon = function(global, require, module, exports) {
  var deprecation = require("module$node_modules$pixi_DOT_js$lib$utils$logging$deprecation"), squaredDistanceToLineSegment = require("module$node_modules$pixi_DOT_js$lib$maths$misc$squaredDistanceToLineSegment"), Rectangle = require("module$node_modules$pixi_DOT_js$lib$maths$shapes$Rectangle");
  "use strict";
  class Polygon {
    constructor(...points) {
      this.type = "polygon";
      points = Array.isArray(points[0]) ? points[0] : points;
      if ("number" !== typeof points[0]) {
        const p = [];
        for (let i = 0, il = points.length; i < il; i++) {
          p.push(points[i].x, points[i].y);
        }
        points = p;
      }
      this.points = points;
      this.closePath = !0;
    }
    isClockwise() {
      let area = 0;
      const points = this.points, length = points.length;
      for (let i = 0; i < length; i += 2) {
        area += (points[(i + 2) % length] - points[i]) * (points[(i + 3) % length] + points[i + 1]);
      }
      return 0 > area;
    }
    containsPolygon(polygon) {
      var thisBounds = this.getBounds(void 0);
      const otherBounds = polygon.getBounds(void 0);
      if (!thisBounds.containsRect(otherBounds)) {
        return !1;
      }
      polygon = polygon.points;
      for (thisBounds = 0; thisBounds < polygon.length; thisBounds += 2) {
        if (!this.contains(polygon[thisBounds], polygon[thisBounds + 1])) {
          return !1;
        }
      }
      return !0;
    }
    clone() {
      var points = this.points.slice();
      points = new Polygon(points);
      points.closePath = this.closePath;
      return points;
    }
    contains(x, y) {
      let inside = !1;
      const length = this.points.length / 2;
      for (let i = 0, j = length - 1; i < length; j = i++) {
        const xi = this.points[2 * i], yi = this.points[2 * i + 1], xj = this.points[2 * j], yj = this.points[2 * j + 1];
        yi > y !== yj > y && x < (y - yi) / (yj - yi) * (xj - xi) + xi && (inside = !inside);
      }
      return inside;
    }
    strokeContains(x, y, strokeWidth, alignment = 0.5) {
      strokeWidth *= strokeWidth;
      alignment = strokeWidth * (1 - alignment);
      strokeWidth -= alignment;
      const {points} = this, iterationLength = points.length - (this.closePath ? 0 : 2);
      for (let i = 0; i < iterationLength; i += 2) {
        const x1 = points[i], y1 = points[i + 1], x2 = points[(i + 2) % points.length], y2 = points[(i + 3) % points.length];
        if (squaredDistanceToLineSegment.squaredDistanceToLineSegment(x, y, x1, y1, x2, y2) <= (0 > Math.sign((x2 - x1) * (y - y1) - (y2 - y1) * (x - x1)) ? strokeWidth : alignment)) {
          return !0;
        }
      }
      return !1;
    }
    getBounds(out) {
      out || (out = new Rectangle.Rectangle());
      const points = this.points;
      let minX = Infinity, maxX = -Infinity, minY = Infinity, maxY = -Infinity;
      for (let i = 0, n = points.length; i < n; i += 2) {
        const x = points[i], y = points[i + 1];
        minX = x < minX ? x : minX;
        maxX = x > maxX ? x : maxX;
        minY = y < minY ? y : minY;
        maxY = y > maxY ? y : maxY;
      }
      out.x = minX;
      out.width = maxX - minX;
      out.y = minY;
      out.height = maxY - minY;
      return out;
    }
    copyFrom(polygon) {
      this.points = polygon.points.slice();
      this.closePath = polygon.closePath;
      return this;
    }
    copyTo(polygon) {
      polygon.copyFrom(this);
      return polygon;
    }
    toString() {
      return `[pixi.js/math:PolygoncloseStroke=${this.closePath}points=${this.points.reduce((pointsDesc, currentPoint) => `${pointsDesc}, ${currentPoint}`, "")}]`;
    }
    get lastX() {
      return this.points[this.points.length - 2];
    }
    get lastY() {
      return this.points[this.points.length - 1];
    }
    get x() {
      deprecation.deprecation("8.11.0", "Polygon.lastX is deprecated, please use Polygon.lastX instead.");
      return this.points[this.points.length - 2];
    }
    get y() {
      deprecation.deprecation("8.11.0", "Polygon.y is deprecated, please use Polygon.lastY instead.");
      return this.points[this.points.length - 1];
    }
    get startX() {
      return this.points[0];
    }
    get startY() {
      return this.points[1];
    }
  }
  exports.Polygon = Polygon;
};

//# sourceMappingURL=module$node_modules$pixi_DOT_js$lib$maths$shapes$Polygon.js.map
