From 2e93e755a4f4631419ba0eee26660a5638a7a7c6 Mon Sep 17 00:00:00 2001 From: Stijn Buys Date: Sun, 23 Nov 2008 22:13:40 +0000 Subject: particle systems --- src/render/renderext.cc | 45 ++++++++++++++++++++++++--------------------- 1 file changed, 24 insertions(+), 21 deletions(-) (limited to 'src/render/renderext.cc') diff --git a/src/render/renderext.cc b/src/render/renderext.cc index 5b6f3b4..01e8fcf 100644 --- a/src/render/renderext.cc +++ b/src/render/renderext.cc @@ -13,6 +13,7 @@ #include "render/renderext.h" #include "render/render.h" #include "render/textures.h" +#include "sys/sys.h" namespace render { @@ -25,8 +26,6 @@ RenderExt::RenderExt(core::Entity *entity) : core::Extension(core::Extension::Re //state_engine_trail_offset = 0; - using namespace model; - if (!entity->model() && entity->modelname().size()) { entity->set_modelname(entity->modelname()); if (!entity->model()) @@ -36,8 +35,8 @@ RenderExt::RenderExt(core::Entity *entity) : core::Extension(core::Extension::Re if (entity->model()) { model::Model *model = entity->model(); - for (Model::Lights::iterator lit = model->lights().begin(); lit != model->lights().end(); lit++) { - Light *light = (*lit); + for (model::Model::Lights::iterator lit = model->lights().begin(); lit != model->lights().end(); lit++) { + model::Light *light = (*lit); // load light texture std::stringstream flarename; @@ -45,22 +44,8 @@ RenderExt::RenderExt(core::Entity *entity) : core::Extension(core::Extension::Re light->render_texture = Textures::load(flarename.str()); } - if ((entity->type() == core::Entity::Controlable) && entity->model()->engines().size()) { - - size_t trail_texure = Textures::load("bitmaps/fx/circle00"); - - for(Model::Engines::iterator eit = model->engines().begin(); eit != model->engines().end(); eit++) { - Engine *engine = (*eit); - - // add trail particles - math::Color c; - ParticleStream *p = new ParticleStream(engine->location(), c, 0.0625 * engine->radius(), trail_texure, static_cast(entity), true); - state_particles.push_back(p); - } - } - - for (Model::Flares::iterator flit = model->flares().begin(); flit != model->flares().end(); flit++) { - Flare *flare = (*flit); + for (model::Model::Flares::iterator flit = model->flares().begin(); flit != model->flares().end(); flit++) { + model::Flare *flare = (*flit); // load flare texture std::stringstream flarename; @@ -68,6 +53,24 @@ RenderExt::RenderExt(core::Entity *entity) : core::Extension(core::Extension::Re flare->render_texture = Textures::load(flarename.str()); } + for(model::Model::ParticleSystems::iterator pit = model->particles().begin(); pit != model->particles().end(); pit++) { + model::Particles *particlesystem = (*pit); + + // load particle systems + ParticleScript *script = ParticleScript::find(particlesystem->script()); + if (script) { + if (script->type() == render::ParticleScript::Trail) { + Trail *trail = new Trail(script, entity, particlesystem->location()); + state_particles.push_back(trail); + } else if (script->type() == render::ParticleScript::Jet) { + Jet *jet = new Jet(script, entity, particlesystem->location()); + state_particles.push_back(jet); + } + } else { + con_warn << "Could not find particle system '" << particlesystem->script() << "'" << std::endl; + } + } + } else if (entity->type() == core::Entity::Globe) { core::EntityGlobe *globe = static_cast(entity); @@ -84,7 +87,7 @@ RenderExt::RenderExt(core::Entity *entity) : core::Extension(core::Extension::Re RenderExt::~RenderExt() { - for (Particles::iterator it = state_particles.begin(); it != state_particles.end(); it++) { + for (ParticleSystems::iterator it = state_particles.begin(); it != state_particles.end(); it++) { delete (*it); } state_particles.clear(); -- cgit v1.2.3