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
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 *
[616]21 *   Author:
[585]22 *     Nicolas Perrenoud <nicolape@ee.ethz.ch>
[513]23 *   Co-authors:
24 *      ...
25 *
26 */
27
[659]28// #include <string>
29// #include <vector>
30// #include <iostream>
[507]31#include <algorithm>
32#include <iterator>
[164]33
[521]34#include <OgreOverlayManager.h>
35
[164]36#include "LevelLoader.h"
[659]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"
[584]41#include "audio/AudioManager.h"
[614]42#include "orxonox/Orxonox.h"
[164]43
44using namespace std;
45
46namespace loader
47{
48
[480]49LevelLoader::LevelLoader(string file, string path)
[164]50{
[661]51  valid_ = false;
[513]52
[661]53  // Load XML level file
54  path.append("/");
55  path.append(file);
[513]56
[661]57  // Open xml file
58  doc.LoadFile(path);
[474]59
[661]60  // Check if file was loaded
61  if (doc.LoadFile())
62  {
63    TiXmlHandle hDoc(&doc);
64    TiXmlHandle hRoot(0);
65    TiXmlElement* pElem;
[474]66
[661]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();
[474]74
[661]75      // Set level description
76      pElem = hRoot.FirstChild("description").Element();
77      if (pElem)
78      {
79        description_ = pElem->GetText();
80      }
[513]81
[661]82      // Set level name
83      name_ = rootElement->Attribute("name");
84      image_ = rootElement->Attribute("image");
[513]85
[661]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  }
[480]97}
98
[661]99  void LevelLoader::loadLevel()
100  {
101    if (valid_)
102    {
103      TiXmlElement* loadElem;
104      TiXmlElement* audioElem;
105      TiXmlElement* worldElem;
106      TiXmlElement* tElem;
107      TiXmlNode* tNode;
[513]108
[661]109      Ogre::OverlayManager& omgr = Ogre::OverlayManager::getSingleton();
110      Ogre::Overlay* mLoadOverlay; // FIXME: mey be uninitialized
[513]111
[661]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        }
[559]133
134
[661]135        mLoadOverlay = (Ogre::Overlay*)omgr.getByName("Orxonox/LoadingScreenSample");
136        mLoadOverlay->show();
[525]137
[661]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";
[559]141
[661]142      }
[513]143
[661]144      // Load audio
145      audio::AudioManager* auMan = orxonox::Orxonox::getSingleton()->getAudioManagerPointer();
146      audioElem = rootElement->FirstChildElement("audio");
[655]147
[661]148      if (audioElem)
149      {
150        audioElem = audioElem->FirstChildElement("ambient");
151        if (audioElem)
152        {
153          tNode = 0;
[660]154          //FIXME something is wrong, probably missing ==
[661]155          while( tNode = audioElem->IterateChildren( tNode ) )
156          {
[625]157            if (tNode->Type() == TiXmlNode::ELEMENT)
158            {
[655]159
[661]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";
[655]165
[661]166                auMan->ambientAdd(tElem->Attribute("src"));
167              }
[625]168            }
[661]169          }
170          auMan->ambientStart();
171        }
172      }
[616]173
[661]174      // Load world
175      worldElem = rootElement->FirstChildElement("world");
176      if (worldElem)
177      {
178        tNode = 0;
179        while (tNode = worldElem->IterateChildren(tNode))
180        {
[625]181          if (tNode->Type() == TiXmlNode::ELEMENT)
182          {
[661]183            tElem = tNode->ToElement();
184            orxonox::Identifier* id = ID(tElem->Value());
185            if (id)
186            {
[625]187                          orxonox::BaseObject* obj = id->fabricate();
188                          obj->loadParams(tElem);
[661]189            }
190            else
191            {
192                COUT(2) << "Warning: '"<< tElem->Value() <<"' is not a valid classname.\n";
193            }
[625]194          }
[661]195        }
196      }
[559]197
[661]198      if (loadElem)
199      {
200         mLoadOverlay->hide();
201      }
[659]202
203
[661]204      COUT(0) << "Loading finished!\n\n\n\n\n";
205    }
206  }
[513]207
[661]208  LevelLoader::~LevelLoader()
209  {
[507]210
[661]211  }
[513]212
213
214
[164]215}
216
Note: See TracBrowser for help on using the repository browser.