From 315a8c2dff9b76ac5e1ebbef265f13ac19d65e3d Mon Sep 17 00:00:00 2001 From: Stijn Buys Date: Sun, 16 Nov 2008 13:53:44 +0000 Subject: engine trails --- src/render/renderext.cc | 32 +++++++++++++++++++++++--------- 1 file changed, 23 insertions(+), 9 deletions(-) (limited to 'src/render/renderext.cc') 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(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(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) -- cgit v1.2.3