From 5992c46fc62db1bdf038b5b7be0e94dd10183e77 Mon Sep 17 00:00:00 2001 From: Stijn Buys Date: Tue, 13 Jan 2009 19:29:54 +0000 Subject: adds 'cull' option to fx_flare and fx_particles --- src/model/classes.cc | 2 ++ src/model/classes.h | 24 +++++++++++++++++++++++- src/model/map.cc | 30 +++++++++++++++++++++++++++++- 3 files changed, 54 insertions(+), 2 deletions(-) (limited to 'src/model') 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(); -- cgit v1.2.3