summaryrefslogtreecommitdiff
path: root/src/tesseract/World.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/tesseract/World.java')
-rw-r--r--src/tesseract/World.java21
1 files changed, 20 insertions, 1 deletions
diff --git a/src/tesseract/World.java b/src/tesseract/World.java
index 470990b..7da6058 100644
--- a/src/tesseract/World.java
+++ b/src/tesseract/World.java
@@ -17,6 +17,8 @@ import javax.vecmath.Point3d;
import javax.vecmath.Vector3f;
import tesseract.forces.Force;
+import tesseract.objects.Collidable;
+import tesseract.objects.CollisionInfo;
import tesseract.objects.Forceable;
import tesseract.objects.PhysicalObject;
@@ -46,6 +48,11 @@ public class World {
*/
private List<Force> myForces;
+ /**
+ * Objects that can be collided into, a subset of myObjects.
+ */
+ private List<Collidable> myCollidables;
+
//private List<ParticleEmitter> emitters;
//private boolean enableEmitters;
@@ -74,6 +81,7 @@ public class World {
myForces = new LinkedList<Force>();
myObjects = new LinkedList<PhysicalObject>();
+ myCollidables = new LinkedList<Collidable>();
// TODO: Should this go here?
myScene = new BranchGroup();
@@ -162,7 +170,14 @@ public class World {
children.addAll(newChildren);
}
- // TODO: Eventually check for collisions here.
+ // Check for collisions
+ for (Collidable collidable : myCollidables) {
+ if (collidable.hasCollision(obj)) {
+ // Resolve the collision
+ CollisionInfo ci = collidable.calculateCollision(obj);
+ collidable.resolveCollision(obj, ci);
+ }
+ }
// If it leaves the bounds of the world, DESTROY IT
if (!obj.isExisting()
@@ -197,6 +212,10 @@ public class World {
public void addObject(final PhysicalObject obj) {
myScene.addChild(obj.getGroup());
myObjects.add(obj);
+
+ if (obj instanceof Collidable) {
+ myCollidables.add((Collidable) obj);
+ }
}
/**