anchor.diff:      */
     }
   
  -  bool currentlyPressedMouseButton(int key) =>
  -      _currentlyPressedMouseButtons.contains(key);
  +  bool currentlyPressedButton(int key) =>
  +      _currentlyPressedButtons.contains(key);
  +
  +  // if you use this function make sure you call AfterFrameCleanup
  +  bool justPressedButton(int key) => _justPressedButtons.contains(key);
  +
  +  // if you use this function make sure you call AfterFrameCleanup
  +  bool justReleasedButton(int key) => _justReleasedButtons.contains(key);
   
     void AfterFrameCleanup() {
       moveDeltaY = 0;
       moveDeltaX = 0;
       wheelDeltaY = 0;
  +    _justReleasedButtons.clear();
  +    _justPressedButtons.clear();
     }
   }
   
  
positive.code:     addPosFromVec(_lookAtPos);
      lookAt(_lookAtPos);
      rollLeft(roll);
      _keyboard.AfterFrameCleanup();
      _mouse.AfterFrameCleanup();
    }
  }
  
  
negative.code:   double roll = 0.0;
    final VM.Vector3 _lookAtPos = new VM.Vector3.zero();
    num mouseWheelFactor = -0.02;
    final Keyboard keyboard;
    final Mouse mouse;
  
    /// OrbitCamera initializes an orbiting camera
    ///
    /// @param this._radius blah
    /// @param this._polar blah
    OrbitCamera(this._radius, this.azimuth, this.polar, HTML.Element eventElement)
        : keyboard = new Keyboard(null),
          mouse = new Mouse(eventElement),
          super("camera:orbit");
  
    void setLookAt(VM.Vector3 v) {
  