#ifndef INTERACTIVE_CAMERA_CONTROLLER_H
#define INTERACTIVE_CAMERA_CONTROLLER_H

#include "CasualCore/Graphics/CameraController.h"
#include "CasualCore.h"
#include "RKCollision.h"

class InteractiveCameraController : public CasualCore::CameraController
{
public:
  typedef CasualCore::CameraController Parent;

public:

  virtual void Reset() { }

  // new virtual function as base class does not provide one
  virtual void SetCameraControl(RKCamera* camera) { Parent::ControlCamera(camera); }
  virtual void UpdateFromCamera(RKCamera* camera) {}

  virtual void LockCameraInput(bool locked) {}
  virtual void EnableCameraExtents(bool enabled) {}

  // new set of virtual functions as base ones do not provide event contexts
  virtual bool OnKeyDown(int keycode) { return false; }
  virtual bool OnKeyUp(int keycode) { return false; }

  virtual void PinchSet(float x, float y) {}
  virtual void PinchStarted(float x, float y) {}
  virtual void PinchChanged(float scale, float velocity) {}
  virtual void PinchEnded(float x, float y) {}
  virtual void Pinch(float x, float y) {}

  virtual void OnTap(float x, float y) {}
  virtual void PanStarted(float x, float y) {}
  virtual void PanChanged(float x, float y) {}
  virtual void PanEnded(float x, float y) {}

  virtual void RotateStarted(float x, float y) {}
  virtual void RotateChanged(float x, float y) {}
  virtual void RotateEnded(float x, float y) {}

  // convenience methods
  virtual void OnPinchGesture(int gestureId, float x, float y);
  virtual void OnPanGesture(int gestureId, float x, float y);
  virtual void OnRotateGesture(int gestureId, float x, float y);
  virtual void OnTwoFingerTapGesture(int gestureId, float x, float y) {}
};

#endif // INTERACTIVE_CAMERA_CONTROLLER_H
