anchor.diff:        removeFromWorld();
       }
   
  -    x = x + directionX * speedX * time;
  -    y = y + directionY * speedY * time;
  +    x = x + mainDirection.x * speedX * time;
  +    y = y + mainDirection.y * speedY * time;
   
       return true;
   
  
positive.code:    */
    State get context => _context;
  
    void set direction(num angle) {
      num radian = angle * (math.PI / 180);
      directionX = math.cos(radian);
      directionY = math.sin(radian);
    }
  
    move(String direction) {
      switch (direction) {
        case 'up':
          directionY = upDirection;
          break;
        case 'down':
          directionY = downDirection;
          break;
        case 'left':
          directionX = leftDirection;
          break;
        case 'right':
          directionX = rightDirection;
          break;
      }
    }
  
    stop({stopDirectionX: true, stopDirectionY: true}) {
      if (stopDirectionX) directionX = 0;
      if (stopDirectionY) directionY = 0;
    }
  
  }
  
negative.code:    * */
    num speedY = 0;
  
    StageXL.Vector mainDirection = new StageXL.Vector.zero();
  
    StageXL.Vector upDirection = new StageXL.Vector(0, -1);
    StageXL.Vector downDirection = new StageXL.Vector(0, 1);
    StageXL.Vector leftDirection = new StageXL.Vector(-1, 0);
    StageXL.Vector rightDirection = new StageXL.Vector(1, 0);
    
    //TODO: add it into move() and rotate this too when the sprite is rotated
    StageXL.Rectangle maxArea = new StageXL.Rectangle(-1, -1, 2, 2);
  
  
    /**
  