docs: function DisplayObject()
  {
      this.last = this;
      this.first = this;
      /**
       * The coordinate of the object relative to the local coordinates of the parent.
       *
       * @property position
       * @type Point
       */
      this.position = new Point();
  
      /**
       * The scale factor of the object.
       *
       * @property scale
       * @type Point
       */
      this.scale = new Point(1,1);//{x:1, y:1};
  
      /**
       * The pivot point of the displayObject that it rotates around
       *
       * @property pivot
       * @type Point
       */
      this.pivot = new Point(0,0);
  
      /**
       * The rotation of the object in radians.
       *
       * @property rotation
       * @type Number
       */
      this.rotation = 0;
  
      /**
       * The opacity of the object.
       *
       * @property alpha
       * @type Number
       */
      this.alpha = 1;
  
      /**
       * The visibility of the object.
       *
       * @property visible
       * @type Boolean
       */
      this.visible = true;
  
      /**
       * This is the defined area that will pick up mouse / touch events. It is null by default.
       * Setting it is a neat way of optimising the hitTest function that the interactionManager will use (as it will not need to hit test all the children)
       *
       * @property hitArea
       * @type Rectangle|Circle|Ellipse|Polygon
       */
      this.hitArea = null;
  
      /**
       * This is used to indicate if the displayObject should display a mouse hand cursor on rollover
       *
       * @property buttonMode
       * @type Boolean
       */
      this.buttonMode = false;
  
      /**
       * Can this object be rendered
       *
       * @property renderable
       * @type Boolean
       */
      this.renderable = false;
  
      /**
       * [read-only] The display object container that contains this display object.
       *
       * @property parent
       * @type DisplayObjectContainer
       * @readOnly
       */
      this.parent = null;
  
      /**
       * [read-only] The stage the display object is connected to, or undefined if it is not connected to the stage.
       *
       * @property stage
       * @type Stage
       * @readOnly
       */
      this.stage = null;
  
      /**
       * [read-only] The multiplied alpha of the displayobject
       *
       * @property worldAlpha
       * @type Number
       * @readOnly
       */
      this.worldAlpha = 1;
  
      /**
       * [read-only] Whether or not the object is interactive, do not toggle directly! use the `interactive` property
       *
       * @property _interactive
       * @type Boolean
       * @readOnly
       * @private
       */
      this._interactive = false;
  
      this.defaultCursor = 'pointer';
  
      /**
       * [read-only] Current transform of the object based on world (parent) factors
       *
       * @property worldTransform
       * @type Mat3
       * @readOnly
       * @private
       */
      this.worldTransform = mat3.create();//mat3.identity();
  
      /**
       * [read-only] Current transform of the object locally
       *
       * @property localTransform
       * @type Mat3
       * @readOnly
       * @private
       */
      this.localTransform = mat3.create();//mat3.identity();
  
      /**
       * [NYI] Unkown
       *
       * @property color
       * @type Array<>
       * @private
       */
      this.color = [];
  
      /**
       * [NYI] Holds whether or not this object is dynamic, for rendering optimization
       *
       * @property dynamic
       * @type Boolean
       * @private
       */
      this.dynamic = true;
  
      // chach that puppy!
      this._sr = 0;
      this._cr = 1;
  
  
      this.filterArea = new Rectangle(0,0,1,1);
  
      /*
       * MOUSE Callbacks
       */
  
      /**
       * A callback that is used when the users clicks on the displayObject with their mouse
       * @method click
       * @param interactionData {InteractionData}
       */
  
      /**
       * A callback that is used when the user clicks the mouse down over the sprite
       * @method mousedown
       * @param interactionData {InteractionData}
       */
  
      /**
       * A callback that is used when the user releases the mouse that was over the displayObject
       * for this callback to be fired the mouse must have been pressed down over the displayObject
       * @method mouseup
       * @param interactionData {InteractionData}
       */
  
      /**
       * A callback that is used when the user releases the mouse that was over the displayObject but is no longer over the displayObject
       * for this callback to be fired, The touch must have started over the displayObject
       * @method mouseupoutside
       * @param interactionData {InteractionData}
       */
  
      /**
       * A callback that is used when the users mouse rolls over the displayObject
       * @method mouseover
       * @param interactionData {InteractionData}
       */
  
      /**
       * A callback that is used when the users mouse leaves the displayObject
       * @method mouseout
       * @param interactionData {InteractionData}
       */
  
  
      /*
       * TOUCH Callbacks
       */
  
      /**
       * A callback that is used when the users taps on the sprite with their finger
       * basically a touch version of click
       * @method tap
       * @param interactionData {InteractionData}
       */
  
      /**
       * A callback that is used when the user touch's over the displayObject
       * @method touchstart
       * @param interactionData {InteractionData}
       */
  
      /**
       * A callback that is used when the user releases a touch over the displayObject
       * @method touchend
       * @param interactionData {InteractionData}
       */
  
      /**
       * A callback that is used when the user releases the touch that was over the displayObject
       * for this callback to be fired, The touch must have started over the sprite
       * @method touchendoutside
       * @param interactionData {InteractionData}
       */
  }