Files
Client/GameTools/ZALLA3D BASECLASS/DeviceInput.cpp
LGram16 dd97ddec92 Restructure repository to include all source folders
Move git root from Client/ to src/ to track all source code:
- Client: Game client source (moved to Client/Client/)
- Server: Game server source
- GameTools: Development tools
- CryptoSource: Encryption utilities
- database: Database scripts
- Script: Game scripts
- rylCoder_16.02.2008_src: Legacy coder tools
- GMFont, Game: Additional resources

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-29 20:17:20 +09:00

246 lines
5.8 KiB
C++

// DeviceInput.cpp: implementation of the CDeviceInput class.
//
//////////////////////////////////////////////////////////////////////
#include "DeviceInput.h"
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
LPDIRECTINPUT8 CDeviceInput::m_pDI;
LPDIRECTINPUTDEVICE8 CDeviceInput::m_pMouse;
LPDIRECTINPUTDEVICE8 CDeviceInput::m_pKeyboard;
bool CDeviceInput::m_MouseButton[3];
POINT CDeviceInput::m_MousePos;
bool CDeviceInput::m_isMouseMove;
POINT CDeviceInput::m_MouseMovePos;
bool CDeviceInput::m_isLeftMouseClick;
bool CDeviceInput::m_isRightMouseClick;
bool CDeviceInput::m_isLeftMouseDown;
bool CDeviceInput::m_isRightMouseDown;
bool CDeviceInput::m_isLeftMousePress;
bool CDeviceInput::m_isRightMousePress;
bool CDeviceInput::m_isRightMouseUp;
bool CDeviceInput::m_isMidMousePress;
float CDeviceInput::m_MouseSpeed;
int CDeviceInput::m_MouseZPos;
RECT CDeviceInput::m_rcMouseMove;
char CDeviceInput::m_aryKeyState[256];
char CDeviceInput::m_aryKeyOldState[256];
CDeviceInput::CDeviceInput()
{
m_pDI=NULL;
m_pMouse=NULL;
m_pKeyboard = NULL;
m_MouseButton[0]=false;
m_MouseButton[1]=false;
m_MouseButton[2]=false;
m_MousePos.x=0;
m_MousePos.y=0;
m_MouseZPos=0;
m_MouseMovePos.x=0;
m_MouseMovePos.y=0;
m_isLeftMouseClick=m_isRightMouseClick=false;
m_isLeftMouseDown=m_isRightMouseDown=false;
m_isLeftMousePress=m_isRightMousePress=false;
m_isRightMouseUp=false;
m_isMouseMove=false;
m_MouseSpeed=2.0f;
SetRect(&m_rcMouseMove,0,0,800-16,600-16);
memset(m_aryKeyState, 0, 256);
memset(m_aryKeyOldState, 0, 256);
}
CDeviceInput::~CDeviceInput()
{
if(m_pKeyboard)
m_pKeyboard->Release();
if(m_pMouse)
m_pMouse->Release();
if(m_pDI)
m_pDI->Release();
}
void CDeviceInput::Create(HWND hWnd)
{
HRESULT hr;
if( FAILED(DirectInput8Create( GetModuleHandle(NULL), DIRECTINPUT_VERSION,
IID_IDirectInput8, (VOID**)&m_pDI, NULL ) ) )
{
}
// Obtain an interface to the system keyboard device.
if( FAILED(m_pDI->CreateDevice( GUID_SysKeyboard, &m_pKeyboard, NULL ) ) )
{
}
if( FAILED( hr = m_pKeyboard->SetDataFormat( &c_dfDIKeyboard ) ) )
{
}
if(FAILED(m_pKeyboard->SetCooperativeLevel( hWnd, DISCL_NONEXCLUSIVE | DISCL_FOREGROUND )))
{
}
m_pKeyboard->Acquire();
// Obtain an interface to the system mouse device.
if( FAILED(m_pDI->CreateDevice( GUID_SysMouse, &m_pMouse, NULL ) ) )
{
}
if( FAILED( hr = m_pMouse->SetDataFormat( &c_dfDIMouse2 ) ) )
{
}
m_pMouse->SetCooperativeLevel(hWnd, DISCL_EXCLUSIVE | DISCL_FOREGROUND);
m_pMouse->Acquire();
/*
if(FAILED(DirectInputCreate( (HINSTANCE)GetWindowLong( hWnd, GWL_HINSTANCE ),
DIRECTINPUT_VERSION, &m_pDI, NULL )))
{
throw CDeviceInputError("CDeviceInput:Create , Create DirectInput Error");
}
if(FAILED(m_pDI->CreateDevice( GUID_SysKeyboard, &m_pKeyboard, NULL )))
{
throw CDeviceInputError("CDeviceInput:Create , cannot Get a KeyboardDevice");
}
if(FAILED(m_pKeyboard->SetDataFormat( &c_dfDIKeyboard )))
{
throw CDeviceInputError("CDeviceInput:Create , Setting DataFormat failed");
}
if(FAILED(m_pKeyboard->SetCooperativeLevel( hWnd,DISCL_EXCLUSIVE | DISCL_FOREGROUND )))
{
throw CDeviceInputError("CDeviceInput:Create ,SetCooperativeLevel is failed");
}
*/
}
void CDeviceInput::Acquire()
{
if(m_pKeyboard)
m_pKeyboard->Acquire();
if(m_pMouse)
m_pMouse->Acquire();
}
void CDeviceInput::UnAcquire()
{
}
void CDeviceInput::UpdateInput()
{
HRESULT hr;
memcpy(m_aryKeyOldState, m_aryKeyState, 256);
hr = m_pKeyboard->GetDeviceState(256, (void *)&m_aryKeyState);
if(FAILED(hr))
{
memcpy(m_aryKeyState, m_aryKeyOldState, 256);
return;
}
DIMOUSESTATE2 dims2; // DirectInput mouse state structure
ZeroMemory( &dims2, sizeof(dims2) );
hr = m_pMouse->GetDeviceState( sizeof(DIMOUSESTATE2), &dims2 );
if( FAILED(hr) )
{
m_MouseMovePos.x=0;
m_MouseMovePos.y=0;
m_MouseZPos=0;
m_MouseButton[0]=false;
m_MouseButton[1]=false;
m_MouseButton[2]=false;
return;
}
m_MouseMovePos.x=dims2.lX;
m_MouseMovePos.y=dims2.lY;
m_MouseZPos=dims2.lZ;
bool oldMouseButton[3];
oldMouseButton[0]=m_MouseButton[0];
oldMouseButton[1]=m_MouseButton[1];
oldMouseButton[2]=m_MouseButton[2];
m_MouseButton[0]=(dims2.rgbButtons[0] & 0x80) ? true : false;
m_MouseButton[1]=(dims2.rgbButtons[1] & 0x80) ? true : false;
m_MouseButton[2]=(dims2.rgbButtons[2] & 0x80) ? true : false;
if(m_isMouseMove)
{
m_MousePos.x+=(int)(m_MouseMovePos.x*m_MouseSpeed);
m_MousePos.y+=(int)(m_MouseMovePos.y*m_MouseSpeed);
if(m_MousePos.x<=m_rcMouseMove.left)
m_MousePos.x=m_rcMouseMove.left;
if(m_MousePos.y<=m_rcMouseMove.top)
m_MousePos.y=m_rcMouseMove.top;
if(m_MousePos.x>=m_rcMouseMove.right)
m_MousePos.x=m_rcMouseMove.right;
if(m_MousePos.y>=m_rcMouseMove.bottom)
m_MousePos.y=m_rcMouseMove.bottom;
}
if(oldMouseButton[0]==true && m_MouseButton[0]==false)
m_isLeftMouseClick=true;
else
m_isLeftMouseClick=false;
if(oldMouseButton[1]==true && m_MouseButton[1]==false)
m_isRightMouseClick=true;
else
m_isRightMouseClick=false;
if(oldMouseButton[0]==false && m_MouseButton[0]==true)
m_isLeftMouseDown=true;
else
m_isLeftMouseDown=false;
if(oldMouseButton[1]==false && m_MouseButton[1]==true)
m_isRightMouseDown=true;
else
m_isRightMouseDown=false;
if(oldMouseButton[1]==true && m_MouseButton[1]==false)
m_isRightMouseUp=true;
else
m_isRightMouseUp=false;
if(m_MouseButton[0]==true)
m_isLeftMousePress=true;
else
m_isLeftMousePress=false;
if(m_MouseButton[1]==true)
m_isRightMousePress=true;
else
m_isRightMousePress=false;
if(m_MouseButton[2]==true)
m_isMidMousePress=true;
else
m_isMidMousePress=false;
}