Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Ignore:
Timestamp:
Nov 6, 2010, 8:17:20 PM (14 years ago)
Author:
dafrick
Message:

Introducing LevelInfo class, which can be used to specify things about a Level and which is used to provide more flexibility in displaying a list of levels.
Basic functionality works, now all that needs to be dones is to exploit the new functionality.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • code/branches/releasetodo/src/orxonox/LevelManager.cc

    r7614 r7625  
    5959            ModifyConfigValue(defaultLevelName_, tset, CommandLineParser::getValue("level").getString());
    6060        }
     61
     62        this->compileAvailableLevelList();
    6163    }
    6264
     
    128130    }
    129131
     132    unsigned int LevelManager::getNumberOfLevels()
     133    {
     134        this->updateAvailableLevelList();
     135
     136        COUT(0) << "Number of Levels: " << this->infos_.size() << std::endl;
     137
     138        return this->availableLevels_.size();
     139    }
     140
    130141    const std::string& LevelManager::getAvailableLevelListItem(unsigned int index) const
    131142    {
    132         if (index >= availableLevels_.size())
     143        if (index >= this->availableLevels_.size())
    133144            return BLANKSTRING;
    134145        else
    135             return availableLevels_[index];
     146        {
     147            std::map<std::string, LevelInfoItem*>::const_iterator it = this->infos_.find(this->availableLevels_[index]);
     148            assert(it->second);
     149            return it->second->getName();
     150        }
    136151    }
    137152
    138153    void LevelManager::compileAvailableLevelList()
    139154    {
    140         this->availableLevels_.clear();
    141155        Ogre::StringVectorPtr levels = Resource::findResourceNames("*.oxw");
     156        // Iterate over all *.oxw level files.
    142157        for (Ogre::StringVector::const_iterator it = levels->begin(); it != levels->end(); ++it)
    143158        {
     159            //TODO: Replace with tag,
    144160            if (it->find("old/") != 0)
    145161            {
    146162                size_t pos = it->find(".oxw");
    147                 COUT(0) << *it << std::endl;
     163
     164                bool infoExists = false;
     165                // Load the LevelInfo object from the level file.
    148166                XMLFile file = XMLFile(*it);
    149167                ClassTreeMask mask = ClassTreeMask();
     
    151169                mask.include(ClassIdentifier<LevelInfo>::getIdentifier());
    152170                Loader::load(&file, mask);
    153                
     171                for(ObjectList<LevelInfo>::iterator item = ObjectList<LevelInfo>::begin(); item != ObjectList<LevelInfo>::end(); ++item)
     172                {
     173                    LevelInfoItem* info = item->copy();
     174                    COUT(0) << "BUUUUUUUUUH: " << info->getName() << " | " << info->getXMLFilename() << " | " << it->substr(0, pos) << std::endl;
     175                    if(info->getXMLFilename() == *it)
     176                    {
     177                        this->infos_.insert(std::pair<std::string, LevelInfoItem*>(it->substr(0, pos),info));
     178                        infoExists = true;
     179                    }
     180                }
     181                Loader::unload(&file, mask);
     182                if(!infoExists)
     183                {
     184                    this->infos_.insert(std::pair<std::string, LevelInfoItem*>(it->substr(0, pos), new LevelInfoItem(it->substr(0, pos), *it)));
     185                }
     186
    154187                this->availableLevels_.push_back(it->substr(0, pos));
    155188            }
    156189        }
     190    }
    157191
     192    void LevelManager::updateAvailableLevelList(void)
     193    {
     194        //TODO: Implement some kind of update?
    158195    }
    159196}
Note: See TracChangeset for help on using the changeset viewer.