Project::OSiRiON - Git repositories
Project::OSiRiON
News . About . Screenshots . Downloads . Forum . Wiki . Tracker . Git
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'src/model/map.h')
-rw-r--r--src/model/map.h112
1 files changed, 66 insertions, 46 deletions
diff --git a/src/model/map.h b/src/model/map.h
index e5b5308..afe925b 100644
--- a/src/model/map.h
+++ b/src/model/map.h
@@ -13,119 +13,139 @@
#include "model/model.h"
#include "model/plane.h"
-#include "model/triangle.h"
+#include "model/primitives.h"
-namespace model {
+namespace model
+{
/// class to parse the .map file structure and load geometry data into a model
-class Map {
+class Map
+{
public:
/// load a .map file into a Model
/** @param name name of the model to be loaded, without .map extension or maps/ prefix
*/
static Model *load(std::string const &name);
-
-protected:
+
+private:
Map();
~Map();
-
+
+ /// tpye definition for a per-material list of Primitives
+ typedef std::map<unsigned int, Primitives *> Materials;
+
/// 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 {
+ inline std::string classname() const
+ {
return classname_current;
}
-
+
/// current key
- inline std::string key() const {
+ inline std::string key() const
+ {
return key_current;
}
-
+
/// current value
- inline std::string value() const {
+ 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 {
+ 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 {
+ 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(); }
-
+ inline bool is_open()
+ {
+ return mapfile_ifs.is_open();
+ }
+
/// current filename
- inline std::string const & name() const {return mapfile_name; }
-
+ inline std::string const & name() const
+ {
+ return mapfile_name;
+ }
+
/// close the file
void close();
-
+
/// generate triangles for one plane in the plane list
void make_brushface(Plane *face);
-
- /// load parsed primitives into map fragments
+
+ /// load parsed primitives into Model Fragments
void load_fragments(Model *model);
-
+
+ /// clear the current list of per-material geometry
+ void clear_materials();
+
/// list of planes for the current brush
std::vector<Plane *> planes;
-
+
std::string classname_current;
std::string key_current;
std::string value_current;
-
+
bool last_read_was_key;
bool last_read_was_classname;
-
- unsigned int brushes;
+
+ unsigned int map_brushes;
+ unsigned int map_faces;
+ unsigned int map_faces_detail;
+
unsigned int parse_level;
unsigned int line_number;
std::ifstream mapfile_ifs;
std::string mapfile_name;
-
- std::list<Triangle *> class_tris; // normal triangles
- std::list<Triangle *> class_etris; // entity color triangles
- std::list<Triangle *> class_ltris; // light triangles
-
+
math::Vector3f class_maxbbox;
- math::Vector3f class_minbbox;
+ math::Vector3f class_minbbox;
+
+ Materials map_materials;
};
}