//	Darkstar Engine  (c) UnderWorld Interactive Studio (all coding by Svarog    2007)
//
//      Данный файл является частью Darkstar Engine. Любое использование кода файла
//      без согласия компании, является нарушением закона об авторском праве (в слу-
//      чае если не оговорено обратное).
//
//      Имя файла: inputDriver.cpp
//      Краткое описание: драйвер системы ввода
//

#include <Darkstar/Input/inputDriver.hpp>
#include <Darkstar/Kernel/logh.hpp>

using namespace input;
using ker::Log;

InputDriver::InputDriver()
{
	di = NULL;
};

InputDriver::~InputDriver()
{
	std::vector<LPDIRECTINPUTDEVICE8>::iterator it;
	for(it = devices.begin(); it != devices.end(); ++it)
		if(*it)
		{
			if(FAILED((*it)->Release()))
				lwar << "Cannot release direct input device";
			*it = NULL;
		};		
	devices.clear();
	if(di)
	{
		di->Release();
		di = NULL;
	};
};

bool InputDriver::init()
{
	if(FAILED(DirectInput8Create(GetModuleHandle(NULL), DIRECTINPUT_VERSION, IID_IDirectInput8, 
		(void**)&di, NULL)))
	{
		lerr << "Cannot create direct input main device";
		return false;
	};
	return true;
};

LPDIRECTINPUT8 InputDriver::getDevice() const
{
	return di;
};

LPDIRECTINPUTDEVICE8 InputDriver::createDevice(REFGUID guid)
{
	LPDIRECTINPUTDEVICE8 new_device;
	if(FAILED(di->CreateDevice(guid, &new_device, NULL)))
	{
		lerr << "Cannot create new device. May be invalid GUID";
		return NULL;
	};
	devices.push_back(new_device);
	return new_device;
};
