From 5c96b74c76b881b1533432a75d1a8cc42ecc5bda Mon Sep 17 00:00:00 2001 From: Stijn Buys Date: Wed, 23 Jul 2008 19:51:06 +0000 Subject: fragment renderer --- src/model/map.h | 112 +++++++++++++++++++++++++++++++++----------------------- 1 file changed, 66 insertions(+), 46 deletions(-) (limited to 'src/model/map.h') 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 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 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 class_tris; // normal triangles - std::list class_etris; // entity color triangles - std::list class_ltris; // light triangles - + math::Vector3f class_maxbbox; - math::Vector3f class_minbbox; + math::Vector3f class_minbbox; + + Materials map_materials; }; } -- cgit v1.2.3