// fk_TrackBallクラス
// マウスでの自由な視点操作を提供します。

#ifndef __FK_TRACKBALL_HEADER__
#define __FK_TRACKBALL_HEADER__

#include <FK/Window.h>
#include <FK/Model.h>
#include <FK/Vector.h>
#include <FK/Angle.h>
#include <Fl/Fl.h>

#ifdef    _DEBUG
#define     new         new(_NORMAL_BLOCK,__FILE__,__LINE__)
#define     malloc(p1)  _malloc_dbg(p1,_NORMAL_BLOCK,__FILE__,__LINE__)
#endif    // _DEBUG                   ←抜けていた行

class fk_TrackBall {

private:
	fk_Window	*fk_win;							// FKウィンドウ
	fk_Model	*camera;							// カメラ
	fk_Vector	lookPos;							// ３人称視点注視点

	int			nowX, nowY, oldX, oldY;				// ウィンドウ上座標
	int			echoX, echoY;
	bool		lookClick, distClick, moveClick;	// 1ループ前のクリックを記憶

public:
	fk_TrackBall(fk_Window*, fk_Model* = NULL);		// コンストラクタ

	// <プロパティ

	// 操作に使用するマウスボタンの指定
	fk_MouseButton	lookButton, distButton[2], moveButton;

	bool		overCheck;							// 画面外にカーソルが出た場合の判定の有無
	double		divPos, divLook;					// カーソル移動量:処理量比率指定
	double		divDist;							// ３人称視点制御カーソル移動量:処理量比率指定

	bool		bEcho;								// エコーの有無

	// >

	void		setCamera(fk_Model*);				// カメラの変更
	bool		isSetCamera(void);					// カメラポインタは渡されているか

	void		setLookTo(fk_Vector);				// ３人称視点注視点変更

	void		controlLookTo(void);				// ３人称視点位置制御
	void		controlLookToDist(void);			// ３人称視点距離制御
	void		controlLookToMove(void);			// ３人称視点注視点制御

	void		controlLookToSC(void);				// ３人称視点ショートカット制御

	void		update(void)
	{
		controlLookToMove();
		controlLookToDist();
		controlLookTo();
	}

};

#endif
