From d4f69710312305fb37e77eb7c21c536da3dd7e7a Mon Sep 17 00:00:00 2001 From: Stijn Buys Date: Sat, 1 Dec 2012 16:04:57 +0000 Subject: Allow particles to have the secondary entity color. --- src/render/particles.cc | 22 +++++++++++++++------- src/render/particles.h | 21 ++++++++++++++------- 2 files changed, 29 insertions(+), 14 deletions(-) (limited to 'src/render') diff --git a/src/render/particles.cc b/src/render/particles.cc index 6681a4f..d5db8cf 100644 --- a/src/render/particles.cc +++ b/src/render/particles.cc @@ -104,6 +104,7 @@ ParticleScript *ParticleScript::load(const std::string &label) ParticleScript *script = 0; std::string strval; float pitch, yaw, roll = 0.0f; + bool b; while (inifile.getline()) { @@ -173,12 +174,19 @@ ParticleScript *ParticleScript::load(const std::string &label) } else if (inifile.got_key_float("timeout", script->particlescript_timeout)) { continue; } else if (inifile.got_key_color("color", script->particlescript_color)) { - script->particlescript_has_color = true; continue; } else if (inifile.got_key_bool("engine", script->particlescript_engine)) { continue; } else if (inifile.got_key_bool("entity", script->particlescript_entity)) { continue; + } else if (inifile.got_key_bool("entitysecond", script->particlescript_entity_second)) { + continue; + } else if (inifile.got_key_bool("entitythird", b)) { + if (b) { + script->particlescript_entity = true; + script->particlescript_entity_second = true; + } + continue; } else if (inifile.got_key_float("angle", yaw)) { if (yaw == model::ANGLEUP) { @@ -251,8 +259,8 @@ ParticleScript *ParticleScript::load(const std::string &label) ParticleScript::ParticleScript(const std::string & label) : particlescript_label(label) { particlescript_entity = false; + particlescript_entity_second = false; particlescript_engine = false; - particlescript_has_color = true; particlescript_radius = 1.0f; particlescript_alpha = 1.0f; @@ -295,12 +303,12 @@ ParticleSystem::ParticleSystem(const ParticleScript *script, const core::Entity // allow the script to override itself if (particlesystem_script->entity()) { particlesystem_color.assign(entity->color()); - } - if (particlesystem_script->has_color()) { - particlesystem_color.assign(particlesystem_script->color()); - } - if (particlesystem_script->engine()) { + } else if (particlesystem_script->entity_second()) { + particlesystem_color.assign(entity->color_second()); + } else if (particlesystem_script->engine()) { particlesystem_color.assign(entity->model()->enginecolor()); + } else { + particlesystem_color.assign(particlesystem_script->color()); } particlesystem_axis.assign(particlesystem_script->axis()); diff --git a/src/render/particles.h b/src/render/particles.h index c2d9c02..4c3de0e 100644 --- a/src/render/particles.h +++ b/src/render/particles.h @@ -72,10 +72,6 @@ public: return particlescript_color; } - inline bool has_color() const { - return particlescript_has_color; - } - /// axis transformation relative to the ejector inline const math::Axis &axis() const { return particlescript_axis; @@ -86,11 +82,22 @@ public: return particlescript_engine; } - /// true if engine color is to be applied - inline bool entity() const { + /** + * @brief true if entity primary color is to be applied + * */ + inline bool entity() const + { return particlescript_entity; } + /** + * @brief true if entity secondary color is to be applied + * */ + inline bool entity_second() const + { + return particlescript_entity_second; + } + inline float radius() const { return particlescript_radius; } @@ -142,8 +149,8 @@ private: math::Axis particlescript_axis; bool particlescript_entity; + bool particlescript_entity_second; bool particlescript_engine; - bool particlescript_has_color; float particlescript_radius; float particlescript_timeout; -- cgit v1.2.3