Project::OSiRiON - Git repositories
Project::OSiRiON
News . About . Screenshots . Downloads . Forum . Wiki . Tracker . Git
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStijn Buys <ingar@osirion.org>2008-11-16 13:53:44 +0000
committerStijn Buys <ingar@osirion.org>2008-11-16 13:53:44 +0000
commit315a8c2dff9b76ac5e1ebbef265f13ac19d65e3d (patch)
treedec6de0bcf7f19dd95b7121f27b185da67cee4e2 /src/render/renderext.cc
parent28ba97bdd8fb6ca352dc49dba01a66bd155ad523 (diff)
engine trails
Diffstat (limited to 'src/render/renderext.cc')
-rw-r--r--src/render/renderext.cc32
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)