diff options
Diffstat (limited to 'src/render/particles.cc')
-rw-r--r-- | src/render/particles.cc | 40 |
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()); } |