OGRE http://antsam.blogone.net AntsamCGD@hotmail.com OGRE OGRE listener listener target listener target Dispatcher Processor Input Reader Event class view Event Class view Input Event ctrlaltshift ascoll GUI Event EventTarget
EventTarget Class View Event Class View Key Target Position Target target MouseTargetMouseMotionTarget Listener class view Listener class view
listener InputEvent EventTarget* msource EventTarget EventListener Command Event Target Command Listener Receiver Input Event Invoker Input Event Queue
EventQueue std : :queue<inputevent*> meventqueue void pus h() InputEvent* pop() Target Target Manager Target Manager target Target ManagerOverlay Overlay Manager Target Manager 3D Target 3D Object Manager target visibility overlay 3D object triger Listener Target Input Event get Source Event Target get listener Input Reader InputReader EventQueue* meventqueue Cursor* mcurs or Dispatcher Processor EventDispatcher TargetManager* mtargetmanager; EventProcessor* meventprocessor PositionTarget* mfocus; PositionTarget* mmousepositiontarget PositionTarget* mkeycursoron PositionTarget* mtargetlastentered bool processkeyevent() bool processmouseevent() void retargetmouseevent() void setmousetarget() void trackmouseenterexit() bool dispatchevent()
EventProcessor EventQueue* meventqueue InputReader* minputdevice DispatcherList mdispatcherlist void startprocessingevents() void stopprocessingevents() void initialise() void processevent() void addcursormovelistener() void removecursormovelistener() void addtargetmanager() bool framestarted()
InputReader EventQueue* meventqueue Cursor* mcurs or void getmousestate() bool getmousebutton() void m ousemove d() void createmouseeven t() void tri ggermo usebutton() void createkeyevent() void ke ychanged()
Cursor Real mmousex, mmousey, mmousez Real mrelx, mrely, mrelz Real mxlowlimit, mxhighlimit, mylowlimit, Real myhighlimit, mzlowlimit, mzhighlimit
Example Frame ListenerGUI Frame Listener GUI Application ActionTarget* at = static_cast<borderbuttonguielement*>(guimanager::getsingleton().getguielement("ss/setup/hosts creen/join")); at->addactionlistener(this); at = static_cast<borderbuttonguielement*>(guimanager::getsingleton().getguielement("ss/setup/hosts creen/exit")); at->addactionlistener(this);.. ListChanger* list = static_cast<listguielement*>(guimanager::getsingleton().getguielement("ss/setup/hostscreen/ava ilablegameslist")); (GuiManager::getSingleton().getGuiElement("Core/CurrFps"))->addMouseListener(this); bool EventDispatcher::dispatchEvent(InputEvent* e). MouseEvent* me = static_cast<mouseevent*> (e); ret = processmouseevent(me);
.. KeyEvent* ke = static_cast<keyevent*> (e); ret = processkeyevent(ke); processmouseevent bool EventDispatcher::processMouseEvent(MouseEvent* e) mmousepositiontarget->processevent(e); targetover = mtargetmanager->getpositiontargetat(e->getx(), e->gety()); setmousetarget(targetover, e); void EventDispatcher::setMouseTarget(PositionTarget* target, MouseEvent* e) if (target!= mmousepositiontarget) mmousepositiontarget = target; void GuiElement::processEvent(InputEvent* e) if (!menabled e->isconsumed()) return; switch(e->getid()) case ActionEvent::AE_ACTION_PERFORMED:
processactionevent(static_cast<actionevent*>(e)); case MouseEvent::ME_MOUSE_PRESSED: case MouseEvent::ME_MOUSE_RELEASED: case MouseEvent::ME_MOUSE_CLICKED: case MouseEvent::ME_MOUSE_ENTERED: case MouseEvent::ME_MOUSE_EXITED: processmouseevent(static_cast<mouseevent*>(e)); case MouseEvent::ME_MOUSE_MOVED: case MouseEvent::ME_MOUSE_DRAGGED: processmousemotionevent(static_cast<mouseevent*>(e)); void ActionTarget::processActionEvent(ActionEvent* e) ActionListener* listener = mactionlistener; if (listener!= NULL) int id = e->getid(); switch(id) case ActionEvent::AE_ACTION_PERFORMED: listener->actionperformed(e); void MouseTarget::processMouseEvent(MouseEvent* e) MouseListener* listener = mmouselistener; if (listener!= NULL) int id = e->getid(); switch(id) case MouseEvent::ME_MOUSE_PRESSED: listener->mousepressed(e); case MouseEvent::ME_MOUSE_RELEASED: listener->mousereleased(e);
case MouseEvent::ME_MOUSE_CLICKED: listener->mouseclicked(e); case MouseEvent::ME_MOUSE_EXITED: mmousewithin = false; listener->mouseexited(e); case MouseEvent::ME_MOUSE_ENTERED: mmousewithin = true; listener->mouseentered(e); void MouseMotionTarget::processMouseMotionEvent(MouseEvent* e) MouseMotionListener* listener = mmousemotionlistener; if (listener!= NULL) int id = e->getid(); switch(id) case MouseEvent::ME_MOUSE_MOVED: listener->mousemoved(e); case MouseEvent::ME_MOUSE_DRAGGED: listener->mousedragged(e); void mouseclicked(mouseevent* e) void mouseentered(mouseevent* e) int i =5;
void mouseexited(mouseevent* e) void mousepressed(mouseevent* e) void mousereleased(mouseevent* e) void actionperformed(actionevent* e) // Think about doing something here std::string action = e->getactioncommand(); LogManager::getSingleton().logMessage("Got event: " + action); if (action == "SS/Setup/HostScreen/Exit") // Queue a shutdown static_cast<guiframelistener*>(mframelistener)->requestshutdown();