#ifndef _OBAOGREFRAMELISTENER_H #define _OBAOGREFRAMELISTENER_H #include #include namespace OBA { class _OBAExport OgreFrameListener: public Ogre::FrameListener, public Ogre::KeyListener { protected: void updateStats(void); void keyClicked(Ogre::KeyEvent* e); void keyPressed(Ogre::KeyEvent* e); void keyReleased(Ogre::KeyEvent* e); public: // Constructor takes a RenderWindow because it uses that to determine input context OgreFrameListener(Ogre::RenderWindow *win, bool useBufferedInputKeys = false, bool useBufferedInputMouse = false); virtual ~OgreFrameListener(); void addFrameListenerMode(OgreFrameListenerMode *ogreFrameListenerMode); void removeFrameListenerMode(unsigned int iOgreFrameListenerMode); void setEnabledFrameListenerMode(unsigned int iOgreFrameListenerMode); OgreFrameListenerMode* getEnabledFrameListenerMode(); unsigned int getNumFrameListenerModes(); OgreFrameListenerMode* getFrameListenerMode(unsigned int iOgreFrameListenerMode); // Override frameStarted event to process that (don't care about frameEnded) bool frameStarted(const Ogre::FrameEvent& evt); bool frameEnded(const Ogre::FrameEvent& evt); bool processUnbufferedKeyInput(const Ogre::FrameEvent& evt); protected: Ogre::EventProcessor* mEventProcessor; Ogre::InputReader* mInputDevice; OgreFrameListenerMode *mDefaultOgreFrameListenerMode; std::vector mOgreFrameListenerModeList; bool mUseBufferedInputKeys, mUseBufferedInputMouse, mInputTypeSwitchingOn; Ogre::Real mTimeUntilNextToggle; Ogre::RenderWindow* mWindow; unsigned int mCurrentOgreFrameListenerMode; }; } #endif