docs: function(points) {
          var minX = Infinity,
              maxX = -Infinity,
              minY = Infinity,
              maxY = -Infinity;
          var l = points.length;
  
          // Calculate the MBR of the points by finding the min/max x and y
          for (var i = 0; i < l; i += 2) {
              if (points[i] < minX) minX = points[i];
              if (points[i] > maxX) maxX = points[i];
              if (points[i + 1] < minY) minY = points[i + 1];
              if (points[i + 1] > maxY) maxY = points[i + 1];
          }
  
          // This describes a circle centered on the MBR of the points, with a diameter equal to its diagonal
          // It will be used to find a rough bounding box round the points, even if they've been rotated
          var cbr = {
              cx: (minX + maxX) / 2,
              cy: (minY + maxY) / 2,
              r:
                  Math.sqrt(
                      (maxX - minX) * (maxX - minX) +
                          (maxY - minY) * (maxY - minY)
                  ) / 2
          };
  
          // We need to worry about resizing, but only if resizing could possibly change whether the hitbox is in or out of bounds
          // Thus if the upper-left corner is out of bounds, then there's no need to recheck on resize
          if (minX >= 0 && minY >= 0) {
              this._checkBounds = function() {
                  if ((this._cbr === null && this._w < maxX) || this._h < maxY) {
                      this._cbr = cbr;
                      this._calculateMBR();
                  } else if (this._cbr) {
                      this._cbr = null;
                      this._calculateMBR();
                  }
              };
              this.bind("Resize", this._checkBounds);
          }
  
          // If the hitbox is within the entity, _cbr is null
          // Otherwise, set it, and immediately calculate the bounding box.
          if (minX >= 0 && minY >= 0 && maxX <= this._w && maxY <= this._h) {
              this._cbr = null;
              return false;
          } else {
              this._cbr = cbr;
              this._calculateMBR();
              return true;
          }
      }