A
download Input.cpp
Language: C++
LOC: 90
Project Info
TableHockey3D(tablehockey)
Server: SourceForge
Type: cvs
...ey\CVSROOT\tablehockey\src\
   Application.cpp
   Application.h
   Camera.cpp
   Camera.h
   Cube.cpp
   Cube.h
   Data.cpp
   Data.h
   Disk.cpp
   Disk.h
   FloatingText.cpp
   FloatingText.h
   Floor.cpp
   Floor.h
   Input.cpp
   Input.h
   Light.cpp
   Light.h
   log.cpp
   log.h
   main.cpp
   mmgr.cpp
   mmgr.h
   Model.cpp
   Model.h
   nommgr.h
   Puck.cpp
   Puck.h
   Pyramid.cpp
   Pyramid.h
   scene.cpp
   scene.h
   SmartPtr.h
   Sound.cpp
   Sound.h
   TableHockey.dsp
   TableHockey.dsw
   TestScene.cpp
   TestScene.h
   text.cpp
   text.h
   TextHelp.cpp
   TextHelp.h
   texture.cpp
   texture.h
   TexturedCube.cpp
   TexturedCube.h
   timer.cpp
   timer.h
   View.cpp
   View.h

// 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);
}

About Koders | Resources | Downloads | Support | Black Duck | Terms of Service | DMCA | Privacy Policy | Contact Us