// Input.cpp: implementation of the CInput class.
//
//////////////////////////////////////////////////////////////////////
#include "Input.h"
#include "application.h"
//#define INITGUID
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CInput::CInput()
{
mouse.x = 320;
mouse.y = 240;
}
CInput::~CInput()
{
// release DirectInput object
if (bDirectInput)
{
lpdikey->Unacquire();
lpdikey->Release();
lpdimouse->Unacquire();
lpdimouse->Release();
lpdi->Release();
}
OutputDebugString("CInput destructor\n");
}
void CInput::Update()
{
if (bDirectInput)
{
// get current state of keys
lpdikey->GetDeviceState(256, keys);
lpdimouse->GetDeviceState(sizeof(DIMOUSESTATE), &mouse_state);
mouse.x += mouse_state.lX;
mouse.y += mouse_state.lY;
mouse.wheel = mouse_state.lZ;
}
}
bool CInput::IsKeyDown(int key)
{
if (bDirectInput)
return ((keys[key] & 0x80) != 0);
// if we don't use DirectInput we must reset the state of the key
bool bReturn = (keys[key] != 0);
keys[key] = false;
return bReturn;
}
// This function will be called when the application gets a WM_KEYDOWN
// or WM_KEYUP message
void CInput::SetKey(int key, bool bDown)
{
//pLog->Log("Key %d was pressed", key);
keys[key] = bDown;
}
bool CInput::Init()
{
// reset the keys array
bDirectInput = false;
Reset();
pApp->pLog->Log("CInput::Init()");
#ifdef USE_DINPUT
if (DirectInputCreate(pApp->hInst, DIRECTINPUT_VERSION, &lpdi, NULL) != DI_OK)
{
pLog->Log("\tInitialization of DirectInput failed!");
bDirectInput = false;
// use alternative method to get input
}
else
{
bDirectInput = true;
pLog->Log("\tInit of DirectInput object successful");
if (lpdi->CreateDevice(GUID_SysKeyboard, &lpdikey, NULL) != DI_OK)
{
pLog->Log("\tDirectInput CreateDevice failed!");
lpdi->Release();
bDirectInput = false;
}
else
{
pLog->Log("\tCreateDevice for keyboard successful!");
lpdikey->SetCooperativeLevel(pView->hWnd,
DISCL_BACKGROUND | DISCL_NONEXCLUSIVE);
lpdikey->SetDataFormat(&c_dfDIKeyboard);
lpdikey->Acquire();
}
// setup the mouse
lpdi->CreateDevice(GUID_SysMouse, &lpdimouse, NULL);
lpdimouse->SetCooperativeLevel(pView->hWnd,
DISCL_BACKGROUND | DISCL_NONEXCLUSIVE);
lpdimouse->SetDataFormat(&c_dfDIMouse);
lpdimouse->Acquire();
pLog->Log("\tDirectInput Mouse successfully created");
pLog->Log("Finished");
}
#endif // USE_DINPUT
return true;
}
void CInput::Reset()
{
memset(keys, 0, sizeof(keys));
}
bool CInput::IsMouseButtonPressed(int iButton)
{
return ((mouse_state.rgbButtons[iButton] & 0x80) != 0);
}