summaryrefslogtreecommitdiffhomepage
path: root/nGenEx/Scene.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'nGenEx/Scene.cpp')
-rw-r--r--nGenEx/Scene.cpp320
1 files changed, 160 insertions, 160 deletions
diff --git a/nGenEx/Scene.cpp b/nGenEx/Scene.cpp
index 26ef58e..ce18c95 100644
--- a/nGenEx/Scene.cpp
+++ b/nGenEx/Scene.cpp
@@ -1,15 +1,15 @@
/* Project nGenEx
- Destroyer Studios LLC
- Copyright © 1997-2004. All Rights Reserved.
+ Destroyer Studios LLC
+ Copyright © 1997-2004. All Rights Reserved.
- SUBSYSTEM: nGenEx.lib
- FILE: Scene.cpp
- AUTHOR: John DiCamillo
+ SUBSYSTEM: nGenEx.lib
+ FILE: Scene.cpp
+ AUTHOR: John DiCamillo
- OVERVIEW
- ========
- A 3D Scene
+ OVERVIEW
+ ========
+ A 3D Scene
*/
#include "MemDebug.h"
@@ -26,12 +26,12 @@ Scene::Scene()
Scene::~Scene()
{
- background.destroy();
- foreground.destroy();
- graphics.destroy();
- sprites.destroy();
+ background.destroy();
+ foreground.destroy();
+ graphics.destroy();
+ sprites.destroy();
- lights.destroy();
+ lights.destroy();
}
// +--------------------------------------------------------------------+
@@ -39,21 +39,21 @@ Scene::~Scene()
void
Scene::AddBackground(Graphic* g)
{
- if (g) {
- if (!background.contains(g))
- background.append(g);
+ if (g) {
+ if (!background.contains(g))
+ background.append(g);
- g->SetScene(this);
- }
+ g->SetScene(this);
+ }
}
void
Scene::DelBackground(Graphic* g)
{
- if (g) {
- background.remove(g);
- g->SetScene(0);
- }
+ if (g) {
+ background.remove(g);
+ g->SetScene(0);
+ }
}
// +--------------------------------------------------------------------+
@@ -61,21 +61,21 @@ Scene::DelBackground(Graphic* g)
void
Scene::AddForeground(Graphic* g)
{
- if (g) {
- if (!foreground.contains(g))
- foreground.append(g);
+ if (g) {
+ if (!foreground.contains(g))
+ foreground.append(g);
- g->SetScene(this);
- }
+ g->SetScene(this);
+ }
}
void
Scene::DelForeground(Graphic* g)
{
- if (g) {
- foreground.remove(g);
- g->SetScene(0);
- }
+ if (g) {
+ foreground.remove(g);
+ g->SetScene(0);
+ }
}
// +--------------------------------------------------------------------+
@@ -83,25 +83,25 @@ Scene::DelForeground(Graphic* g)
void
Scene::AddGraphic(Graphic* g)
{
- if (g) {
- if (!graphics.contains(g))
- graphics.append(g);
+ if (g) {
+ if (!graphics.contains(g))
+ graphics.append(g);
- g->SetScene(this);
- }
+ g->SetScene(this);
+ }
}
void
Scene::DelGraphic(Graphic* g)
{
- if (g) {
- graphics.remove(g) || // it's gotta be in here somewhere!
- foreground.remove(g) || // use the logical-or operator to early
- sprites.remove(g) || // out when we find it...
- background.remove(g);
-
- g->SetScene(0);
- }
+ if (g) {
+ graphics.remove(g) || // it's gotta be in here somewhere!
+ foreground.remove(g) || // use the logical-or operator to early
+ sprites.remove(g) || // out when we find it...
+ background.remove(g);
+
+ g->SetScene(0);
+ }
}
// +--------------------------------------------------------------------+
@@ -109,21 +109,21 @@ Scene::DelGraphic(Graphic* g)
void
Scene::AddSprite(Graphic* g)
{
- if (g) {
- if (!sprites.contains(g))
- sprites.append(g);
+ if (g) {
+ if (!sprites.contains(g))
+ sprites.append(g);
- g->SetScene(this);
- }
+ g->SetScene(this);
+ }
}
void
Scene::DelSprite(Graphic* g)
{
- if (g) {
- sprites.remove(g);
- g->SetScene(0);
- }
+ if (g) {
+ sprites.remove(g);
+ g->SetScene(0);
+ }
}
// +--------------------------------------------------------------------+
@@ -131,20 +131,20 @@ Scene::DelSprite(Graphic* g)
void
Scene::AddLight(Light* l)
{
- if (l) {
- if (!lights.contains(l))
- lights.append(l);
- l->SetScene(this);
- }
+ if (l) {
+ if (!lights.contains(l))
+ lights.append(l);
+ l->SetScene(this);
+ }
}
void
Scene::DelLight(Light* l)
{
- if (l) {
- lights.remove(l);
- l->SetScene(0);
- }
+ if (l) {
+ lights.remove(l);
+ l->SetScene(0);
+ }
}
// +--------------------------------------------------------------------+
@@ -152,32 +152,32 @@ Scene::DelLight(Light* l)
void
Scene::Collect()
{
- ListIter<Graphic> iter = graphics;
-
- while (++iter) {
- Graphic* g = iter.value();
- if (g->Life() == 0) {
- delete iter.removeItem();
- }
- }
-
- iter.attach(sprites);
-
- while (++iter) {
- Graphic* g = iter.value();
- if (g->Life() == 0) {
- delete iter.removeItem();
- }
- }
-
- ListIter<Light> iter1 = lights;
-
- while (++iter1) {
- Light* l = iter1.value();
- if (l->Life() == 0) {
- delete iter1.removeItem();
- }
- }
+ ListIter<Graphic> iter = graphics;
+
+ while (++iter) {
+ Graphic* g = iter.value();
+ if (g->Life() == 0) {
+ delete iter.removeItem();
+ }
+ }
+
+ iter.attach(sprites);
+
+ while (++iter) {
+ Graphic* g = iter.value();
+ if (g->Life() == 0) {
+ delete iter.removeItem();
+ }
+ }
+
+ ListIter<Light> iter1 = lights;
+
+ while (++iter1) {
+ Light* l = iter1.value();
+ if (l->Life() == 0) {
+ delete iter1.removeItem();
+ }
+ }
}
@@ -186,76 +186,76 @@ Scene::Collect()
bool
Scene::IsLightObscured(const Point& obj_pos, const Point& light_pos, double obj_radius, Point* impact_point) const
{
- Point dir = light_pos - obj_pos;
- double len = dir.Normalize();
-
- Scene* pThis = (Scene*) this; // cast-away const
- Graphic* g = 0;
- bool obscured = false;
-
- ListIter<Graphic> g_iter = pThis->graphics;
- while (++g_iter && !obscured) {
- g = g_iter.value();
-
- if (g->CastsShadow() && !g->Hidden() && !g->IsInfinite()) {
- double gdist = (g->Location() - obj_pos).length();
- if (gdist > 0.1 && // different than object being obscured
- g->Radius() > obj_radius && // larger than object being obscured
- (g->Radius()*400)/gdist > 10) { // projects to a resonable size
-
- Point delta = (g->Location() - light_pos);
-
- if (delta.length() > g->Radius() / 100) { // not the object that is emitting the light
- Point impact;
- obscured = g->CheckRayIntersection(obj_pos, dir, len, impact, false) ? true : false;
-
- if (impact_point)
- *impact_point = impact;
- }
- }
-
- else if (obj_radius < 0 && gdist < 0.1) { // special case for camera (needed for cockpits)
- Point delta = (g->Location() - light_pos);
-
- if (delta.length() > g->Radius() / 100) { // not the object that is emitting the light
- Point impact;
- obscured = g->CheckRayIntersection(obj_pos, dir, len, impact, false) ? true : false;
- }
- }
- }
- }
-
- g_iter.attach(pThis->foreground);
- while (++g_iter && !obscured) {
- g = g_iter.value();
-
- if (g->CastsShadow() && !g->Hidden()) {
- double gdist = (g->Location() - obj_pos).length();
- if (gdist > 0.1 && // different than object being obscured
- g->Radius() > obj_radius && // larger than object being obscured
- (g->Radius()*400)/gdist > 10) { // projects to a resonable size
-
- Point delta = (g->Location() - light_pos);
-
- if (delta.length() > g->Radius() / 100) { // not the object that is emitting the light
- Point impact;
- obscured = g->CheckRayIntersection(obj_pos, dir, len, impact, false) ? true : false;
-
- if (impact_point)
- *impact_point = impact;
- }
- }
-
- else if (obj_radius < 0 && gdist < 0.1) { // special case for camera (needed for cockpits)
- Point delta = (g->Location() - light_pos);
-
- if (delta.length() > g->Radius() / 100) { // not the object that is emitting the light
- Point impact;
- obscured = g->CheckRayIntersection(obj_pos, dir, len, impact, false) ? true : false;
- }
- }
- }
- }
-
- return obscured;
+ Point dir = light_pos - obj_pos;
+ double len = dir.Normalize();
+
+ Scene* pThis = (Scene*) this; // cast-away const
+ Graphic* g = 0;
+ bool obscured = false;
+
+ ListIter<Graphic> g_iter = pThis->graphics;
+ while (++g_iter && !obscured) {
+ g = g_iter.value();
+
+ if (g->CastsShadow() && !g->Hidden() && !g->IsInfinite()) {
+ double gdist = (g->Location() - obj_pos).length();
+ if (gdist > 0.1 && // different than object being obscured
+ g->Radius() > obj_radius && // larger than object being obscured
+ (g->Radius()*400)/gdist > 10) { // projects to a resonable size
+
+ Point delta = (g->Location() - light_pos);
+
+ if (delta.length() > g->Radius() / 100) { // not the object that is emitting the light
+ Point impact;
+ obscured = g->CheckRayIntersection(obj_pos, dir, len, impact, false) ? true : false;
+
+ if (impact_point)
+ *impact_point = impact;
+ }
+ }
+
+ else if (obj_radius < 0 && gdist < 0.1) { // special case for camera (needed for cockpits)
+ Point delta = (g->Location() - light_pos);
+
+ if (delta.length() > g->Radius() / 100) { // not the object that is emitting the light
+ Point impact;
+ obscured = g->CheckRayIntersection(obj_pos, dir, len, impact, false) ? true : false;
+ }
+ }
+ }
+ }
+
+ g_iter.attach(pThis->foreground);
+ while (++g_iter && !obscured) {
+ g = g_iter.value();
+
+ if (g->CastsShadow() && !g->Hidden()) {
+ double gdist = (g->Location() - obj_pos).length();
+ if (gdist > 0.1 && // different than object being obscured
+ g->Radius() > obj_radius && // larger than object being obscured
+ (g->Radius()*400)/gdist > 10) { // projects to a resonable size
+
+ Point delta = (g->Location() - light_pos);
+
+ if (delta.length() > g->Radius() / 100) { // not the object that is emitting the light
+ Point impact;
+ obscured = g->CheckRayIntersection(obj_pos, dir, len, impact, false) ? true : false;
+
+ if (impact_point)
+ *impact_point = impact;
+ }
+ }
+
+ else if (obj_radius < 0 && gdist < 0.1) { // special case for camera (needed for cockpits)
+ Point delta = (g->Location() - light_pos);
+
+ if (delta.length() > g->Radius() / 100) { // not the object that is emitting the light
+ Point impact;
+ obscured = g->CheckRayIntersection(obj_pos, dir, len, impact, false) ? true : false;
+ }
+ }
+ }
+ }
+
+ return obscured;
}