Changeset 661 for code/branches/FICN/src/loader
- Timestamp:
- Dec 20, 2007, 6:55:17 PM (17 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
code/branches/FICN/src/loader/LevelLoader.cc
r660 r661 49 49 LevelLoader::LevelLoader(string file, string path) 50 50 { 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 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 97 } 98 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 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 154 //FIXME something is wrong, probably missing == 155 156 155 while( tNode = audioElem->IterateChildren( tNode ) ) 156 { 157 157 if (tNode->Type() == TiXmlNode::ELEMENT) 158 158 { 159 159 160 161 162 163 164 165 166 167 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 168 } 169 170 171 172 173 174 175 176 177 178 179 180 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 181 if (tNode->Type() == TiXmlNode::ELEMENT) 182 182 { 183 184 185 186 183 tElem = tNode->ToElement(); 184 orxonox::Identifier* id = ID(tElem->Value()); 185 if (id) 186 { 187 187 orxonox::BaseObject* obj = id->fabricate(); 188 188 obj->loadParams(tElem); 189 190 191 192 193 189 } 190 else 191 { 192 COUT(2) << "Warning: '"<< tElem->Value() <<"' is not a valid classname.\n"; 193 } 194 194 } 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 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 212 213 213
Note: See TracChangeset
for help on using the changeset viewer.