Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/branches/FICN/src/loader/LevelLoader.cc @ 560

Last change on this file since 560 was 560, checked in by landauf, 16 years ago
  • changed output from std::cout to COUT(level)
  • added SoftDebugLevel config-variable (its a hack, but it works fine)
File size: 4.3 KB
Line 
1/*
2 *   ORXONOX - the hottest 3D action shooter ever to exist
3 *
4 *
5 *   License notice:
6 *
7 *   This program is free software; you can redistribute it and/or
8 *   modify it under the terms of the GNU General Public License
9 *   as published by the Free Software Foundation; either version 2
10 *   of the License, or (at your option) any later version.
11 *
12 *   This program is distributed in the hope that it will be useful,
13 *   but WITHOUT ANY WARRANTY; without even the implied warranty of
14 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15 *   GNU General Public License for more details.
16 *
17 *   You should have received a copy of the GNU General Public License
18 *   along with this program; if not, write to the Free Software
19 *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
20 *
21 *   Author:
22 *      ...
23 *   Co-authors:
24 *      ...
25 *
26 */
27
28#include <string>
29#include <vector>
30#include <iostream>
31#include <algorithm>
32#include <iterator>
33
34#include <OgreOverlayManager.h>
35
36#include "LevelLoader.h"
37#include "tinyxml/tinyxml.h"
38#include "orxonox/core/CoreIncludes.h"
39#include "orxonox/core/Error.h"
40#include "orxonox/objects/BaseObject.h"
41
42using namespace std;
43
44namespace loader
45{
46
47LevelLoader::LevelLoader(string file, string path)
48{
49        valid_ = false;
50
51        // Load XML level file
52        path.append("/");
53        path.append(file);
54
55        // Open xml file
56        doc.LoadFile(path);
57
58        // Check if file was loaded
59        if (doc.LoadFile())
60        {
61                TiXmlHandle hDoc(&doc);
62                TiXmlHandle hRoot(0);
63                TiXmlElement* pElem;
64
65                // Check for root element
66                pElem = hDoc.FirstChildElement("orxonoxworld").Element();
67                if (pElem)
68                {
69                        // Set root element
70                        hRoot = TiXmlHandle(pElem);
71                        rootElement = hRoot.Element();
72
73                        // Set level description
74                        pElem = hRoot.FirstChild("description").Element();
75                        if (pElem)
76                        {
77                                description_ = pElem->GetText();
78                        }
79
80                        // Set level name
81                        name_ = rootElement->Attribute("name");
82                        image_ = rootElement->Attribute("image");
83
84                        valid_ = true;
85                }
86                else
87                {
88                        orxonox::Error("Level file has no valid root node");
89                }
90        }
91        else
92        {
93                orxonox::Error("Could not load level file ");
94        }
95}
96
97        void LevelLoader::loadLevel()
98        {
99                if (valid_)
100                {
101                        TiXmlElement* loadElem;
102                        TiXmlElement* worldElem;
103                        TiXmlElement* tElem;
104                        TiXmlNode* tNode;
105
106                        Ogre::OverlayManager& omgr = Ogre::OverlayManager::getSingleton();
107                        Ogre::Overlay* mLoadOverlay;
108
109                        // Set loading screen
110                        loadElem = rootElement->FirstChildElement("loading");
111                        if (loadElem)
112                        {
113                                // Set background
114                                tElem = loadElem->FirstChildElement("background");
115                                if (tElem)
116                                {
117                                        loadingBackgroundColor_ = tElem->Attribute("color");
118                                        loadingBackgroundImage_ = tElem->Attribute("image");
119                                }
120                                // Set bar
121                                tElem = loadElem->FirstChildElement("bar");
122                                if (tElem)
123                                {
124                                        loadingBarImage_ = tElem->Attribute("image");;
125                                        loadingBarTop_ = tElem->Attribute("top");
126                                        loadingBarLeft_ = tElem->Attribute("left");
127                                        loadingBarWidth_ = tElem->Attribute("width");
128                                        loadingBarHeight_ = tElem->Attribute("height");
129                                }
130
131
132                    mLoadOverlay = (Ogre::Overlay*)omgr.getByName("Orxonox/LoadingScreenSample");
133                    mLoadOverlay->show();
134
135                                COUT(0) << "\n\n\nThis is Orxonox\nthe hottest 3D action shooter ever to exist\n\n\n";
136                                COUT(0) << "Level: " << name() << "\nDescription:" << description() << "\nImage:"<<image()<<"\n\n\n";
137                                COUT(4) << "Backgroundcolor: " << loadingBackgroundColor_ << "\nBackgroundimage:" << loadingBackgroundImage_ << "\n\n\n";
138
139                        }
140
141                        // Load audio
142                        // TODO
143
144                        // Load scripts
145                        // TODO
146
147                        // Load world
148                        worldElem = rootElement->FirstChildElement("world");
149                        if (worldElem)
150                        {
151                                tNode = 0;
152                                while( tNode = worldElem->IterateChildren( tNode ) )
153                                {
154                                        tElem = tNode->ToElement();
155                                        orxonox::Identifier* id = ID(tElem->Value());
156                                        if (id)
157                                        {
158                        orxonox::BaseObject* obj = id->fabricate();
159                        obj->loadParams(tElem);
160                                        }
161                                        else
162                                        {
163                                            COUT(2) << "Warning: '"<< tElem->Value() <<"' is not a valid classname.\n";
164                                        }
165                                }
166                        }
167
168                        if (loadElem)
169                        {
170                                 mLoadOverlay->hide();
171                        }
172                        COUT(0) << "Loading finished!\n\n\n\n\n";
173                }
174        }
175
176        LevelLoader::~LevelLoader()
177        {
178
179        }
180
181
182        string LevelLoader::name()
183        {
184                return this->name_;
185        }
186
187        string LevelLoader::description()
188        {
189                return this->description_;
190        }
191
192        string LevelLoader::image()
193        {
194                return this->image_;
195        }
196
197
198}
199
Note: See TracBrowser for help on using the repository browser.