Project::OSiRiON - Git repositories
Project::OSiRiON
News . About . Screenshots . Downloads . Forum . Wiki . Tracker . Git
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'src/render/renderext.cc')
-rw-r--r--src/render/renderext.cc55
1 files changed, 33 insertions, 22 deletions
diff --git a/src/render/renderext.cc b/src/render/renderext.cc
index b0462d4..b743686 100644
--- a/src/render/renderext.cc
+++ b/src/render/renderext.cc
@@ -41,7 +41,7 @@ RenderExt::RenderExt(core::Entity *entity) : core::Extension(core::Extension::Re
// load light texture
std::stringstream flarename;
flarename << "textures/fx/flare" << std::setfill('0') << std::setw(2) << light->flare();
- light->render_texture = Textures::load(flarename.str());
+ light->set_texture(Textures::load(flarename.str()));
}
for (model::Model::Flares::iterator flit = model->flares().begin(); flit != model->flares().end(); flit++) {
@@ -50,7 +50,7 @@ RenderExt::RenderExt(core::Entity *entity) : core::Extension(core::Extension::Re
// load flare texture
std::stringstream flarename;
flarename << "textures/fx/flare" << std::setfill('0') << std::setw(2) << flare->flare();
- flare->render_texture = Textures::load(flarename.str());
+ flare->set_texture(Textures::load(flarename.str()));
}
for(model::Model::ParticleSystems::iterator pit = model->particles().begin(); pit != model->particles().end(); pit++) {
@@ -103,6 +103,10 @@ void RenderExt::frame(float elapsed)
state_visible = entity()->visible();
state_detailvisible = false;
+ state_behind = false;
+
+ if (!state_visible)
+ return;
if ((entity()->type() == core::Entity::Controlable)) {
if (static_cast<core::EntityDynamic *>(entity())->state() == core::Entity::Docked) {
@@ -111,37 +115,44 @@ void RenderExt::frame(float elapsed)
}
}
- if (state_visible && entity()->model()) {
+ if (!entity()->model())
+ return;
- if (distance() < core::range::fxdistance) {
- // entity within detail range
- state_visible = true;
- state_detailvisible = true;
+ if (distance() < core::range::fxdistance) {
+ // entity within detail range
+ state_visible = true;
+ state_detailvisible = true;
+
+ } else if (distance() < core::range::maxdistance) {
+
+ // funky radius factor
+ float r = entity()->model()->radius();
+ math::clamp(r, entity()->model()->radius(), core::range::maxdistance / core::range::fxdistance);
- } else if (distance() < core::range::maxvisible) {
+ if (distance() < core::range::fxdistance * r) {
// entity within drawing distance, outside detail range
state_visible = true;
state_detailvisible = false;
- } else if (distance() < core::range::maxdistance) {
-
- if ((entity()->type() == core::Entity::Controlable)) {
- // controlable entity out of range
- state_visible = false;
- state_detailvisible = false;
- } else {
- // entity within drawing distance, outside detail range
- state_visible = true;
- state_detailvisible = false;
-
- }
} else {
- // entity out of range
- state_visible = false;
+ // entity within drawing distance, outside detail range
+ state_visible = true;
state_detailvisible = false;
}
+
+ } else {
+ // entity out of range
+ state_visible = false;
+ state_detailvisible = false;
+ return;
}
+ if (math::dotproduct(Camera::axis().forward(), entity()->location() + Camera::axis().forward() * entity()->radius() - Camera::eye()) < 0.0f) {
+ state_behind = true;
+ }
+
+
+
}
} // namespace render