Only the event receiver object that has been passed to the device is active. For example:
I have two event receivers:
Code: Select all
GUIEventReceiver my;
KeyEventReceiver e;
Now in this case I have two event receivers for different things, one is for my GUI and one is for my keys, I cannot have them both active at the same time as far as I know. So you switch between them.
Code: Select all
device->setEventReceiver(my);
if(condition)
device->setEventReceiver(e);
Or you could create a class that houses both these event receivers and switches between them aka:
Code: Select all
if(event.EventType==EET_KEY_INPUT_EVENT)
e->OnEvent(event);
else
my->OnEvent(event);
As far as I'm aware this is the way in which irrlicht runs. So now to answer your question directly, if your doing GUI elements that post their own events and receive events I would suggest some kind of containment within an event receiver, for these classes to communicate. So have a containment class and then a list or some other type of dynamic data structure that adds to an underlying event receiver, then when it receives an event it passes a message to that event receiver. I mean the ways in which you could do this are limitless, now if you are doing classes that post events say for instance a network interface that changes some irrlicht things you will probably need to integrate it with the irrlicht event receiver, if not, just write your own.
Tried to cover all bases, but you should be more specific with exactly what your trying to do in future I may have missed the target.

But the cage only had "Warning: Vicious Lions" on it! Im a programmer! I only listen to errors!