Project::OSiRiON - Git repositories
Project::OSiRiON
News . About . Screenshots . Downloads . Forum . Wiki . Tracker . Git
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'src/render/particles.cc')
-rw-r--r--src/render/particles.cc40
1 files changed, 35 insertions, 5 deletions
diff --git a/src/render/particles.cc b/src/render/particles.cc
index d5db8cf..fc27234 100644
--- a/src/render/particles.cc
+++ b/src/render/particles.cc
@@ -296,32 +296,62 @@ ParticleSystem::ParticleSystem(const ParticleScript *script, const core::Entity
particlesystem_radius = 1.0f;
if (particlesystem_script) {
+ // initial particle system parameters are set by the script
particlesystem_texture = Textures::load("textures/" + particlesystem_script->texture());
particlesystem_radius = particlesystem_script->radius();
particlesystem_cull = particlesystem_script->cull();
- // allow the script to override itself
if (particlesystem_script->entity()) {
- particlesystem_color.assign(entity->color());
+
+ if (particlesystem_script->entity_second()) {
+ // entity tertiary color
+ for (size_t i = 0; i < 3; i++) {
+ particlesystem_color[i] = (entity->color()[i] + entity->color_second()[i]) / 2;
+ }
+ } else {
+ // entity primary color
+ particlesystem_color.assign(entity->color());
+ }
+
} else if (particlesystem_script->entity_second()) {
+ // entity secondary color
particlesystem_color.assign(entity->color_second());
+
} else if (particlesystem_script->engine()) {
+ // FIXME engine_color or thrust_activated
particlesystem_color.assign(entity->model()->enginecolor());
+
} else {
particlesystem_color.assign(particlesystem_script->color());
- }
-
+ }
particlesystem_axis.assign(particlesystem_script->axis());
}
if (particlesystem_modelclass) {
+ // the modeltag can override the script parameters
particlesystem_radius *= particlesystem_modelclass->scale();
if (particlesystem_modelclass->entity()) {
- particlesystem_color.assign(entity->color());
+
+ if (particlesystem_modelclass->entity_second()) {
+ // entity tertiary color
+ for (size_t i = 0; i < 3; i++) {
+ particlesystem_color[i] = (entity->color()[i] + entity->color_second()[i]) / 2;
+ }
+ } else {
+ // entity primary color
+ particlesystem_color.assign(entity->color());
+ }
+
+ } else if (particlesystem_modelclass->entity_second()) {
+ // entity secondary color
+ particlesystem_color.assign(entity->color_second());
+
} else if (particlesystem_modelclass->has_color()) {
particlesystem_color.assign(particlesystem_modelclass->color());
+
} else if (particlesystem_modelclass->engine()) {
+ // FIXME engine_color or thrust_activated
particlesystem_color.assign(entity->model()->enginecolor());
}