#include "Padinput.h"
Padinput::Padinput(void)
{
M_NowRot =0;
M_EdgeRot =0;
this->PadKnd[0] = DX_INPUT_KEY_PAD1;
this->PadKnd[1] = DX_INPUT_PAD1 | DX_INPUT_KEY;//PAD1&キーボード@[0]と同じかも?
this->PadKnd[2] = DX_INPUT_PAD2 | DX_INPUT_KEY;
this->PadKnd[3] = DX_INPUT_PAD3;
this->PadKnd[4] = DX_INPUT_PAD4;
for(int i=0;i<5;i++)
{
for(int s= 0;s<60;s++)
{
this->Input_histerisis[i][s] =0 ;
}
}
}
Padinput::~Padinput(void)
{
}
bool Padinput::check_button(int in , int num)//!<ボタン入力監視関数
{
int f=0;
switch(num)
{
case 0: f = (in>0)?1:0;//なにかの入力あり.
case 1: f=in&PAD_INPUT_A;break;
case 2: f=in&PAD_INPUT_B;break;
case 3: f=in&PAD_INPUT_C;break;
case 4: f=in&PAD_INPUT_X;break;
case 5: f=in&PAD_INPUT_Y;break;
case 6: f=in&PAD_INPUT_Z;break;
case 7: f=in&PAD_INPUT_L;break;
case 8: f=in&PAD_INPUT_R;break;
case 9: f=in&PAD_INPUT_START;break;
case 10: f=in&PAD_INPUT_M;break;
}
return (f>0? true:false);
}
bool Padinput::check_stick(int in , int num)//!<スティック監視関数@テンキー配置
{
int f=0;
switch(num)
{
case 0: f=(in&PAD_INPUT_UP || in&PAD_INPUT_DOWN || in&PAD_INPUT_LEFT || in&PAD_INPUT_RIGHT);break;//何かの入力あり
case 1: f=(in&PAD_INPUT_DOWN)*(in&PAD_INPUT_LEFT);break;
case 2: f=in&PAD_INPUT_DOWN;break;
case 3: f=(in&PAD_INPUT_DOWN)*(in&PAD_INPUT_RIGHT);break;
case 4: f=in&PAD_INPUT_LEFT;break;
case 5: f=!(in&PAD_INPUT_UP || in&PAD_INPUT_DOWN || in&PAD_INPUT_LEFT || in&PAD_INPUT_RIGHT);break;//ニュートラル判定
case 6: f=in&PAD_INPUT_RIGHT;break;
case 7: f=(in&PAD_INPUT_UP)*(in&PAD_INPUT_LEFT);break;
case 8: f=in&PAD_INPUT_UP;break;
case 9: f=(in&PAD_INPUT_UP)*(in&PAD_INPUT_RIGHT);break;
}
return (f>0? true:false);
}
void Padinput::input_Process()//!<周期入力監視関数
{
int Old ;
// ひとつ前のフレームの入力を変数にとっておく
for(int i=0;i<5;i++)
{
for(int s= 60-1-1;s>0;s--)
{
this->Input_histerisis[i][s] = this->Input_histerisis[i][s-1] ;
}
//
Old = NowInput[i] ;
// 現在の入力状態を取得
NowInput[i] = GetJoypadInputState( this->PadKnd[i]/*DX_INPUT_KEY_PAD1*/ ) ;
// 今のフレームで新たに押されたボタンのビットだけ立っている値を Edgepnput に代入する
EdgeInput[i] = NowInput[i] & ~Old ;
//
this->Input_histerisis[i][0] = NowInput[i];
}
Old = M_NowInput;
// マウスの位置を取得
GetMousePoint( &MouseX , &MouseY ) ;
M_NowInput = GetMouseInput() ;
M_EdgeInput = M_NowInput & ~Old ;
// 前回 GetMouseWheelRotVol が呼ばれてから今回までの回転量を足す
M_EdgeRot = GetMouseWheelRotVol() ;
M_NowRot += M_EdgeRot;
}
void Padinput::input_config()//!<キーボード割り当て
{
/*this->PadKnd[0] = DX_INPUT_KEY_PAD1;
this->PadKnd[1] = DX_INPUT_PAD1 | DX_INPUT_KEY;//PAD1&キーボード@[0]と同じかも?
this->PadKnd[2] = DX_INPUT_PAD2 | DX_INPUT_KEY;
this->PadKnd[3] = DX_INPUT_PAD3;
this->PadKnd[4] = DX_INPUT_PAD4;*/
//// パッド1の十字ボタンの対応を変更
SetJoypadInputToKeyInput( DX_INPUT_PAD1, PAD_INPUT_UP, KEY_INPUT_UP, -1, -1, -1 );
SetJoypadInputToKeyInput( DX_INPUT_PAD1, PAD_INPUT_DOWN, KEY_INPUT_DOWN, -1, -1, -1 );
SetJoypadInputToKeyInput( DX_INPUT_PAD1, PAD_INPUT_LEFT, KEY_INPUT_LEFT, -1, -1, -1 );
SetJoypadInputToKeyInput( DX_INPUT_PAD1, PAD_INPUT_RIGHT, KEY_INPUT_RIGHT, -1, -1, -1 );
SetJoypadInputToKeyInput( DX_INPUT_PAD1, PAD_INPUT_A, KEY_INPUT_Z, -1, -1, -1 );
SetJoypadInputToKeyInput( DX_INPUT_PAD1, PAD_INPUT_B, KEY_INPUT_X, -1, -1, -1 );
SetJoypadInputToKeyInput( DX_INPUT_PAD1, PAD_INPUT_C, KEY_INPUT_C, -1, -1, -1 );
SetJoypadInputToKeyInput( DX_INPUT_PAD1, PAD_INPUT_X, KEY_INPUT_A, -1, -1, -1 );
SetJoypadInputToKeyInput( DX_INPUT_PAD1, PAD_INPUT_Y, KEY_INPUT_S, -1, -1, -1 );
SetJoypadInputToKeyInput( DX_INPUT_PAD1, PAD_INPUT_Z, KEY_INPUT_D, -1, -1, -1 );
SetJoypadInputToKeyInput( DX_INPUT_PAD1, PAD_INPUT_L, KEY_INPUT_Q, -1, -1, -1 );
SetJoypadInputToKeyInput( DX_INPUT_PAD1, PAD_INPUT_R, KEY_INPUT_W, -1, -1, -1 );
//
SetJoypadInputToKeyInput( DX_INPUT_PAD2, PAD_INPUT_UP, KEY_INPUT_P, -1, -1, -1 );
SetJoypadInputToKeyInput( DX_INPUT_PAD2, PAD_INPUT_DOWN, KEY_INPUT_SEMICOLON, -1, -1, -1 );
SetJoypadInputToKeyInput( DX_INPUT_PAD2, PAD_INPUT_LEFT, KEY_INPUT_L, -1, -1, -1 );
SetJoypadInputToKeyInput( DX_INPUT_PAD2, PAD_INPUT_RIGHT, KEY_INPUT_COLON, -1, -1, -1 );
SetJoypadInputToKeyInput( DX_INPUT_PAD2, PAD_INPUT_A, KEY_INPUT_B, -1, -1, -1 );
SetJoypadInputToKeyInput( DX_INPUT_PAD2, PAD_INPUT_B, KEY_INPUT_N, -1, -1, -1 );
SetJoypadInputToKeyInput( DX_INPUT_PAD2, PAD_INPUT_C, KEY_INPUT_M, -1, -1, -1 );
SetJoypadInputToKeyInput( DX_INPUT_PAD2, PAD_INPUT_X, KEY_INPUT_H, -1, -1, -1 );
SetJoypadInputToKeyInput( DX_INPUT_PAD2, PAD_INPUT_Y, KEY_INPUT_J, -1, -1, -1 );//st
SetJoypadInputToKeyInput( DX_INPUT_PAD2, PAD_INPUT_Z, KEY_INPUT_K, -1, -1, -1 );//st
SetJoypadInputToKeyInput( DX_INPUT_PAD2, PAD_INPUT_L, KEY_INPUT_U, -1, -1, -1 );//st
SetJoypadInputToKeyInput( DX_INPUT_PAD2, PAD_INPUT_R, KEY_INPUT_I, -1, -1, -1 );//st
}
bool Padinput::now_button(int id,int button_num)//!<現在のボタン入力取得
{
return this->check_button(this->NowInput[id] , button_num);
}
bool Padinput::edge_button(int id,int button_num)//!<現在入力されたボタン取得
{
return this->check_button(this->EdgeInput[id] , button_num);
}
bool Padinput::now_stick(int id,int stick_num)//!<現在のスティック取得
{
return this->check_stick(this->NowInput[id] , stick_num);
}
bool Padinput::edge_stick(int id,int stick_num)//!<現在入力されれたスティック取得
{
return this->check_stick(this->EdgeInput[id] , stick_num);
}
int Padinput::get_NowInput(int num)
{
return this->NowInput[num];
}