
#ifndef SPECTRE_INPUT_MODULE_H
#define SPECTRE_INPUT_MODULE_H

#include <deque>
#include <vector>

namespace sp {

class Mouse;
class Keyboard;
class InputDevice;
class PlatformInput;

class InputModule
{
public :
	InputModule(PlatformInput *platform);

	virtual ~InputModule();

	Mouse* getMouse();

	Keyboard* getKeyboard();

	void addInputDevice(InputDevice *device);

	// NOTE: Update devices here! (for winapi, process keyboard/mouse messages)
	void update();

protected :

	void dispatch();

	typedef std::vector<InputDevice*> InputDeviceVec;
	InputDeviceVec m_devices;

	Mouse *m_mouse;

	Keyboard *m_keyboard;

	PlatformInput *m_platform;
};

} // namespace sp

#endif /* SPECTRE_INPUT_MODULE_H */
