diff options
author | Stijn Buys <ingar@osirion.org> | 2008-05-04 22:30:49 +0000 |
---|---|---|
committer | Stijn Buys <ingar@osirion.org> | 2008-05-04 22:30:49 +0000 |
commit | 7218e3bd4616d4706090ec47d72845a2bb89c6a3 (patch) | |
tree | cbf3fdb0dddf573edff89b50af22e8a84690cf00 /src/model/mapfile.h | |
parent | 33e45d8052b385aa8b1fce68122c8d11f50e7e42 (diff) |
split map reading from models
Diffstat (limited to 'src/model/mapfile.h')
-rw-r--r-- | src/model/mapfile.h | 130 |
1 files changed, 130 insertions, 0 deletions
diff --git a/src/model/mapfile.h b/src/model/mapfile.h new file mode 100644 index 0000000..4349621 --- /dev/null +++ b/src/model/mapfile.h @@ -0,0 +1,130 @@ +/* + model/mapfile.h + This file is part of the Osirion project and is distributed under + the terms of the GNU General Public License version 2 +*/ + +#ifndef __INCLUDED_MODEL_MAPFILE_H__ +#define __INCLUDED_MODEL_MAPFILE_H__ + +#include <fstream> +#include <string> +#include <vector> + +#include "model/model.h" +#include "model/plane.h" +#include "model/triangle.h" + +namespace model { + +/// class to parse .map files +class MapFile { + +public: + MapFile(); + ~MapFile(); + + /// open the file for reading + /** the filename will get the "maps/" prefix and ".map" suffix + */ + bool open(std::string const & name); + + /// parse one line, returns false on end-of-file + bool getline(); + + /// current classname + inline std::string classname() const { + return classname_current; + } + + /// current key + inline std::string key() const { + return key_current; + } + + /// current value + inline std::string value() const { + return value_current; + } + + /// true if the last read line contained a new classname + bool got_classname() const; + + /// true if the last read line contained a new classname + bool got_classname(const char*) const; + + /// true if the last read statement was a key=value pair + inline bool got_key() const { + return last_read_was_key; + } + + bool got_key(const char * keylabel); + + /// check if the last read key=value pair matches keylabel and store the value in valuestring + bool got_key_string(const char * keylabel, std::string & valuestring); + + /// check if the last read key=value pair matches keylabel and store the value in color + bool got_key_color(const char * keylabel, math::Color & color); + + /// check if the last read key=value pair matches keylabel and store the value in f + bool got_key_float(const char * keylabel, float & f); + + /// check if the last read key=value pair matches keylabel and store the value in f + bool got_key_int(const char * keylabel, unsigned int & u); + + /// check if the last read key=value pair matches keylabel and store the value in valuestring + bool got_key_angle(const char * keylabel, float & f); + + bool got_key_vector3f(const char * keylabel, math::Vector3f & v); + + + /// return the number of lines read so far + inline unsigned int line() const { + return line_number; + } + + /// return true of the ini file is open for reading + inline bool is_open() { return mapfile_ifs.is_open(); } + + /// current filename + inline std::string const & name() const {return mapfile_name; } + + /// close the file + void close(); + + /// tmp lists with triangles + std::list<Triangle *> class_tris; + + /// tmp lists with entity color triangles + std::list<Triangle *> class_etris; + + math::Vector3f class_maxbbox; + + math::Vector3f class_minbbox; + + unsigned int brushes; + +protected: + /// generate triangles for one plane in the plane list + void make_brushface(Plane *face); + + /// list of planes for the current brush + std::vector<Plane *> planes; + +private: + std::string classname_current; + std::string key_current; + std::string value_current; + + bool last_read_was_key; + bool last_read_was_classname; + + unsigned int parse_level; + unsigned int line_number; + std::ifstream mapfile_ifs; + std::string mapfile_name; +}; + +} + +#endif // __INCLUDED_MODEL_MAPFILE_H__ |