anchor.diff:        player.movement.add(a.transform(player.rotation.clone()).scale(-0.0001));
       }
       if (pressed(81)) { //q
  -      // doesn't work
         Matrix2 a = new Matrix2.rotation(radians(1.0));
         player.rotation = a.transform(player.rotation.clone()); 
       }
       if (pressed(69)) { //e
  -      // doesn't work
         Matrix2 a = new Matrix2.rotation(radians(-1.0));
         player.rotation = a.transform(player.rotation.clone());
       }
  
positive.code:     // move
      _animate(time);
      _handleKeys();
  
      // keep drawing
      window.requestAnimationFrame(this.render);
  
negative.code:   }
  
    TwoBarrels(CanvasElement canvas) {
      canvas.onClick.listen((e){
        canvas.requestPointerLock();
      });
      window.onResize.listen((e){
        resize(canvas, e.currentTarget.innerWidth, e.currentTarget.innerHeight);
      });
      window.onMouseMove.listen((e){
        mousemove_x = e.movement.x;
      });
      document.onPointerLockChange.listen((e){
        hasPointerLock = canvas == document.pointerLockElement;
      });
      // weird, but without specifying size this array throws exception on []
      _currentlyPressedKeys = new List<bool>(128);
  