00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #ifndef _ENGINE_
00019 #define _ENGINE_
00020
00021 #include <map>
00022 #include <stack>
00023
00024 #include "input/InputListener.h"
00025
00026 #include "resource/ResourceCache.h"
00027
00028 #include "ui/ModalDialog.h"
00029
00030 #define IMAGE_RESOURCE_FILE "images.zip"
00031 #define SOUND_RESOURCE_FILE "sounds.zip"
00032 #define MUSIC_RESOURCE_FILE "music.zip"
00033 #define MODEL_RESOURCE_FILE "models.zip"
00034 #define MAP_RESOURCE_FILE "maps.zip"
00035 #define MISC_RESOURCE_FILE "misc.zip"
00036
00037 class AbstractAudioSystem;
00038 class AbstractPlatform;
00039 class AbstractRenderer;
00040 class BaseScreen;
00041 class Game;
00042 class ModalDialog;
00043
00058 class Engine
00059 {
00060 private:
00061 typedef std::map<std::string, BaseScreen*> BaseScreenMap;
00062 typedef std::list<AbstractMouseListener*> MouseListenerList;
00063 typedef std::list<AbstractKeyListener*> KeyListenerList;
00064 typedef MouseListenerList::const_iterator MouseListenerListIterator;
00065 typedef KeyListenerList::const_iterator KeyListenerListIterator;
00066 typedef std::list<MouseListenerListIterator> MouseListenerIteratorList;
00067 typedef std::list<KeyListenerListIterator> KeyListenerIteratorList;
00068
00069 AbstractPlatform* m_pPlatform;
00070 AbstractRenderer* m_pRenderer;
00071 AbstractAudioSystem* m_pAudio;
00072
00073 BaseScreen* m_pActiveScreen;
00074
00075 BaseScreenMap m_screens;
00076
00077 MouseListenerList m_mouseListeners;
00078 KeyListenerList m_keyListeners;
00079
00080 MouseListenerIteratorList m_mouseListenerBin;
00081 KeyListenerIteratorList m_keyListenerBin;
00082
00083 ResourceCache* m_pResourceCache;
00084 Game* m_pGame;
00085
00086 ModalDialogPtr m_pDialog;
00087 std::stack<ModalDialogPtr> m_dialogStack;
00088
00089 unsigned long m_nNextUpdateTime;
00090
00091 int m_nDelta;
00092 int m_nUpdateRate;
00093 int m_nFrameRate;
00094 int m_nMouseX;
00095 int m_nMouseY;
00096
00097 bool m_bShowFPS;
00098 bool m_bShowMouseCoordinates;
00099
00104 void CalculateFrameRate();
00105
00112 void EraseKeyAndMouseListeners();
00113 public:
00114
00116
00118
00132 Engine(AbstractPlatform* pPlatform, AbstractRenderer* pRenderer, AbstractAudioSystem* pAudio)
00133 :m_pPlatform(pPlatform), m_pRenderer(pRenderer), m_pAudio(pAudio), m_pResourceCache(0), m_pGame(0), m_nNextUpdateTime(0), m_nUpdateRate(0), m_nFrameRate(0)
00134 ,m_pActiveScreen(0), m_nDelta(0), m_bShowFPS(true), m_bShowMouseCoordinates(false), m_nMouseX(0), m_nMouseY(0)
00135 { }
00136
00140 ~Engine();
00141
00143
00145
00149 AbstractPlatform* GetPlatform() const { return m_pPlatform; }
00150
00154 AbstractRenderer* GetRenderer() const { return m_pRenderer; }
00155
00159 AbstractAudioSystem* GetAudio() const { return m_pAudio; }
00160
00164 ResourceCache* GetResourceCache() const { return m_pResourceCache; }
00165
00169 Game* GetGame() const { return m_pGame; }
00170
00174 int GetUpdateRate() const { return m_nUpdateRate; }
00175
00177
00179
00191 bool Initialize();
00192
00204 void Step();
00205
00215 void SetModalDialog(ModalDialogPtr pDialog) {
00216
00217 m_dialogStack.push(m_pDialog);
00218
00219 m_pDialog = pDialog;
00220
00221 }
00222
00226 void PrintFPS();
00227
00231 void PrintMouseCoordinates();
00232
00243 void ActivateScreen(const std::string& screenName);
00244
00254 void RegisterScreen(const std::string& screenName, BaseScreen* pScreen);
00255
00257
00259
00268 void RegisterMouseListener(AbstractMouseListener* pListener);
00269
00276 void UnregisterMouseListener(AbstractMouseListener* pListener);
00277
00286 void RegisterKeyListener(AbstractKeyListener* pListener);
00287
00294 void UnregisterKeyListener(AbstractKeyListener* pListener);
00295
00304 void OnMouseMove(const MouseEvent& e);
00305
00314 void OnMouseButtonPressed(const MouseEvent& e);
00315
00324 void OnMouseButtonReleased(const MouseEvent& e);
00325
00334 void OnKeyPressed(const KeyEvent& e);
00335
00344 void OnKeyReleased(const KeyEvent& e);
00345 };
00346
00347 #endif