diff options
author | Stijn Buys <ingar@osirion.org> | 2008-11-16 13:53:44 +0000 |
---|---|---|
committer | Stijn Buys <ingar@osirion.org> | 2008-11-16 13:53:44 +0000 |
commit | 315a8c2dff9b76ac5e1ebbef265f13ac19d65e3d (patch) | |
tree | dec6de0bcf7f19dd95b7121f27b185da67cee4e2 /src/render/renderext.cc | |
parent | 28ba97bdd8fb6ca352dc49dba01a66bd155ad523 (diff) |
engine trails
Diffstat (limited to 'src/render/renderext.cc')
-rw-r--r-- | src/render/renderext.cc | 32 |
1 files changed, 23 insertions, 9 deletions
diff --git a/src/render/renderext.cc b/src/render/renderext.cc index ffe462f..5b6f3b4 100644 --- a/src/render/renderext.cc +++ b/src/render/renderext.cc @@ -23,10 +23,16 @@ RenderExt::RenderExt(core::Entity *entity) : core::Extension(core::Extension::Re state_detailvisible = false; state_fuzz = math::randomf(); - state_engine_trail_offset = 0; + //state_engine_trail_offset = 0; using namespace model; + if (!entity->model() && entity->modelname().size()) { + entity->set_modelname(entity->modelname()); + if (!entity->model()) + entity->set_modelname(""); + } + if (entity->model()) { model::Model *model = entity->model(); @@ -39,17 +45,20 @@ RenderExt::RenderExt(core::Entity *entity) : core::Extension(core::Extension::Re light->render_texture = Textures::load(flarename.str()); } - for(Model::Engines::iterator eit = model->engines().begin(); eit != model->engines().end(); eit++) { - Engine *engine = (*eit); + if ((entity->type() == core::Entity::Controlable) && entity->model()->engines().size()) { - if (!engine->flare()) engine->engine_flare = 1; + size_t trail_texure = Textures::load("bitmaps/fx/circle00"); - // load engine texture - std::stringstream flarename; - flarename << "bitmaps/fx/flare" << std::setfill('0') << std::setw(2) << engine->flare(); - engine->render_texture = Textures::load(flarename.str()); + 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<core::EntityControlable *>(entity), true); + state_particles.push_back(p); + } } - + for (Model::Flares::iterator flit = model->flares().begin(); flit != model->flares().end(); flit++) { Flare *flare = (*flit); @@ -58,6 +67,7 @@ RenderExt::RenderExt(core::Entity *entity) : core::Extension(core::Extension::Re flarename << "bitmaps/fx/flare" << std::setfill('0') << std::setw(2) << flare->flare(); flare->render_texture = Textures::load(flarename.str()); } + } else if (entity->type() == core::Entity::Globe) { core::EntityGlobe *globe = static_cast<core::EntityGlobe *>(entity); @@ -74,6 +84,10 @@ RenderExt::RenderExt(core::Entity *entity) : core::Extension(core::Extension::Re RenderExt::~RenderExt() { + for (Particles::iterator it = state_particles.begin(); it != state_particles.end(); it++) { + delete (*it); + } + state_particles.clear(); } void RenderExt::frame(float elapsed) |