docs: function(polygon) {
          // Unbind anything bound to "Resize"
          this.unbind("Resize", this._resizeMap);
          this.unbind("Resize", this._checkBounds);
  
          if (!polygon) {
              // If no polygon is specified, then a polygon is created that matches the bounds of the entity
              // It will be adjusted on a "Resize" event
              polygon = new Crafty.polygon([
                  0,
                  0,
                  this._w,
                  0,
                  this._w,
                  this._h,
                  0,
                  this._h
              ]);
              this.bind("Resize", this._resizeMap);
              this._cbr = null;
          } else {
              // Otherwise, we set the specified hitbox, converting from a list of arguments to a polygon if necessary
              if (arguments.length > 1) {
                  //convert args to array to create polygon
                  var args = Array.prototype.slice.call(arguments, 0);
                  polygon = new Crafty.polygon(args);
                  // Otherwise, we set the specified hitbox, converting from an array of points to a polygon if necessary
              } else if (polygon.constructor === Array) {
                  //Clone the array so we don't modify it for anything else that might be using it
                  polygon = new Crafty.polygon(polygon.slice());
                  // Otherwise, we set the specified hitbox
              } else {
                  //Clone the polygon so we don't modify it for anything else that might be using it
                  polygon = polygon.clone();
              }
              // Check to see if the polygon sits outside the entity, and set _cbr appropriately
              // On resize, the new bounds will be checked if necessary
              this._findBounds(polygon.points);
          }
  
          // If the entity is currently rotated, the points in the hitbox must also be rotated
          if (this.rotation) {
              polygon.rotate(
                  this.rotation,
                  this._origin.x,
                  this._origin.y,
                  Math.cos(-this.rotation * DEG_TO_RAD),
                  Math.sin(-this.rotation * DEG_TO_RAD)
              );
          }
  
          // Finally, assign the hitbox, and attach it to the "Collision" entity
          this.map = polygon;
          this.attach(this.map);
          this.map.shift(this._x, this._y);
          this.trigger("NewHitbox", polygon);
          return this;
      }