Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

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

Last change on this file since 521 was 521, checked in by nicolape, 17 years ago

Fixed bug for assf texture, added loading overlay (its now working, used some code from the ogre forums, no error but my overlay doesnt pop up… anyone an idea (code is in levelloader.cc

File size: 4.1 KB
RevLine 
[513]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
[507]28#include <string>
29#include <vector>
[164]30#include <iostream>
[507]31#include <algorithm>
32#include <iterator>
[164]33
[521]34#include <OgreOverlayManager.h>
35
[164]36#include "LevelLoader.h"
[471]37#include "tinyxml/tinyxml.h"
[496]38#include "orxonox/core/CoreIncludes.h"
[480]39#include "orxonox/core/Error.h"
40#include "orxonox/objects/BaseObject.h"
[164]41
42using namespace std;
43
44namespace loader
45{
46
[480]47LevelLoader::LevelLoader(string file, string path)
[164]48{
[480]49        valid_ = false;
[513]50
[164]51        // Load XML level file
[480]52        path.append("/");
[513]53        path.append(file);
54
[474]55        // Open xml file
[480]56        doc.LoadFile(path);
[474]57
58        // Check if file was loaded
59        if (doc.LoadFile())
[471]60        {
[474]61                TiXmlHandle hDoc(&doc);
[513]62                TiXmlHandle hRoot(0);
[474]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);
[480]71                        rootElement = hRoot.Element();
[474]72
73                        // Set level description
74                        pElem = hRoot.FirstChild("description").Element();
75                        if (pElem)
76                        {
[513]77                                description_ = pElem->GetText();
[474]78                        }
[513]79
[474]80                        // Set level name
[480]81                        name_ = rootElement->Attribute("name");
82                        image_ = rootElement->Attribute("image");
[513]83
[480]84                        valid_ = true;
85                }
86                else
87                {
88                        orxonox::Error("Level file has no valid root node");
[513]89                }
[480]90        }
91        else
92        {
93                orxonox::Error("Could not load level file ");
[513]94        }
[480]95}
96
97        void LevelLoader::loadLevel()
98        {
99                if (valid_)
100                {
101                        TiXmlElement* loadElem;
102                        TiXmlElement* worldElem;
103                        TiXmlElement* tElem;
104                        TiXmlNode* tNode;
[513]105
106
[474]107                        // Set loading screen
[480]108                        loadElem = rootElement->FirstChildElement("loading");
109                        if (loadElem)
[474]110                        {
111                                // Set background
[480]112                                tElem = loadElem->FirstChildElement("background");
113                                if (tElem)
[474]114                                {
[480]115                                        loadingBackgroundColor_ = tElem->Attribute("color");
116                                        loadingBackgroundImage_ = tElem->Attribute("image");
[474]117                                }
118                                // Set bar
[480]119                                tElem = loadElem->FirstChildElement("bar");
120                                if (tElem)
[474]121                                {
[480]122                                        loadingBarImage_ = tElem->Attribute("image");;
123                                        loadingBarTop_ = tElem->Attribute("top");
124                                        loadingBarLeft_ = tElem->Attribute("left");
125                                        loadingBarWidth_ = tElem->Attribute("width");
126                                        loadingBarHeight_ = tElem->Attribute("height");
[474]127                                }
[480]128                                showLoadingScreen();
[474]129                        }
[513]130
[480]131                        // Load audio
132                        // TODO
[513]133
[480]134                        // Load scripts
135                        // TODO
[513]136
[480]137                        // Load world
138                        worldElem = rootElement->FirstChildElement("world");
139                        if (worldElem)
[513]140                        {
[480]141                                tNode = 0;
142                                while( tNode = worldElem->IterateChildren( tNode ) )
143                                {
144                                        tElem = tNode->ToElement();
[496]145                                        orxonox::BaseObject* obj = ID(tElem->Value())->fabricate();
[480]146                                        obj->loadParams(tElem);
[513]147                                }
[480]148                        }
[513]149
150                        std::cout << "Loading finished!\n\n\n\n\n";
[474]151                }
[471]152        }
[513]153
[480]154        void LevelLoader::showLoadingScreen()
[471]155        {
[521]156               
157                Ogre::OverlayManager& omgr = Ogre::OverlayManager::getSingleton();
158    Ogre::Overlay* mLoadOverlay = (Ogre::Overlay*)omgr.getByName("Orxonox/LoadingScreenSample");
159    mLoadOverlay->show(); 
160               
[480]161                std::cout << "\n\n\nThis is Orxonox\nthe hottest 3D action shooter ever to exist\n\n\n";
162                std::cout << "Level: " << name() << "\nDescription:" << description() << "\nImage:"<<image()<<"\n\n\n";
163                std::cout << "Backgroundcolor: " << loadingBackgroundColor_ << "\nBackgroundimage:" << loadingBackgroundImage_ << "\n\n\n";
164        }
[513]165
[507]166        LevelLoader::~LevelLoader()
167        {
168
169        }
[513]170
171
[507]172        string LevelLoader::name()
[164]173        {
[507]174                return this->name_;
[164]175        }
[513]176
[507]177        string LevelLoader::description()
[164]178        {
[507]179                return this->description_;
[164]180        }
[513]181
[507]182        string LevelLoader::image()
[164]183        {
[507]184                return this->image_;
[164]185        }
186
187
188}
189
Note: See TracBrowser for help on using the repository browser.