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-23 22:13:40 +0000
committerStijn Buys <ingar@osirion.org>2008-11-23 22:13:40 +0000
commit2e93e755a4f4631419ba0eee26660a5638a7a7c6 (patch)
tree38e0e0327c16cecaab0600493d4c6bb78b70caf3 /src/render/renderext.cc
parentd01664f17503d52d4be1c31e099065da0d38d7f3 (diff)
particle systems
Diffstat (limited to 'src/render/renderext.cc')
-rw-r--r--src/render/renderext.cc45
1 files changed, 24 insertions, 21 deletions
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<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);
+ 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<core::EntityGlobe *>(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();