www.pudn.com > 3DRPG.rar > Input.cpp
#include "stdafx.h"
#include "Input.h"
CInput::CInput(HINSTANCE hInstance,HWND hwnd,int nIcon)
{
NIcon=nIcon;
mygod=new bool [NIcon];
motherfuck=new bool[NIcon];
for(int i=0;i<3;i++)
{
mygod[i]=false;
motherfuck[i]=false;
}
control=true;
m_hInst=hInstance;
m_hWnd=hwnd;
if(DI_OK!=DirectInput8Create(m_hInst,DIRECTINPUT_VERSION,IID_IDirectInput8,(LPVOID*)&m_pInput,NULL))
{
return ;
}
if(DI_OK!=m_pInput->CreateDevice(GUID_SysKeyboard,&m_pInputDevice,NULL))
{
return ;
}
if(DI_OK!=m_pInputDevice->SetDataFormat(&c_dfDIKeyboard))
{
return ;
}
m_pInputDevice->SetCooperativeLevel(m_hWnd,DISCL_NONEXCLUSIVE|DISCL_FOREGROUND);
m_pInputDevice->Acquire();
memset(&m_cKeyboardState,0,sizeof(m_cKeyboardState));
memset(&m_cKeyboardStateOld,0,sizeof(m_cKeyboardStateOld));
if(DI_OK!=m_pInput->CreateDevice(GUID_SysMouse,&m_pMouseInput,NULL))
{
return ;
}
if(DI_OK!=m_pMouseInput->SetDataFormat(&c_dfDIMouse))
{
return ;
}
m_pMouseInput->SetCooperativeLevel(m_hWnd,DISCL_NONEXCLUSIVE|DISCL_FOREGROUND);
m_pMouseInput->Acquire();
memset(&m_MouseState,0,sizeof(m_MouseState));
memset(&m_MouseStateOld,0,sizeof(m_MouseStateOld));
m_Up=0;
m_PreUp=0;
run=true;
}
CInput::~CInput()
{ m_pMouseInput->Unacquire();
m_pMouseInput->Release();
m_pInputDevice->Unacquire();
m_pInputDevice->Release();
m_pInput->Release();
}
LRESULT CInput::GetKeyState(DWORD Keycode)
{
if(Keycode>4;
}
}
LRESULT CInput::Update()
{
memcpy(m_cKeyboardStateOld,m_cKeyboardState,sizeof(m_cKeyboardState));
if(DI_OK!=m_pInputDevice->GetDeviceState(sizeof(m_cKeyboardState),m_cKeyboardState))
{
memset(&m_cKeyboardState,0,sizeof(m_cKeyboardState));
m_pInputDevice->Acquire();
}
memcpy(&m_MouseStateOld,&m_MouseState,sizeof(m_MouseState));
if(DI_OK!=m_pMouseInput->GetDeviceState(sizeof(m_MouseState),&m_MouseState))
{
memset(&m_MouseState,0,sizeof(m_MouseState));
m_pMouseInput->Acquire();
}
return DI_OK;
}
void CInput::Control(bool * flag,D3DXVECTOR3 * p1,float * up,bool *shoot,
POSS * NumOfPos,bool * CallPress,bool * ButtonPress,
bool * Result,POSITION * ViewPos,COLLIPE * col,
CTerrain * m_pTerrain,NPOSITION * BossPos,bool * nomoney)
{
static bool CrossBridge=false;
static DWORD time=timeGetTime()/1000;
DWORD timeNow=timeGetTime()/1000;
//bool LPress;
float jiaoduX=-m_MouseState.lX/5;
float jiaoduY=m_MouseState.lY/5;
float suofang=-m_MouseState.lZ/5;
ViewPos->cc+=suofang;
if(0x80&m_cKeyboardState[DIK_Q])
{
ViewPos->cc+=5;
}
if(0x80&m_cKeyboardState[DIK_E])
{
ViewPos->cc-=5;
}
if(ViewPos->cc>=300)
ViewPos->cc=300;
if(ViewPos->cc<=50)
ViewPos->cc=50;
if(0x80&m_cKeyboardState[DIK_UP])
{
ViewPos->cc+=5;
}
if(0x80&m_cKeyboardState[DIK_DOWN])
{
ViewPos->cc-=5;
}
if((0x80&m_MouseState.rgbButtons[0])|(0x80&m_MouseState.rgbButtons[1]))
{
if((0x80&m_MouseState.rgbButtons[1]))
{
ViewPos->a+=jiaoduX;
}
ViewPos->ca+=jiaoduX;
if(*flag==false)
{
if(ViewPos->cb>90)
ViewPos->cb=90;
if(ViewPos->cb<-90)
ViewPos->cb=-90;
ViewPos->cb+=jiaoduY;
m_Up=0;
m_PreUp=0;
}
else
{
m_PreUp=m_Up;
m_Up+=jiaoduY;
if(m_Up<=0)
{*p1=D3DXVECTOR3(ViewPos->cc*cos(D3DX_PI/180*jiaoduY)*cos(D3DX_PI/180*ViewPos->ca),ViewPos->cc*sin(D3DX_PI/180*jiaoduY),ViewPos->cc*cos(D3DX_PI/180*jiaoduY)*sin(D3DX_PI/180*ViewPos->ca));
*up=m_Up;
}
else
{
*flag=false;
if(ViewPos->cb>90)
ViewPos->cb=90;
if(ViewPos->cb<-90)
ViewPos->cb=-90;
ViewPos->cb+=jiaoduY;
m_Up=0;
*up=m_Up;
}
}
}
if(0x80&m_cKeyboardState[DIK_W])
{
ViewPos->z+=5*sin((D3DX_PI/180)*ViewPos->a);
ViewPos->x+=5*cos((D3DX_PI/180)*ViewPos->a);
}
if(0x80&m_cKeyboardState[DIK_S])
{
ViewPos->z+=5*sin((D3DX_PI/180)*(ViewPos->a+180));
ViewPos->x+=5*cos((D3DX_PI/180)*(ViewPos->a+180));
}
if(0x80&m_cKeyboardState[DIK_A])
{
if(0x80&m_MouseState.rgbButtons[1])
{
ViewPos->z+=5*sin((D3DX_PI/180)*(ViewPos->a+90));
ViewPos->x+=5*cos((D3DX_PI/180)*(ViewPos->a+90));
}
else
{
ViewPos->a+=1.5;
}
}
if(0x80&m_cKeyboardState[DIK_D])
{ if(0x80&m_MouseState.rgbButtons[1])
{
ViewPos->z+=5*sin((D3DX_PI/180)*(ViewPos->a-90));
ViewPos->x+=5*cos((D3DX_PI/180)*(ViewPos->a-90));
}
else
{
ViewPos->a-=1.5;
}
}
if(CrossBridge==false)
{
ViewPos->y=m_pTerrain->GetHeight(ViewPos->x,ViewPos->z);
}
/*if(0x80&m_MouseState.rgbButtons[1])
{
ViewPos->a+=jiaoduX;
ViewPos->ca+=jiaoduX;
if(ViewPos->cb>90)
ViewPos->cb=90;
if(ViewPos->cb<-90)
ViewPos->cb=-90;
ViewPos->cb+=jiaoduY;
}*/
float x,y;
POINT m_Point;
GetCursorPos(&m_Point);
//x=(float)m_Point.x-5;
//y=(600)-(float)m_Point.y;
ScreenToClient(m_hWnd,&m_Point);
x=(float)m_Point.x+3;
y=(600-17)-(float)m_Point.y;
if(0x80&m_MouseState.rgbButtons[0]|(0x80&m_MouseState.rgbButtons[1]))
{
if(((y>=0.0f&y<=100.0f)&(x>0.0f&x<320.0f))|((y>=0.0f&y<=100.0f)&(x>500.0f&x<800.0f)))
{
*nomoney=true;
}
else
{
*nomoney=false;
}
}
else
{
*nomoney=false;
}
if(0x80&m_MouseState.rgbButtons[0])
{
for(int i=0;i=NumOfPos[i].ltx)&(x<=NumOfPos[i].rbx))&((y>=NumOfPos[i].rby)&(y<=NumOfPos[i].lty)))
{
ButtonPress[i]=true;mygod[i]=true;
}
else
{
ButtonPress[i]=false;mygod[i]=false;motherfuck[i]=false;Result[i]=false;
}
}
}
}
else
{
for(int i=0;i=NumOfPos[i].ltx)&(x<=NumOfPos[i].rbx))&((y>=NumOfPos[i].rby)&(y<=NumOfPos[i].lty)))
{
ButtonPress[i]=false;
if(motherfuck[i]==true)
{
Result[i]=true;
mygod[i]=false;
motherfuck[i]=false;
}
if(mygod[i]==true)
{
motherfuck[i]=true;
}
}
else
{
ButtonPress[i]=false;mygod[i]=false;motherfuck[i]=false;Result[i]=false;
}
}
}
}
if(run==false)
{ CallPress[0]=!CallPress[0];ButtonPress[0]=false;mygod[0]=false;motherfuck[0]=false;Result[0]=false;
CallPress[1]=!CallPress[1];ButtonPress[1]=false;mygod[1]=false;motherfuck[1]=false;Result[1]=false;
CallPress[2]=!CallPress[2];ButtonPress[2]=false;mygod[2]=false;motherfuck[2]=false;Result[2]=false;
run=true;
}
if(Result[2]==true)
{
CallPress[0]=false;ButtonPress[0]=false;mygod[0]=false;motherfuck[0]=false;
CallPress[1]=false;ButtonPress[1]=false;mygod[1]=false;motherfuck[1]=false;
CallPress[2]=false;ButtonPress[2]=false;mygod[2]=false;motherfuck[2]=false;
}
static bool ohgod=false;
if((0x80&m_MouseState.rgbButtons[1])==false)
{
if(ohgod==true)
{
if(timeNow-time<=0.5)
{
*shoot=true;
}
else
{
*shoot=false;
}
ohgod=false;
}
else
{
*shoot=false;
}
time=timeNow;
}
else
{
ohgod=true;
}
static POSITION PPreViewPos=*ViewPos;
for(int i=0;i<44;i++)
{
D3DXVECTOR3 RolePoint=D3DXVECTOR3(ViewPos->x,0.0f,ViewPos->z);
D3DXVECTOR3 dest=D3DXVECTOR3(col[i].x,0.0f,col[i].z);
float distance=D3DXVec3Length(&(dest-RolePoint));
if(distance<=col[i].dis)
{
*ViewPos=PPreViewPos;
break;
}
}
D3DXVECTOR3 Role=D3DXVECTOR3(ViewPos->x,0.0f,ViewPos->z);
D3DXVECTOR3 ddd=D3DXVECTOR3(BossPos->x,0.0f,BossPos->z);
float juli=D3DXVec3Length(&(Role-ddd));
if(juli<=30)
{
ViewPos->x=PPreViewPos.x;
ViewPos->z=PPreViewPos.z;
}
if((ViewPos->x<180)|(ViewPos->z<180)|(ViewPos->x>(128*28))|(ViewPos->z>(128*28)))
{
*ViewPos=PPreViewPos;
}
D3DXVECTOR3 RolePos=D3DXVECTOR3(ViewPos->x,0.0f,ViewPos->z);
D3DXVECTOR3 des=D3DXVECTOR3(780.0f,0.0f,3000.0f);
float dis=D3DXVec3Length(&(RolePos-des));
D3DXVECTOR3 Dir2;
D3DXVECTOR3 Dir1;
D3DXVECTOR3 Dir3;
D3DXVec3Normalize(&Dir1,&(RolePos-des));
D3DXVec3Normalize(&Dir2,&D3DXVECTOR3(0.0f,0.0f,-1.0f));
D3DXVec3Normalize(&Dir3,&D3DXVECTOR3(0.0f,0.0f,1.0f));
float angle=acosf(D3DXVec3Dot(&Dir1,&Dir2));
angle=abs(angle-(D3DX_PI/180*100));
if(angle>=D3DX_PI/2)
{
angle=abs(angle-D3DX_PI);
}
float ass=100/sin(angle);
float angle_2=acosf(D3DXVec3Dot(&Dir1,&Dir3));
angle_2=abs(angle_2-(D3DX_PI/180*100));
if(angle_2>=D3DX_PI/2)
{
angle_2=abs(angle_2-D3DX_PI);
}
float ass_2=100/sin(angle_2);
float ass_3;
if(ViewPos->x>780)
{
ass_3=ass_2;
}
else
{
ass_3=ass;
}
if(dis<420)
{
if(ViewPos->y>=215)
{
ViewPos->y=220;
CrossBridge=true;
if(dis>ass_3)
{
*ViewPos=PPreViewPos;
}
}
else
{
if((ViewPos->y<76))
{
CrossBridge=false;
}
else
{
if(dis