Project::OSiRiON - Git repositories
Project::OSiRiON
News . About . Screenshots . Downloads . Forum . Wiki . Tracker . Git
summaryrefslogtreecommitdiff
path: root/src/model
diff options
context:
space:
mode:
Diffstat (limited to 'src/model')
-rw-r--r--src/model/classes.cc2
-rw-r--r--src/model/classes.h24
-rw-r--r--src/model/map.cc30
3 files changed, 54 insertions, 2 deletions
diff --git a/src/model/classes.cc b/src/model/classes.cc
index 07a36f3..f90b979 100644
--- a/src/model/classes.cc
+++ b/src/model/classes.cc
@@ -42,6 +42,7 @@ Light::~Light()
Flare::Flare() : Light()
{
flare_engine = false;
+ flare_cull = CullNone;
}
Flare::~Flare()
@@ -55,6 +56,7 @@ Particles::Particles() :
particles_entity = false;
particles_engine = false;
particles_radius = 0.0f;
+ particles_cull = CullNone;
}
Particles::Particles(math::Vector3f const & location) :
diff --git a/src/model/classes.h b/src/model/classes.h
index c6bf3b1..c2b6a20 100644
--- a/src/model/classes.h
+++ b/src/model/classes.h
@@ -14,6 +14,15 @@
namespace model
{
+
+/**
+ * @brief
+ * culling parameter values
+ * Culling is a paremeter used by flares and particles to indicate
+ * with side of the polygons should be culled during rendering
+ */
+enum Cull { CullNone=0, CullBack=1, CullFront=2 };
+
/* ---- class MapClass --------------------------------------------- */
class MapClass
@@ -134,13 +143,19 @@ public:
return flare_axis;
}
- inline bool engine() const
+ inline const bool engine() const
{
return flare_engine;
}
+ inline const Cull cull() const
+ {
+ return flare_cull;
+ }
+
math::Axis flare_axis;
bool flare_engine;
+ Cull flare_cull;
};
/* ---- class Particles -------------------------------------------- */
@@ -185,6 +200,12 @@ public:
{
return particles_radius;
}
+
+ inline const Cull cull() const
+ {
+ return particles_cull;
+ }
+
std::string particles_script;
math::Vector3f particles_location;
math::Axis particles_axis;
@@ -193,6 +214,7 @@ public:
bool particles_engine;
float particles_radius;
+ Cull particles_cull;
};
/* ---- class Dock ------------------------------------------------- */
diff --git a/src/model/map.cc b/src/model/map.cc
index a59d2ff..9a1802f 100644
--- a/src/model/map.cc
+++ b/src/model/map.cc
@@ -4,6 +4,7 @@
the terms of the GNU General Public License version 2
*/
+#include "auxiliary/functions.h"
#include "filesystem/filesystem.h"
#include "math/mathlib.h"
#include "model/map.h"
@@ -837,6 +838,7 @@ Model * Map::load(std::string const &name)
unsigned int u;
float angle;
float r;
+ std::string str;
while (mapfile.getline()) {
@@ -1027,7 +1029,7 @@ Model * Map::load(std::string const &name)
} else if (mapfile.got_key_float("radius", flare->light_radius)) {
flare->light_radius *= LIGHTSCALE;
-
+
} else if (mapfile.got_key_float("frequency", flare->light_frequency)) {
continue;
@@ -1056,6 +1058,19 @@ Model * Map::load(std::string const &name)
} else if (mapfile.got_key_float("roll", angle)) {
flare->flare_axis.change_roll(angle);
+
+ } else if (mapfile.got_key_string("cull", str)) {
+
+ aux::to_lowercase(str);
+ if (str.compare("none") == 0) {
+ flare->flare_cull = CullNone;
+ } else if (str.compare("back") == 0) {
+ flare->flare_cull = CullBack;
+ } else if (str.compare("front") == 0) {
+ flare->flare_cull = CullFront;
+ } else {
+ mapfile.unknown_value();
+ }
} else if (mapfile.got_key()) {
mapfile.unknown_key();
@@ -1098,6 +1113,19 @@ Model * Map::load(std::string const &name)
} else if (mapfile.got_key_float("radius", r)) {
particles->set_radius(r * LIGHTSCALE);
+
+ } else if (mapfile.got_key_string("cull", str)) {
+
+ aux::to_lowercase(str);
+ if (str.compare("none") == 0) {
+ particles->particles_cull = CullNone;
+ } else if (str.compare("back") == 0) {
+ particles->particles_cull = CullBack;
+ } else if (str.compare("front") == 0) {
+ particles->particles_cull = CullFront;
+ } else {
+ mapfile.unknown_value();
+ }
} else if (mapfile.got_key()) {
mapfile.unknown_key();