|
|
- #ifndef LEVEL_HPP
- #define LEVEL_HPP
-
- #include "../configuration.hpp"
- #include "terrain.hpp"
- #include <string>
- #include <vector>
-
- /**
- * Contains the parameters required to load a level.
- */
- class LevelParameterSet
- {
- public:
- LevelParameterSet();
- ~LevelParameterSet();
-
- // Loads level parameters from a .lvl file
- bool load(const std::string& filename);
-
- std::string filename;
- std::string biome;
- std::string heightmap;
- };
-
- /**
- * A level.
- */
- class Level
- {
- public:
- Level();
- ~Level();
-
- // Loads a level from a level file
- bool load(const LevelParameterSet& params);
-
- Terrain terrain;
- ModelInstance terrainSurface;
- ModelInstance terrainSubsurface;
- };
-
- /**
- * A collection of level parameters which constitute a campaign.
- */
- class Campaign
- {
- public:
- Campaign();
- ~Campaign();
-
- // Loads all level parameter sets in a directory with the file name pattern `<world>-<level>.lvl`
- bool load(const std::string& directory);
-
- // Returns the number of worlds in the campaign
- std::size_t getWorldCount() const;
-
- // Returns the number of levels in a world
- std::size_t getLevelCount(std::size_t worldIndex) const;
-
- // Returns the file for the level with the specified indices
- const LevelParameterSet* getLevelParams(std::size_t worldIndex, std::size_t levelIndex) const;
-
- private:
- std::vector<std::vector<LevelParameterSet>> levelParameterSets;
- };
-
- inline std::size_t Campaign::getWorldCount() const
- {
- return levelParameterSets.size();
- }
-
- inline std::size_t Campaign::getLevelCount(std::size_t worldIndex) const
- {
- return levelParameterSets[worldIndex].size();
- }
-
- inline const LevelParameterSet* Campaign::getLevelParams(std::size_t worldIndex, std::size_t levelIndex) const
- {
- return &levelParameterSets[worldIndex][levelIndex];
- }
-
- #endif // LEVEL_HPP
|