engine.h

00001 /***************************************************************************
00002  *   Copyright (C) 2005-2008 by the FIFE team                              *
00003  *   http://www.fifengine.de                                               *
00004  *   This file is part of FIFE.                                            *
00005  *                                                                         *
00006  *   FIFE is free software; you can redistribute it and/or                 *
00007  *   modify it under the terms of the GNU Lesser General Public            *
00008  *   License as published by the Free Software Foundation; either          *
00009  *   version 2.1 of the License, or (at your option) any later version.    *
00010  *                                                                         *
00011  *   This library is distributed in the hope that it will be useful,       *
00012  *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
00013  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU     *
00014  *   Lesser General Public License for more details.                       *
00015  *                                                                         *
00016  *   You should have received a copy of the GNU Lesser General Public      *
00017  *   License along with this library; if not, write to the                 *
00018  *   Free Software Foundation, Inc.,                                       *
00019  *   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA          *
00020  ***************************************************************************/
00021 
00022 #ifndef FIFE_ENGINE_H
00023 #define FIFE_ENGINE_H
00024 
00025 // Standard C++ library includes
00026 #include <map>
00027 #include <string>
00028 #include <vector>
00029 
00030 // Platform specific includes
00031 #ifdef USE_COCOA
00032 #include <objc/runtime.h>
00033 #endif
00034 
00035 // 3rd party library includes
00036 #include <SDL.h>
00037 
00038 // FIFE includes
00039 // These includes are split up in two parts, separated by one empty line
00040 // First block: files included from the FIFE root src directory
00041 // Second block: files included from the same folder
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 }//FIFE
00231 
00232 #endif