Project::OSiRiON - Git repositories
Project::OSiRiON
News . About . Screenshots . Downloads . Forum . Wiki . Tracker . Git
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStijn Buys <ingar@osirion.org>2008-07-23 15:16:56 +0000
committerStijn Buys <ingar@osirion.org>2008-07-23 15:16:56 +0000
commit426b766efbccdd8f5715de9526464db251fac30c (patch)
treef1abfea7c1d4d4f1e97bd534d447cb6907576e2f /src/model/map.h
parent67517585e9b55967f5236ed5ebca77173eb2f2e3 (diff)
preparing for fragment rendering
Diffstat (limited to 'src/model/map.h')
-rw-r--r--src/model/map.h114
1 files changed, 110 insertions, 4 deletions
diff --git a/src/model/map.h b/src/model/map.h
index 2db4075..e5b5308 100644
--- a/src/model/map.h
+++ b/src/model/map.h
@@ -7,19 +7,125 @@
#ifndef __INCLUDED_MODEL_MAP_H__
#define __INCLUDED_MODEL_MAP_H__
+#include <fstream>
+#include <string>
+#include <vector>
+
#include "model/model.h"
+#include "model/plane.h"
+#include "model/triangle.h"
namespace model {
-/// class to load .map files into models
+/// class to parse the .map file structure and load geometry data into a model
class Map {
public:
- /// load a MAP file from disk
- /** @param name name of the model to be loaded
+ /// 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:
+ Map();
+ ~Map();
+
+ /// 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();
+
+ /// generate triangles for one plane in the plane list
+ void make_brushface(Plane *face);
+
+ /// load parsed primitives into map fragments
+ void load_fragments(Model *model);
+
+ /// 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 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;
};
}