Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/branches/resource2/src/core/Core.h @ 5641

Last change on this file since 5641 was 5641, checked in by rgrieder, 15 years ago

Prepared build system for an external media directory.
This revision only runs in console mode! (tcl files working again)

  • Property svn:eol-style set to native
File size: 5.6 KB
Line 
1/*
2 *   ORXONOX - the hottest 3D action shooter ever to exist
3 *                    > www.orxonox.net <
4 *
5 *
6 *   License notice:
7 *
8 *   This program is free software; you can redistribute it and/or
9 *   modify it under the terms of the GNU General Public License
10 *   as published by the Free Software Foundation; either version 2
11 *   of the License, or (at your option) any later version.
12 *
13 *   This program is distributed in the hope that it will be useful,
14 *   but WITHOUT ANY WARRANTY; without even the implied warranty of
15 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16 *   GNU General Public License for more details.
17 *
18 *   You should have received a copy of the GNU General Public License
19 *   along with this program; if not, write to the Free Software
20 *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
21 *
22 *   Author:
23 *      Fabian 'x3n' Landau
24 *      Reto Grieder
25 *   Co-authors:
26 *      ...
27 *
28 */
29
30/**
31@file
32@brief
33    Declaration of the Core class.
34@details
35    The Core class is a singleton, only used to configure some variables
36    in the core through the config-file.
37*/
38
39#ifndef _Core_H__
40#define _Core_H__
41
42#include "CorePrereqs.h"
43
44#include <cassert>
45#include <boost/scoped_ptr.hpp>
46#include "util/OutputHandler.h"
47#include "util/ScopeGuard.h"
48#include "util/Singleton.h"
49
50namespace orxonox
51{
52    class CoreConfiguration;
53    using boost::scoped_ptr;
54
55    /**
56    @brief
57        The Core class is a singleton used to configure the program basics.
58    @details
59        The class provides information about the media, config and log path.
60        It determines those by the use of platform specific functions.
61    @remark
62        You should only create this singleton once because it destroys the identifiers!
63    */
64    class _CoreExport Core : public Singleton<Core>
65    {
66        typedef Loki::ScopeGuardImpl0<void (*)()> SimpleScopeGuard;
67        friend class Singleton<Core>;
68
69        public:
70            /**
71            @brief
72                Determines the executable path, checks for build directory runs, creates
73                the output directories and sets up the other core library singletons.
74            @throws
75                GeneralException
76            */
77            Core(const std::string& cmdLine);
78            ~Core();
79
80            void setConfigValues();
81
82            bool preUpdate(const Clock& time) throw();
83            bool postUpdate(const Clock& time) throw();
84
85            void loadGraphics();
86            void unloadGraphics();
87
88            static int   getSoftDebugLevel(OutputHandler::OutputDevice device = OutputHandler::LD_All);
89            static void  setSoftDebugLevel(OutputHandler::OutputDevice device, int level);
90            static const std::string& getLanguage();
91            static void  resetLanguage();
92
93            static void tsetExternalMediaPath(const std::string& path);
94            //! Returns the path to the data files as boost::filesystem::path
95            static const boost::filesystem::path& getMediaPath();
96            //! Returns the path to the external data files as boost::filesystem::path
97            static const boost::filesystem::path& getExternalMediaPath();
98            //! Returns the path to the config files as boost::filesystem::path
99            static const boost::filesystem::path& getConfigPath();
100            //! Returns the path to the log files as boost::filesystem::path
101            static const boost::filesystem::path& getLogPath();
102            //! Returns the path to the data files as std::string
103            //! Returns the path to the root folder as boost::filesystem::path
104            static const boost::filesystem::path& getRootPath();
105            static std::string getMediaPathString();
106            //! Returns the path to the external data files as std::string
107            static std::string getExternalMediaPathString();
108            //! Returns the path to the config files as std::string
109            static std::string getConfigPathString();
110            //! Returns the path to the log files as std::string
111            static std::string getLogPathString();
112            //! Returns the path to the root folder as std::string
113            static std::string getRootPathString();
114
115            static bool isDevelopmentRun() { return getInstance().bDevRun_; }
116
117        private:
118            Core(const Core&); //!< Don't use (undefined symbol)
119
120            void checkDevBuild();
121            void setExecutablePath();
122            void createDirectories();
123            void setThreadAffinity(int limitToCPU);
124
125            // Mind the order for the destruction!
126            scoped_ptr<SignalHandler>     signalHandler_;
127            SimpleScopeGuard              identifierDestroyer_;
128            SimpleScopeGuard              consoleCommandDestroyer_;
129            scoped_ptr<ConfigFileManager> configFileManager_;
130            scoped_ptr<Language>          languageInstance_;
131            scoped_ptr<CoreConfiguration> configuration_;
132            scoped_ptr<LuaBind>           luaBind_;
133            scoped_ptr<TclBind>           tclBind_;
134            scoped_ptr<TclThreadManager>  tclThreadManager_;
135            scoped_ptr<Shell>             shell_;
136            // graphical
137            scoped_ptr<GraphicsManager>   graphicsManager_;     //!< Interface to OGRE
138            scoped_ptr<InputManager>      inputManager_;        //!< Interface to OIS
139            scoped_ptr<GUIManager>        guiManager_;          //!< Interface to GUI
140
141            bool                          bDevRun_;             //!< True for runs in the build directory (not installed)
142            bool                          bGraphicsLoaded_;
143
144            static Core* singletonPtr_s;
145    };
146}
147
148#endif /* _Core_H__ */
Note: See TracBrowser for help on using the repository browser.