Sign in to follow this  
jozsef.horvath

Input handling system

Recommended Posts

Greetings,

I know there has been qute a few topics like this but none of them turned out to be useful for my case. I'm in the middle of the development of my simple engine but I'm struggling with creating a fast reliable input manager. To illustrate my case let me show you my choose of design.

Main Entry -> Instantiates a SystemClass that encapsulates the following factories:[list]
[*]InputManager
[*]GraphicsManager - Handles Direct3D related code.
[list]
[*]CameraManager
[*]TextureManager
[*]EffectManader
[*]LightManager
[*]MeshManager
[/list][*]TimerManager
[*]Demo Projects - Derives from DirectXManager
[/list]
To handle user input I'm using the WINAPI Message handler like:
[source lang="cpp"]LRESULT CALLBACK SystemClass::MsgHandler(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch (uMsg)
{
case WM_KEYDOWN:
case WM_KEYUP:

case WM_LBUTTONDOWN:
case WM_MBUTTONDOWN:
case WM_RBUTTONDOWN:

case WM_LBUTTONUP:
case WM_MBUTTONUP:
case WM_RBUTTONUP:

case WM_MOUSEMOVE:
m_GraphicsHandler->OnMouseMove(wParam, GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam));
break;
}[/source]
You can see the basic idea. The GraphicsHandler has the necessary functions which handles the user Events. My last attempt was something like this:

[source lang="cpp"]class InputFactory
{
static InputFactory* Instance;
InputFactory(void);
public:
static InputFactory* GetInstance(void);
IHandler* CreateHandler(HandlerType hType = HandlerType::MouseHandler);

~InputFactory(void)
};

class IHandler
{
friend class InputFactory;
protected:
struct Event
{
private:
EventType eType;
void (*Handler)(MappedKey mKey, State* hState);
};
private:
std::queue<Event> Interactions;
public:
void RegisterEvent(EventType eType = EventType::MouseEvent, ...);
void ProcessEvent(void);
};[/source]
I think you get the main idea. My problem with this approach is that it's way too complex and hard to add new features. Not to mention that to modify the keybindings it's a nightmare. I found an article about inputmanager here on gamedev.net but I can't apply it to my case. Edited by Wrath87

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this