/***************************************************************/
//
//
//		DirectX	[ gamepad.cpp ]
//
//											Author	kazuki tanaka
//											Date	2016 11/28
/*---------------------------------------------------------------
■Update : 2016/11/28
			gamepad.hの作成

/*-------------------------------------------------------------*/
#ifndef _GAMEPAD_H_

#define _GAMEPAD_H_

#include "input.h"

/*---------------------------------------------------------------
	マクロ定義
---------------------------------------------------------------*/
#define	PAD_KEY_MAX		( 128 )							// キーの最大数


// ゲームパッド入力クラス
class CInputGamepad : public CInput
{
public:

	// ジョイスティックボタン仮想値( PS3想定 )
	typedef enum{

		GP_BUTTON_TRIANGLE = 0,							// △ボタン
		GP_BUTTON_CIRCLE,								// 〇ボタン
		GP_BUTTON_CROSS,								// ×ボタン
		GP_BUTTON_SQUARE,								// □ボタン
		GP_BUTTON_L1,									// L1ボタン
		GP_BUTTON_R1,									// R1ボタン
		GP_BUTTON_L2,									// L2ボタン
		GP_BUTTON_R2,									// R2ボタン
		GP_BUTTON_SELECT,								// SELECTボタン
		GP_BUTTON_START,								// STARTボタン
		GP_BUTTON_L_STHICK,								// 左STHICKボタン
		GP_BUTTON_R_STHICK,								// 右STHICKボタン
		GP_BUTTON_POWER									// POWERボタン

	}STATE;

	CInputGamepad( );
	~CInputGamepad( );

	static CInputGamepad* Create( void );				// CMouse Create Instance Class

	HRESULT Init( HINSTANCE hInstance, HWND hWnd );
	void Uninit(void);
	void Update(void);

	bool GetKeyPress(int nKey);
	bool GetKeyTrigger(int nKey);
	bool GetKeyRelease(int nKey);
	bool GetKeyRepeat(int nKey);
	void FlushKeyTrigger(int nKey);

	bool GetGamepadUp( void );
	bool GetGamepadDown( void );
	bool GetGamepadLeft( void );
	bool GetGamepadRight( void );

	bool GetGamepadUpTrigger( void );
	bool GetGamepadDownTrigger( void );
	bool GetGamepadLeftTrigger( void );
	bool GetGamepadRightTrigger( void );

private:

	DIJOYSTATE2				dijs;						// ゲームパッドの初期化
	DIJOYSTATE2				setDijs;					// ゲームパッドの初期値保存用
	DIJOYSTATE2				dijsTrig;					// ゲームパッドの特殊ボタントリガー(十字など)

	BYTE	stateTrigger[PAD_KEY_MAX];					// トリガーワーク
	BYTE	stateRelease[PAD_KEY_MAX];					// リリースワーク
	BYTE	stateRepeat[PAD_KEY_MAX];					// リピートワーク
	int     stateRepeatCnt[PAD_KEY_MAX];				// リピートカウンタ
		
};


#endif	// _GAMEPAD_H_


