
/* _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/

	FILE	: Mouse.h

+ ------ Explanation of file --------------------------------------------------------------------------

	入力処理、フォーカス処理も

+ _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ */

#pragma once

class Card;
class WindowManager;
class RayTrace;

// 入力状態
enum{
	MOUSE_PULL,
	MOUSE_PUSH,
	MOUSE_HOLD,
};

// ヒットチェック結果
enum{
	MOUSE_HIT_NON,
	MOUSE_HIT_FOCUS,
	MOUSE_HIT_CLICK,
};

typedef struct{
	Card*	card;	// カードへのポインタ
//	int		zone;	// ゾーン
//	int		num;	// 配列要素数
//	int		ply;	// プレイヤー
	int		serNo;	// 選択時のカード
}FOCUS_ST;

class Mouse
{
	private:
		WindowManager*	m_pWinMan;		// ウィンドウ管理
		RayTrace*		m_pRayTrace;	// レイトレース

	private:
		void	release(void);			// 解放

	public:
		void	init(void);				// 初期化

		void	update	(void);			// 更新

		POINT	getPos		(void){ POINT pos = {(int)m_pos.x, (int)m_pos.y}; return(pos); };		// マウス座標取得
		int		getInputL	(void){ return(m_inputL); };	// Lクリック状態取得
		int		getInputR	(void){ return(m_inputR); };	// Rクリック状態取得
		int		getWheel	(void){ return(m_wheel); }		// ホイール取得

		void	setWheel	(int w){ m_updateWheel = w; }

		bool	isHitPlane(VEC3* pPos, D3DXMATRIX* pWorld, VEC3* pHit = NULL);	// 3D面とのヒットチェック

	private:
		WindowManager*	getWinMan(void){ return(m_pWinMan); }
		RayTrace*	getRayTrace(void){ return(m_pRayTrace); }

	private:
		VEC2	m_pos;					// 座標
		int			m_inputL;				// L入力状態
		int			m_inputR;				// R入力状態
		int			m_wheel;				// ホイール
		int			m_updateWheel;			// メッセージからのホイール格納
};

