/******************************************************************************
	[Input.h]

		入力系のインタフェイスを定義します．

		Define input interface.

	Copyright (C) 2004 Ki

    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
******************************************************************************/
#ifndef INPUT_INTERFACE_H_INCLUDED
#define INPUT_INTERFACE_H_INCLUDED

#define DIRECTINPUT_VERSION	0x0500	//Kitao追加。環境にもよるかもしれないが、DirectInput5が軽い。7だとやや遅延あり。スペースハリアーがわかりやすい。

#include <stdio.h>
#include <dinput.h>
#include "TypeDefs.h"

#define INPUT_NUM_BUTTON	26 //Kitao更新。ハットスイッチ，16ボタン，Ｚ軸トリガにも対応。


enum KeyType
{
	INPUT_JOYSTICK_UP         = 0x00000001,
	INPUT_JOYSTICK_DOWN       = 0x00000002,
	INPUT_JOYSTICK_LEFT       = 0x00000004,
	INPUT_JOYSTICK_RIGHT      = 0x00000008,
	INPUT_JOYSTICK_POVUP      = 0x00000010,//Kitao追加。ハットスイッチにも対応。
	INPUT_JOYSTICK_POVDOWN    = 0x00000020,//Kitao追加
	INPUT_JOYSTICK_POVLEFT    = 0x00000040,//Kitao追加
	INPUT_JOYSTICK_POVRIGHT   = 0x00000080,//Kitao追加
	INPUT_JOYSTICK_BUTTON1    = 0x00000100,
	INPUT_JOYSTICK_BUTTON2    = 0x00000200,
	INPUT_JOYSTICK_BUTTON3    = 0x00000400,
	INPUT_JOYSTICK_BUTTON4    = 0x00000800,
	INPUT_JOYSTICK_BUTTON5    = 0x00001000,
	INPUT_JOYSTICK_BUTTON6    = 0x00002000,
	INPUT_JOYSTICK_BUTTON7    = 0x00004000,
	INPUT_JOYSTICK_BUTTON8    = 0x00008000,
	INPUT_JOYSTICK_BUTTON9    = 0x00010000,
	INPUT_JOYSTICK_BUTTON10   = 0x00020000,
	INPUT_JOYSTICK_BUTTON11   = 0x00040000,
	INPUT_JOYSTICK_BUTTON12   = 0x00080000,
	INPUT_JOYSTICK_BUTTON13   = 0x00100000,//Kitao追加
	INPUT_JOYSTICK_BUTTON14   = 0x00200000,//Kitao追加
	INPUT_JOYSTICK_BUTTON15   = 0x00400000,//Kitao追加
	INPUT_JOYSTICK_BUTTON16   = 0x00800000,//Kitao追加
	INPUT_JOYSTICK_L2ZTRIGGER = 0x01000000,//Kitao追加。Ｚ軸トリガにも対応。v2.81
	INPUT_JOYSTICK_R2ZTRIGGER = 0x02000000 //Kitao追加
};


//Kitao追加。多人数プレイでもキーボードを使えるようにした。そのために、各PCEパッドの設定変数を用意。
typedef struct
{
	Sint16	buttonU; //上キーの設定。アスキーコード(1〜255)。ジョイパッド１(300〜399。100ボタンまで対応)。ジョイパッド２(400〜499)。以下ジョイパッド５本まで同様。
	Sint16	buttonR; //右キーの設定
	Sint16	buttonD; //下キーの設定
	Sint16	buttonL; //左キーの設定
	Sint16	buttonSel; //Selectボタンの設定
	Sint16	buttonRun; //Runボタンの設定
	Sint16	button1; //Iボタンの設定
	Sint16	button2; //IIボタンの設定
	Sint16	button3; //IIIボタンの設定
	Sint16	button4; //IVボタンの設定
	Sint16	button5; //Vボタンの設定
	Sint16	button6; //VIボタンの設定
} PCEPAD;


typedef struct
{
	DIJOYSTATE2					joyState; //ボタンの状態。XInput利用時には非使用。v2.88記
	Uint32						buttonState; //Kitao更新。16ボタンに対応。ハットスイッチぶんも入れたのでUint32に。※XInput利用時は10ボタンまで。v2.88記
} JOYSTICK; //Kitao更新


BOOL	INPUT_Init();
void	INPUT_Deinit();

//Kitao更新
void
INPUT_UpdateState();

//v2.95追加
void
INPUT_UpdatePceState();

//v2.95更新
BOOL
INPUT_IsPressedPce(Sint32 padID, Sint32 userButtonID);

//v2.95追加
BOOL
INPUT_GetPressedFunctionButton();

BOOL	INPUT_IsTriggered(Sint32 userButtonID);

//Kitao更新。App.cで読み込んだ_PcePad[]を、こちらにも反映させる関数に。
void
INPUT_ConnectButton(
	Sint32	padID,
	PCEPAD*	pcepad);

void	INPUT_Record(BOOL bRecord);
void	INPUT_PlayRecord(BOOL bPlayrecord); //Kitao更新

Sint32	INPUT_GetNumJoystick();

BOOL	INPUT_WriteBuffer(FILE*	fp);
BOOL	INPUT_ReadBuffer(FILE* fp);

//v2.95追加
BOOL
INPUT_GetPlayRecord();

//v2.95追加
BOOL
INPUT_GetOldPlayRecord();

//Kitao追加
void
INPUT_Acquire();

//Kitao追加
BOOL
INPUT_CheckButtonState(
	Sint32	a);

//Kitao追加。v2.95
BOOL
INPUT_CheckPceButtonState(
	Sint32	padID,
	Sint32	a);

//Kitao追加
BOOL
INPUT_CheckRunButtonState();

//Kitao追加
void
INPUT_ResetGameSetting();

//Kitao追加。v2.85
BOOL
INPUT_GetGameSetting();

//Kitao追加。v2.89
void
INPUT_SetGameSetting(
	BOOL	bGameSetting);

//Kitao追加
void
INPUT_SetKonamiStereo(
	BOOL	bKonamiStereo);

//Kitao追加
void
INPUT_SetGradiusII(
	BOOL	bGradiusII);

//Kitao追加
void
INPUT_SetSorcerianOpSkip(
	BOOL	bSorcerianOpSkip);

//Kitao追加
void
INPUT_SetDarius26Tai(
	BOOL	bDarius26Tai);

//Kitao追加
void
INPUT_SetRTypeCD(
	BOOL	bRTypeCD);

//Kitao追加
BOOL
INPUT_GetRTypeCD();

#endif // INPUT_INTERFACE_H_INCLUDED
