|
From: <tre...@us...> - 2007-11-22 14:42:22
|
Revision: 598
http://ogoglio.svn.sourceforge.net/ogoglio/?rev=598&view=rev
Author: trevorolio
Date: 2007-11-22 06:42:26 -0800 (Thu, 22 Nov 2007)
Log Message:
-----------
In the interest of satisfying the legions of gamers who freak out when camera controls aren't exactly like WoW, the scroll wheel now zooms the camera.
Modified Paths:
--------------
maven/trunk/ogoglio-common/src/main/java/com/ogoglio/viewer/j3d/J3DCameraMotionBehavior.java
maven/trunk/ogoglio-common/src/main/java/com/ogoglio/viewer/j3d/J3DRenderer.java
maven/trunk/ogoglio-common/src/main/java/com/ogoglio/viewer/j3d/MotionInputHandler.java
Modified: maven/trunk/ogoglio-common/src/main/java/com/ogoglio/viewer/j3d/J3DCameraMotionBehavior.java
===================================================================
--- maven/trunk/ogoglio-common/src/main/java/com/ogoglio/viewer/j3d/J3DCameraMotionBehavior.java 2007-11-21 17:17:05 UTC (rev 597)
+++ maven/trunk/ogoglio-common/src/main/java/com/ogoglio/viewer/j3d/J3DCameraMotionBehavior.java 2007-11-22 14:42:26 UTC (rev 598)
@@ -47,9 +47,7 @@
mouseEvent = (MouseEvent) events[events.length - 1];
doProcess(mouseEvent);
}
- }
-
- else if (wakeup instanceof WakeupOnBehaviorPost) {
+ } else if (wakeup instanceof WakeupOnBehaviorPost) {
while (true) {
synchronized (mouseq) {
if (mouseq.isEmpty())
@@ -74,8 +72,9 @@
processMouseEvent(evt);
+ id = evt.getID();
+
if (((buttonPress) && ((flags & MANUAL_WAKEUP) == 0)) || ((wakeUp) && ((flags & MANUAL_WAKEUP) != 0))) {
- id = evt.getID();
if ((id == MouseEvent.MOUSE_DRAGGED) && !evt.isAltDown() && !evt.isMetaDown()) {
x = evt.getX();
Modified: maven/trunk/ogoglio-common/src/main/java/com/ogoglio/viewer/j3d/J3DRenderer.java
===================================================================
--- maven/trunk/ogoglio-common/src/main/java/com/ogoglio/viewer/j3d/J3DRenderer.java 2007-11-21 17:17:05 UTC (rev 597)
+++ maven/trunk/ogoglio-common/src/main/java/com/ogoglio/viewer/j3d/J3DRenderer.java 2007-11-22 14:42:26 UTC (rev 598)
@@ -16,8 +16,9 @@
import java.awt.Canvas;
import java.awt.GraphicsConfigTemplate;
import java.awt.GraphicsConfiguration;
-import java.awt.GraphicsDevice;
import java.awt.GraphicsEnvironment;
+import java.awt.event.MouseWheelEvent;
+import java.awt.event.MouseWheelListener;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.Enumeration;
@@ -701,6 +702,7 @@
motionHandler = new MotionInputHandler(this, renderable, userInputListener);
getCanvas().addMouseListener(motionHandler);
getCanvas().addMouseMotionListener(motionHandler);
+ getCanvas().addMouseWheelListener(motionHandler);
} else if (!offScreen) {
String displayName = user.getUsername();
if (displayName.startsWith(WebConstants.GUEST_COOKIE_PREFIX)) {
Modified: maven/trunk/ogoglio-common/src/main/java/com/ogoglio/viewer/j3d/MotionInputHandler.java
===================================================================
--- maven/trunk/ogoglio-common/src/main/java/com/ogoglio/viewer/j3d/MotionInputHandler.java 2007-11-21 17:17:05 UTC (rev 597)
+++ maven/trunk/ogoglio-common/src/main/java/com/ogoglio/viewer/j3d/MotionInputHandler.java 2007-11-22 14:42:26 UTC (rev 598)
@@ -18,10 +18,13 @@
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
+import java.awt.event.MouseWheelEvent;
+import java.awt.event.MouseWheelListener;
import javax.media.j3d.Transform3D;
import javax.vecmath.Point3d;
import javax.vecmath.Quat4d;
+import javax.vecmath.Vector3d;
import com.ogoglio.client.UserInputListener;
import com.ogoglio.client.model.SplinePath;
@@ -36,8 +39,7 @@
import com.ogoglio.viewer.render.ThingRenderable;
import com.ogoglio.viewer.render.UserRenderable;
-public class MotionInputHandler implements MouseMotionListener, MouseListener {
- //TODO right now we only support arrow key based walking, strafing and turning
+public class MotionInputHandler implements MouseMotionListener, MouseListener, MouseWheelListener {
public double maxRadiansPerSecond = Math.PI / 60;
@@ -53,20 +55,30 @@
private boolean turnRight = false;
- private float cameraTilt = 0;
+ private float cameraZoom = 0;
private boolean dirty = false;
private boolean cameraDirty = false;
+ private boolean cameraReset = false;
+
private Renderer renderer = null;
private UserInputListener userInputListener = null;
private UserRenderable userRenderable = null;
- private boolean cameraReset = false;
+ private Transform3D currentTransform = new Transform3D();
+ private Transform3D transformX = new Transform3D();
+
+ private Transform3D orientationTransform = new Transform3D();
+
+ private Quat4d orientation = new Quat4d();
+
+ private Vector3d translation = new Vector3d();
+
public MotionInputHandler(Renderer renderer, UserRenderable userGroup, UserInputListener inputListener) {
ArgumentUtils.assertNotNull(renderer);
this.renderer = renderer;
@@ -88,7 +100,23 @@
renderer.getCamera().setToDefaultLocation();
return;
}
- renderer.getCamera().setRotation(cameraTilt, 0, 0);
+ J3DCamera camera = ((J3DCamera) renderer.getCamera());
+ camera.getTransformGroup().getTransform(currentTransform);
+ currentTransform.get(translation);
+ translation.y = 0;
+ if (translation.length() > 1 || cameraZoom > 0) {
+ currentTransform.get(orientation);
+ translation.x = 0;
+ translation.y = 0;
+ translation.z = 0;
+ orientationTransform.set(orientation, translation, 1);
+ translation.z = cameraZoom;
+ orientationTransform.transform(translation);
+ System.out.println("z " + translation.z);
+ transformX.set(translation);
+ currentTransform.mul(transformX, currentTransform);
+ camera.getTransformGroup().setTransform(currentTransform);
+ }
}
if (!dirty) {
@@ -157,15 +185,10 @@
dirty = true;
strafeRight = true;
}
- } else if (e.getKeyCode() == KeyEvent.VK_PAGE_UP) {
- cameraDirty = true;
- cameraTilt += 0.1;
- } else if (e.getKeyCode() == KeyEvent.VK_PAGE_DOWN) {
- cameraDirty = true;
- cameraTilt -= 0.1;
} else if (e.getKeyCode() == KeyEvent.VK_ESCAPE) {
cameraDirty = true;
cameraReset = true;
+ cameraZoom = 0;
} else if (e.getKeyCode() == KeyEvent.VK_ENTER || e.getKeyCode() == KeyEvent.VK_SLASH) {
if (moveBackward || moveForward || strafeLeft || strafeRight) {
dirty = true;
@@ -255,7 +278,6 @@
private void clickedOnAThing(MouseEvent event, Thing thing, String name, Point3d intersection) {
userInputListener.mouseClickedThing(thing, name, intersection);
-
}
public void mouseDragged(MouseEvent e) {
@@ -328,4 +350,15 @@
reevaluate();
}
}
+
+ public void mouseWheelMoved(MouseWheelEvent event) {
+ int zoomDelta = event.getWheelRotation();
+ System.out.println("Zoom " + zoomDelta);
+ if (zoomDelta == 0) {
+ return;
+ }
+ cameraDirty = true;
+ cameraZoom = zoomDelta > 0 ? 1 : -1;
+ reevaluate();
+ }
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|