#ifndef _DEBUG_CAMERA_CONTROLLER_H_
#define _DEBUG_CAMERA_CONTROLLER_H_
#include "Camera/InteractiveCameraController.h"
#include "Utils/CasualCoreCandidates.h"
namespace bne
{
BEGIN_CUSTOMOBJECT(DebugCameraController, ::InteractiveCameraController)
public:
DebugCameraController();
~DebugCameraController();
virtual bool Init() override;
virtual void Reset() override;
virtual void SetCameraControl(RKCamera* camera) override;
virtual void UpdateFromCamera(RKCamera* camera) override;
virtual void CopySettingFromCameraCtrl(CasualCore::CameraController* ctrl) override;
virtual bool OnKeyDown(int keycode) override;
virtual bool OnKeyUp(int keycode) override;
virtual void Pinch(float x, float y) override;
virtual void PanStarted(float x, float y) override;
virtual void PanChanged(float x, float y) override;
virtual void PanEnded(float x, float y) override;
virtual void RotateStarted(float x, float y) override;
virtual void RotateChanged(float x, float y) override;
virtual void HeightStarted(float x, float y);
virtual void HeightChanged(float x, float y);
virtual void Update(float time) override;
private:
void ZoomBy(float zoom_delta);
void UpdateZoomPoint(float x, float y);
RKVector ScreenToWorld(const RKVector2 & position);
RKVector GetLookAtPoint(RKTransformObject* camera);
// runtime data
RKVector2 m_pinchRefScreenPoint;
RKVector m_vBoundaryCenter;
RKVector m_CameraDesiredTarget;
RKVector2 m_currentScreenPoint;
RKVector2 m_previousScreenPoint;
RKVector m_initialPosition;
float m_yaw;
float m_pitch;
enum Mode
{
Mode_Rotate,
Mode_Pan,
Mode_Height
};
Mode m_mode;
CCCUtils::V2BoundsTy m_PanningLimitVertices;
CCCUtils::V2BoundsTy m_ExtendedPanningLimitVertices;
RKVector2 m_vPanningLimitCentroid;
END_CUSTOMOBJECT(DebugCameraController)
}
#endif