Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

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

Last change on this file since 559 was 559, checked in by landauf, 16 years ago

added check, but orxonox still crashes when an unknown classname is parsed from the xml-file.

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                                std::cout << "\n\n\nThis is Orxonox\nthe hottest 3D action shooter ever to exist\n\n\n";
136                                std::cout << "Level: " << name() << "\nDescription:" << description() << "\nImage:"<<image()<<"\n\n\n";
137                                std::cout << "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                        std::cout << "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.