Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

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

Last change on this file since 661 was 661, checked in by nicolasc, 16 years ago

added a test crosshair — same hack as blinky

File size: 5.5 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 *     Nicolas Perrenoud <nicolape@ee.ethz.ch>
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#include "audio/AudioManager.h"
42#include "orxonox/Orxonox.h"
43
44using namespace std;
45
46namespace loader
47{
48
49LevelLoader::LevelLoader(string file, string path)
50{
51  valid_ = false;
52
53  // Load XML level file
54  path.append("/");
55  path.append(file);
56
57  // Open xml file
58  doc.LoadFile(path);
59
60  // Check if file was loaded
61  if (doc.LoadFile())
62  {
63    TiXmlHandle hDoc(&doc);
64    TiXmlHandle hRoot(0);
65    TiXmlElement* pElem;
66
67    // Check for root element
68    pElem = hDoc.FirstChildElement("orxonoxworld").Element();
69    if (pElem)
70    {
71      // Set root element
72      hRoot = TiXmlHandle(pElem);
73      rootElement = hRoot.Element();
74
75      // Set level description
76      pElem = hRoot.FirstChild("description").Element();
77      if (pElem)
78      {
79        description_ = pElem->GetText();
80      }
81
82      // Set level name
83      name_ = rootElement->Attribute("name");
84      image_ = rootElement->Attribute("image");
85
86      valid_ = true;
87    }
88    else
89    {
90      orxonox::Error("Level file has no valid root node");
91    }
92  }
93  else
94  {
95    orxonox::Error("Could not load level file ");
96  }
97}
98
99  void LevelLoader::loadLevel()
100  {
101    if (valid_)
102    {
103      TiXmlElement* loadElem;
104      TiXmlElement* audioElem;
105      TiXmlElement* worldElem;
106      TiXmlElement* tElem;
107      TiXmlNode* tNode;
108
109      Ogre::OverlayManager& omgr = Ogre::OverlayManager::getSingleton();
110      Ogre::Overlay* mLoadOverlay; // FIXME: mey be uninitialized
111
112      // Set loading screen
113      loadElem = rootElement->FirstChildElement("loading");
114      if (loadElem)
115      {
116        // Set background
117        tElem = loadElem->FirstChildElement("background");
118        if (tElem)
119        {
120          loadingBackgroundColor_ = tElem->Attribute("color");
121          loadingBackgroundImage_ = tElem->Attribute("image");
122        }
123        // Set bar
124        tElem = loadElem->FirstChildElement("bar");
125        if (tElem)
126        {
127          loadingBarImage_ = tElem->Attribute("image");;
128          loadingBarTop_ = tElem->Attribute("top");
129          loadingBarLeft_ = tElem->Attribute("left");
130          loadingBarWidth_ = tElem->Attribute("width");
131          loadingBarHeight_ = tElem->Attribute("height");
132        }
133
134
135        mLoadOverlay = (Ogre::Overlay*)omgr.getByName("Orxonox/LoadingScreenSample");
136        mLoadOverlay->show();
137
138        COUT(0) << "\n\n\nThis is Orxonox\nthe hottest 3D action shooter ever to exist\n\n\n";
139        COUT(0) << "Level: " << name() << "\nDescription:" << description() << "\nImage:"<<image()<<"\n\n\n";
140        COUT(4) << "Backgroundcolor: " << loadingBackgroundColor_ << "\nBackgroundimage:" << loadingBackgroundImage_ << "\n\n\n";
141
142      }
143
144      // Load audio
145      audio::AudioManager* auMan = orxonox::Orxonox::getSingleton()->getAudioManagerPointer();
146      audioElem = rootElement->FirstChildElement("audio");
147
148      if (audioElem)
149      {
150        audioElem = audioElem->FirstChildElement("ambient");
151        if (audioElem)
152        {
153          tNode = 0;
154          //FIXME something is wrong, probably missing ==
155          while( tNode = audioElem->IterateChildren( tNode ) )
156          {
157            if (tNode->Type() == TiXmlNode::ELEMENT)
158            {
159
160              tElem = tNode->ToElement();
161              std::string elemVal = tElem->Value();
162              if (elemVal == "ogg")
163              {
164        COUT(0) << "Adding sound "<< tElem->Attribute("src") << "\n\n\n";
165
166                auMan->ambientAdd(tElem->Attribute("src"));
167              }
168            }
169          }
170          auMan->ambientStart();
171        }
172      }
173
174      // Load world
175      worldElem = rootElement->FirstChildElement("world");
176      if (worldElem)
177      {
178        tNode = 0;
179        while (tNode = worldElem->IterateChildren(tNode))
180        {
181          if (tNode->Type() == TiXmlNode::ELEMENT)
182          {
183            tElem = tNode->ToElement();
184            orxonox::Identifier* id = ID(tElem->Value());
185            if (id)
186            {
187                          orxonox::BaseObject* obj = id->fabricate();
188                          obj->loadParams(tElem);
189            }
190            else
191            {
192                COUT(2) << "Warning: '"<< tElem->Value() <<"' is not a valid classname.\n";
193            }
194          }
195        }
196      }
197
198      if (loadElem)
199      {
200         mLoadOverlay->hide();
201      }
202
203
204      COUT(0) << "Loading finished!\n\n\n\n\n";
205    }
206  }
207
208  LevelLoader::~LevelLoader()
209  {
210
211  }
212
213
214
215}
216
Note: See TracBrowser for help on using the repository browser.