Project::OSiRiON - Git repositories
Project::OSiRiON
News . About . Screenshots . Downloads . Forum . Wiki . Tracker . Git
summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/model/classes.cc6
-rw-r--r--src/model/classes.h13
-rw-r--r--src/model/map.cc9
-rw-r--r--src/render/particles.cc71
-rw-r--r--src/render/particles.h4
5 files changed, 62 insertions, 41 deletions
diff --git a/src/model/classes.cc b/src/model/classes.cc
index b601a42..07a36f3 100644
--- a/src/model/classes.cc
+++ b/src/model/classes.cc
@@ -54,6 +54,7 @@ Particles::Particles() :
{
particles_entity = false;
particles_engine = false;
+ particles_radius = 0.0f;
}
Particles::Particles(math::Vector3f const & location) :
@@ -64,6 +65,11 @@ Particles::Particles(math::Vector3f const & location) :
Particles::~Particles()
{}
+void Particles::set_radius(const float radius)
+{
+ particles_radius = radius;
+}
+
/* ---- class Dock ------------------------------------------------- */
Dock::Dock()
diff --git a/src/model/classes.h b/src/model/classes.h
index f853da8..c6bf3b1 100644
--- a/src/model/classes.h
+++ b/src/model/classes.h
@@ -154,6 +154,8 @@ public:
Particles(const math::Vector3f & location);
~Particles();
+ void set_radius(const float radius);
+
inline const math::Vector3f & location() const
{
return particles_location;
@@ -169,21 +171,28 @@ public:
return particles_script;
}
- inline bool entity() const
+ inline const bool entity() const
{
return particles_entity;
}
- inline bool engine() const
+ inline const bool engine() const
{
return particles_engine;
}
+
+ inline const float radius() const
+ {
+ return particles_radius;
+ }
std::string particles_script;
math::Vector3f particles_location;
math::Axis particles_axis;
bool particles_entity;
bool particles_engine;
+
+ float particles_radius;
};
/* ---- class Dock ------------------------------------------------- */
diff --git a/src/model/map.cc b/src/model/map.cc
index 955410f..a59d2ff 100644
--- a/src/model/map.cc
+++ b/src/model/map.cc
@@ -836,6 +836,7 @@ Model * Map::load(std::string const &name)
unsigned int u;
float angle;
+ float r;
while (mapfile.getline()) {
@@ -1094,10 +1095,10 @@ Model * Map::load(std::string const &name)
} else if (mapfile.got_key_int("spawnflags", u)) {
particles->particles_entity = spawnflag_isset(u, 2);
particles->particles_engine = spawnflag_isset(u, 4);
-/*
- } else if (mapfile.got_key_float("radius", particles->particles_radius)) {
- particles->particles_radius *= LIGHTSCALE;
-*/
+
+ } else if (mapfile.got_key_float("radius", r)) {
+ particles->set_radius(r * LIGHTSCALE);
+
} else if (mapfile.got_key()) {
mapfile.unknown_key();
}
diff --git a/src/render/particles.cc b/src/render/particles.cc
index 71ec26b..07a8dc1 100644
--- a/src/render/particles.cc
+++ b/src/render/particles.cc
@@ -188,8 +188,13 @@ ParticleSystem::ParticleSystem(ParticleScript *script, core::Entity *entity, mod
if (particlesystem_script) {
particlesystem_texture = Textures::load("textures/" + particlesystem_script->texture());
+
+ // map entity radius overrules script value
+ if (modelclass->radius())
+ particlesystem_radius = modelclass->radius();
+ else
+ particlesystem_radius = particlesystem_script->radius();
- radius = particlesystem_script->radius();
color.assign(particlesystem_script->color());
}
@@ -310,7 +315,7 @@ void Jet::draw(float elapsed) {
}
f *= f;
- float radius = particlesystem_script->radius() * f;
+ float radius = particlesystem_radius * f;
color.a = f * particlesystem_script->alpha();
gl::color(color);
@@ -369,7 +374,7 @@ void Spray::draw(float elapsed) {
}
f *= f;
- float radius = particlesystem_script->radius() * f;
+ float radius = particlesystem_radius * f;
color.a = f * particlesystem_script->alpha();
gl::color(color);
@@ -437,9 +442,9 @@ void Trail::draw(float elapsed) {
gl::color(color);
glTexCoord2f(0,1);
- gl::vertex((*first)->location() + (*first)->axis().left() * particlesystem_script->radius() * fp);
+ gl::vertex((*first)->location() + (*first)->axis().left() * particlesystem_radius * fp);
glTexCoord2f(1,1);
- gl::vertex((*first)->location() - (*first)->axis().left() * particlesystem_script->radius() * fp);
+ gl::vertex((*first)->location() - (*first)->axis().left() * particlesystem_radius * fp);
Stats::quads++;
}
@@ -462,17 +467,17 @@ void Trail::draw(float elapsed) {
gl::color(color);
glTexCoord2f(1,0);
- gl::vertex((*first)->location() - (*first)->axis().left() * particlesystem_script->radius() * fp);
+ gl::vertex((*first)->location() - (*first)->axis().left() * particlesystem_radius * fp);
glTexCoord2f(0,0);
- gl::vertex((*first)->location() + (*first)->axis().left() * particlesystem_script->radius() * fp);
+ gl::vertex((*first)->location() + (*first)->axis().left() * particlesystem_radius * fp);
color.a = f * particlesystem_script->alpha();
gl::color(color);
glTexCoord2f(0,1);
- gl::vertex((*next)->location() + (*next)->axis().left() * particlesystem_script->radius() * f);
+ gl::vertex((*next)->location() + (*next)->axis().left() * particlesystem_radius * f);
glTexCoord2f(1,1);
- gl::vertex((*next)->location() - (*next)->axis().left() * particlesystem_script->radius() * f);
+ gl::vertex((*next)->location() - (*next)->axis().left() * particlesystem_radius * f);
Stats::quads++;
@@ -533,9 +538,9 @@ void Flame::draw(float elapsed) {
color.a = fp * particlesystem_script->alpha();
gl::color(color);
glTexCoord2f(0,tp);
- gl::vertex((*next)->location() + (*next)->axis().left() * particlesystem_script->radius() * fp);
+ gl::vertex((*next)->location() + (*next)->axis().left() * particlesystem_radius * fp);
glTexCoord2f(1,tp);
- gl::vertex((*next)->location() + (*next)->axis().up() * particlesystem_script->radius() * fp);
+ gl::vertex((*next)->location() + (*next)->axis().up() * particlesystem_radius * fp);
Stats::quads++;
color.a = 0;
@@ -548,9 +553,9 @@ void Flame::draw(float elapsed) {
color.a = fp * particlesystem_script->alpha();
gl::color(color);
glTexCoord2f(0,tp);
- gl::vertex((*next)->location() + (*next)->axis().up() * particlesystem_script->radius() * fp);
+ gl::vertex((*next)->location() + (*next)->axis().up() * particlesystem_radius * fp);
glTexCoord2f(1,tp);
- gl::vertex((*next)->location() - (*next)->axis().left() * particlesystem_script->radius() * fp);
+ gl::vertex((*next)->location() - (*next)->axis().left() * particlesystem_radius * fp);
Stats::quads++;
color.a = 0;
@@ -563,9 +568,9 @@ void Flame::draw(float elapsed) {
color.a = fp * particlesystem_script->alpha();
gl::color(color);
glTexCoord2f(0,tp);
- gl::vertex((*next)->location() + (*next)->axis().left() * particlesystem_script->radius() * fp);
+ gl::vertex((*next)->location() + (*next)->axis().left() * particlesystem_radius * fp);
glTexCoord2f(1,tp);
- gl::vertex((*next)->location() - (*next)->axis().up() * particlesystem_script->radius() * fp);
+ gl::vertex((*next)->location() - (*next)->axis().up() * particlesystem_radius * fp);
Stats::quads++;
color.a = 0;
@@ -578,9 +583,9 @@ void Flame::draw(float elapsed) {
color.a = fp * particlesystem_script->alpha();
gl::color(color);
glTexCoord2f(0,tp);
- gl::vertex((*next)->location() - (*next)->axis().up() * particlesystem_script->radius() * fp);
+ gl::vertex((*next)->location() - (*next)->axis().up() * particlesystem_radius * fp);
glTexCoord2f(1,tp);
- gl::vertex((*next)->location() - (*next)->axis().left() * particlesystem_script->radius() * fp);
+ gl::vertex((*next)->location() - (*next)->axis().left() * particlesystem_radius * fp);
Stats::quads++;
}
@@ -601,61 +606,61 @@ void Flame::draw(float elapsed) {
color.a = fp * particlesystem_script->alpha();
gl::color(color);
glTexCoord2f(1,tp);
- gl::vertex((*first)->location() + (*first)->axis().up() * particlesystem_script->radius() * fp);
+ gl::vertex((*first)->location() + (*first)->axis().up() * particlesystem_radius * fp);
glTexCoord2f(0,tp);
- gl::vertex((*first)->location() + (*first)->axis().left() * particlesystem_script->radius() * fp);
+ gl::vertex((*first)->location() + (*first)->axis().left() * particlesystem_radius * fp);
color.a = f * particlesystem_script->alpha();
gl::color(color);
glTexCoord2f(0,t);
- gl::vertex((*next)->location() + (*next)->axis().left() * particlesystem_script->radius() * f);
+ gl::vertex((*next)->location() + (*next)->axis().left() * particlesystem_radius * f);
glTexCoord2f(1,t);
- gl::vertex((*next)->location() + (*next)->axis().up() * particlesystem_script->radius() * f);
+ gl::vertex((*next)->location() + (*next)->axis().up() * particlesystem_radius * f);
Stats::quads++;
color.a = fp * particlesystem_script->alpha();
gl::color(color);
glTexCoord2f(1,tp);
- gl::vertex((*first)->location() - (*first)->axis().left() * particlesystem_script->radius() * fp);
+ gl::vertex((*first)->location() - (*first)->axis().left() * particlesystem_radius * fp);
glTexCoord2f(0,tp);
- gl::vertex((*first)->location() + (*first)->axis().up() * particlesystem_script->radius() * fp);
+ gl::vertex((*first)->location() + (*first)->axis().up() * particlesystem_radius * fp);
color.a = f * particlesystem_script->alpha();
gl::color(color);
glTexCoord2f(0,t);
- gl::vertex((*next)->location() + (*next)->axis().up() * particlesystem_script->radius() * f);
+ gl::vertex((*next)->location() + (*next)->axis().up() * particlesystem_radius * f);
glTexCoord2f(1,t);
- gl::vertex((*next)->location() - (*next)->axis().left() * particlesystem_script->radius() * f);
+ gl::vertex((*next)->location() - (*next)->axis().left() * particlesystem_radius * f);
Stats::quads++;
color.a = fp * particlesystem_script->alpha();
gl::color(color);
glTexCoord2f(1,tp);
- gl::vertex((*first)->location() - (*first)->axis().up() * particlesystem_script->radius() * fp);
+ gl::vertex((*first)->location() - (*first)->axis().up() * particlesystem_radius * fp);
glTexCoord2f(0,tp);
- gl::vertex((*first)->location() + (*first)->axis().left() * particlesystem_script->radius() * fp);
+ gl::vertex((*first)->location() + (*first)->axis().left() * particlesystem_radius * fp);
color.a = f * particlesystem_script->alpha();
gl::color(color);
glTexCoord2f(0,t);
- gl::vertex((*next)->location() + (*next)->axis().left() * particlesystem_script->radius() * f);
+ gl::vertex((*next)->location() + (*next)->axis().left() * particlesystem_radius * f);
glTexCoord2f(1,t);
- gl::vertex((*next)->location() - (*next)->axis().up() * particlesystem_script->radius() * f);
+ gl::vertex((*next)->location() - (*next)->axis().up() * particlesystem_radius * f);
Stats::quads++;
color.a = fp * particlesystem_script->alpha();
gl::color(color);
glTexCoord2f(1,tp);
- gl::vertex((*first)->location() - (*first)->axis().left() * particlesystem_script->radius() * fp);
+ gl::vertex((*first)->location() - (*first)->axis().left() * particlesystem_radius * fp);
glTexCoord2f(0,tp);
- gl::vertex((*first)->location() - (*first)->axis().up() * particlesystem_script->radius() * fp);
+ gl::vertex((*first)->location() - (*first)->axis().up() * particlesystem_radius * fp);
color.a = f * particlesystem_script->alpha();
gl::color(color);
glTexCoord2f(0,t);
- gl::vertex((*next)->location() - (*next)->axis().up() * particlesystem_script->radius() * f);
+ gl::vertex((*next)->location() - (*next)->axis().up() * particlesystem_radius * f);
glTexCoord2f(1,t);
- gl::vertex((*next)->location() - (*next)->axis().left() * particlesystem_script->radius() * f);
+ gl::vertex((*next)->location() - (*next)->axis().left() * particlesystem_radius * f);
Stats::quads++;
first = next;
diff --git a/src/render/particles.h b/src/render/particles.h
index 88789a5..096833c 100644
--- a/src/render/particles.h
+++ b/src/render/particles.h
@@ -111,7 +111,7 @@ public:
/// axis of the particle system within the entity
inline const math::Axis &axis() const { return particlesystem_axis; }
-
+
virtual void draw(float elapsed);
void set_timeout(float timeout);
@@ -141,7 +141,7 @@ protected:
math::Vector3f ejector_location;
bool ejector_active;
- float radius;
+ float particlesystem_radius;
float now;
math::Color color;