D:/simple_rts/src/GameListener.cpp

Go to the documentation of this file.
00001 #include "GameListener.h"
00002 
00003 #include "Timer.h"
00004 
00005 #include "OgreRenderWindow.h"
00006 #include "OgrePlatformManager.h"
00007 
00008 using Ogre::RenderWindow;
00009 using Ogre::PlatformManager;
00010 
00011 
00012 template<> ASR::GameListener* Singleton<ASR::GameListener>::ms_Singleton = 0;
00013 
00014 namespace ASR
00015 {
00016         // ----------------------------------------------------------------------------
00017         GameListener::GameListener ( RenderWindow* win )
00018                 : mInputDevice ( NULL ),
00019                   mWindow ( win )
00020         {
00021                 mUpdaterList.clear ();
00022 
00023                 mTimer = new Timer ();
00024 
00025                 mInputDevice = PlatformManager::getSingleton().createInputReader ();
00026                 mInputDevice->initialise ( win, true, true );
00027         }
00028 
00029 
00030         // ----------------------------------------------------------------------------
00031         GameListener::~GameListener(void)
00032         {
00033                 PlatformManager::getSingleton().destroyInputReader( mInputDevice );
00034 
00035                 delete mTimer;
00036         }
00037 
00038 
00039         // ----------------------------------------------------------------------------
00040         void GameListener::addUpdater ( Updater* updateListener )
00041         {
00042                 mUpdaterList.insert ( updateListener );
00043         }
00044 
00045 
00046         // ----------------------------------------------------------------------------
00047         void GameListener::removeUpdater( Updater* updateListener )
00048         {
00049                 // Delayed removal (idea from Ogre::Root::removeFrameListener)
00050                 mUpdatersToRemove.insert ( updateListener );
00051         }
00052 
00053 
00054         // ----------------------------------------------------------------------------
00055         bool GameListener::frameStarted ( const FrameEvent& e )
00056         {
00057                 if ( mWindow->isClosed () )
00058                         return false;
00059 
00060                 mInputDevice->capture ();
00061                 mTimer->setTimeSinceLastFrame ( e.timeSinceLastFrame );
00062 
00063 
00064                 // Remove all the updaters scheduled for removal
00065                 UpdaterList::iterator it;
00066                 for ( it = mUpdatersToRemove.begin(); it != mUpdatersToRemove.end(); it++ )
00067                 {
00068                         mUpdaterList.erase ( *it );
00069                 }
00070                 mUpdatersToRemove.clear ();
00071 
00072                 // Fire off the updaters
00073                 for ( it = mUpdaterList.begin(); it != mUpdaterList.end(); it++ )
00074                 {
00075                         if ( !(*it)->updateBeforeFrame( e, mInputDevice ) )
00076                                 return false;
00077                 }
00078 
00079                 return true;
00080         }
00081 
00082 
00083         // ----------------------------------------------------------------------------
00084         bool GameListener::frameEnded ( const FrameEvent& e )
00085         {
00086                 mTimer->setTimeSinceLastFrame ( e.timeSinceLastFrame );
00087 
00088                 // Fire off the updaters
00089                 UpdaterList::iterator it;
00090                 for ( it = mUpdaterList.begin(); it != mUpdaterList.end(); it++ )
00091                 {
00092                         if ( !(*it)->updateAfterFrame( e, mInputDevice ) )
00093                                 return false;
00094                 }
00095 
00096                 return true;
00097         }
00098 }

Generated on Sun Jun 25 19:23:43 2006 for Valors End by  doxygen 1.4.7