A question of function design?
Mike Parker via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Fri Oct 28 07:12:53 PDT 2016
On Friday, 28 October 2016 at 13:19:19 UTC, WhatMeWorry wrote:
>
> Anyone have a good example of what I should be doing?
I generally use GLFW event callbacks to populate an event queue
with custom event types, then process the queue and handle events
elsewhere. That way, the callbacks need no nothing at all about
the game code.
```
void setCallbacks() {
glfwSetKeyCallback(&key_callback);
}
private:
MyEventQueue _eventq;
extern(C) void key_callback(GLFWwindow* window, int key, int
scancode, int action, int modifier) {
eventq.push(KeyEvent(window, key, scancode, action, modifier);
}
An alternative approach is to forego the event queue and just
have the callbacks process event listeners. The listeners could
be delegates, function pointers, or interfaces, whatever works
for your scenario, or some specific event handler class. They
might be stored in flat arrays, or aas keyed on the window or a
KeyEvent structure. Whatever works.
```
alias KeyHandler = bool delegate(GLFWwindow, int, int, int, int);
void registerKeyHandler(KeyHandler handler) { _keyHandlers ~=
handler; }
private:
KeyHandler[] _keyHandlers;
extern(C) void key_callback(GLFWwindow* window, int key, int
scancode, int action, int modifier) {
foreach(handler; _keyHandlers) {
if(_keyHandler(window, key, scancode, action, modifier))
break;
}
}
```
More information about the Digitalmars-d-learn
mailing list