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.java45
1 files changed, 44 insertions, 1 deletions
diff --git a/src/tesseract/World.java b/src/tesseract/World.java
index 7da6058..f11f48e 100644
--- a/src/tesseract/World.java
+++ b/src/tesseract/World.java
@@ -5,8 +5,10 @@ import java.util.LinkedList;
import java.util.List;
import javax.media.j3d.BoundingBox;
+import javax.media.j3d.BoundingLeaf;
import javax.media.j3d.BoundingSphere;
import javax.media.j3d.BranchGroup;
+import javax.media.j3d.Canvas3D;
import javax.media.j3d.DirectionalLight;
import javax.media.j3d.IndexedLineArray;
import javax.media.j3d.Light;
@@ -22,6 +24,10 @@ import tesseract.objects.CollisionInfo;
import tesseract.objects.Forceable;
import tesseract.objects.PhysicalObject;
+import com.sun.j3d.utils.picking.PickTool;
+import com.sun.j3d.utils.picking.behaviors.PickTranslateBehavior;
+import com.sun.j3d.utils.picking.behaviors.PickZoomBehavior;
+
/**
* Model of the 3D world.
*
@@ -34,6 +40,11 @@ public class World {
private BranchGroup myScene;
/**
+ * Pickable Objects.
+ */
+ private BranchGroup myPickableObjects;
+
+ /**
* Bounding box of the world.
*/
private BoundingBox myVirtualWorldBounds;
@@ -87,8 +98,19 @@ public class World {
myScene = new BranchGroup();
myScene.setCapability(BranchGroup.ALLOW_CHILDREN_EXTEND);
myScene.setCapability(BranchGroup.ALLOW_CHILDREN_WRITE);
+
+ BoundingLeaf originLeaf = new BoundingLeaf(new BoundingSphere());
+ myScene.addChild(originLeaf);
+
myScene.addChild(createVirtualWorldBoundsShape());
+
+ myPickableObjects = new BranchGroup();
+ myPickableObjects.setCapability(BranchGroup.ALLOW_CHILDREN_EXTEND);
+ myPickableObjects.setCapability(BranchGroup.ALLOW_CHILDREN_WRITE);
+ //myScene.addChild(myPickableObjects);
+
addLights();
+
myScene.compile();
}
@@ -205,12 +227,33 @@ public class World {
}
/**
+ * Setup mouse behaviors in the world.
+ *
+ * @param canvas The canvas to tie the events to.
+ */
+ public void setupMouseBehaviors(final Canvas3D canvas) {
+ //BranchGroup pickables = new BranchGroup();
+ myPickableObjects.addChild(new PickTranslateBehavior(myPickableObjects, canvas, myVirtualWorldBounds, PickTool.GEOMETRY));
+ myPickableObjects.addChild(new PickZoomBehavior(myPickableObjects, canvas, myVirtualWorldBounds, PickTool.GEOMETRY));
+ myScene.addChild(myPickableObjects);
+
+ /*myPickableObjects.addChild(
+ new PickTranslateBehavior(myPickableObjects, canvas,
+ myVirtualWorldBounds, PickTool.GEOMETRY));
+
+ myPickableObjects.addChild(
+ new PickZoomBehavior(myPickableObjects, canvas,
+ myVirtualWorldBounds, PickTool.GEOMETRY));
+ */
+ }
+
+ /**
* Add a new object to the world.
*
* @param obj The object to add
*/
public void addObject(final PhysicalObject obj) {
- myScene.addChild(obj.getGroup());
+ myPickableObjects.addChild(obj.getGroup());
myObjects.add(obj);
if (obj instanceof Collidable) {