00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef FIFE_ENGINE_H
00023 #define FIFE_ENGINE_H
00024
00025
00026 #include <map>
00027 #include <string>
00028 #include <vector>
00029
00030
00031 #ifdef USE_COCOA
00032 #include <objc/runtime.h>
00033 #endif
00034
00035
00036 #include <SDL.h>
00037
00038
00039
00040
00041
00042 #include "enginesettings.h"
00043 #include "video/devicecaps.h"
00044
00045 namespace FIFE {
00046
00047 class SoundManager;
00048 class RenderBackend;
00049 class IGUIManager;
00050 class VFS;
00051 class VFSSourceFactory;
00052 class EventManager;
00053 class TimeManager;
00054 class Model;
00055 class LogManager;
00056 class Cursor;
00057 class RendererBase;
00058 class Image;
00059 class ImageManager;
00060 class SoundClipManager;
00061 class OffRenderer;
00062 class TargetRenderer;
00063
00064 class IEngineChangeListener {
00065 public:
00066 virtual ~IEngineChangeListener() {}
00067
00070 virtual void onScreenModeChanged(const ScreenMode& newmode) = 0;
00071 };
00072
00079 class Engine {
00080 public:
00083 Engine();
00084
00087 virtual ~Engine();
00088
00091 EngineSettings& getSettings();
00092
00095 const DeviceCaps& getDeviceCaps() const;
00096
00104 void changeScreenMode(const ScreenMode& mode);
00105
00108 void init();
00109
00112 void destroy();
00113
00117 void initializePumping();
00118
00123 void finalizePumping();
00124
00127 void pump();
00128
00131 SoundManager* getSoundManager() const { return m_soundmanager; }
00132
00135 EventManager* getEventManager() const { return m_eventmanager; }
00136
00139 TimeManager* getTimeManager() const { return m_timemanager; }
00140
00141
00145 void setGuiManager(IGUIManager* guimanager) { m_guimanager = guimanager; }
00146
00149 IGUIManager* getGuiManager() const { return m_guimanager; }
00150
00153 ImageManager* getImageManager() const { return m_imagemanager; }
00154
00157 SoundClipManager* getSoundClipManager() const { return m_soundclipmanager; }
00158
00161 RenderBackend* getRenderBackend() const { return m_renderbackend; }
00162
00165 Model* getModel() const { return m_model; }
00166
00169 LogManager* getLogManager() const { return m_logmanager; }
00170
00173 VFS* getVFS() const { return m_vfs; }
00174
00177 Cursor* getCursor() const { return m_cursor; }
00178
00181 OffRenderer* getOffRenderer() const { return m_offrenderer; }
00182
00185 TargetRenderer* getTargetRenderer() const { return m_targetrenderer; }
00186
00190 void addChangeListener(IEngineChangeListener* listener);
00191
00195 void removeChangeListener(IEngineChangeListener* listener);
00196
00197 private:
00198 RenderBackend* m_renderbackend;
00199 IGUIManager* m_guimanager;
00200 EventManager* m_eventmanager;
00201 SoundManager* m_soundmanager;
00202 TimeManager* m_timemanager;
00203 ImageManager* m_imagemanager;
00204 SoundClipManager* m_soundclipmanager;
00205
00206 VFS* m_vfs;
00207 Model* m_model;
00208 LogManager* m_logmanager;
00209
00210 Cursor* m_cursor;
00211 bool m_destroyed;
00212
00213 EngineSettings m_settings;
00214 DeviceCaps m_devcaps;
00215
00216 ScreenMode m_screenMode;
00217
00218 OffRenderer* m_offrenderer;
00219 TargetRenderer* m_targetrenderer;
00220 std::vector<RendererBase*> m_renderers;
00221
00222 std::vector<IEngineChangeListener*> m_changelisteners;
00223
00224 #ifdef USE_COCOA
00225 objc_object *m_autoreleasePool;
00226 #endif
00227
00228 };
00229
00230 }
00231
00232 #endif