|
From: <tre...@us...> - 2007-11-21 17:16:54
|
Revision: 595
http://ogoglio.svn.sourceforge.net/ogoglio/?rev=595&view=rev
Author: trevorolio
Date: 2007-11-21 09:16:47 -0800 (Wed, 21 Nov 2007)
Log Message:
-----------
Sadly, this breaks with idea of using the applet only for 3D view because browsers can't reliably pass focus between DOM text field and java panel, which we tried to make work for the movement/chat cycle but it failed and made it unacceptably slow to switch between the two actions. So, I added the chat history and command line to the applet and rewhacked all of the relevant HTML pages.
While moving in the 3D view press enter or / to move to the command line. Enter or escape will switch focus back to 3D view.
Also, fixed the bug in which losing focus while moving would make you lose control, endlessly walking or turning. Now the 3D view catched the focus change and stops any active movement.
Modified Paths:
--------------
maven/trunk/ogoglio-common/src/main/java/com/ogoglio/client/SpaceClient.java
maven/trunk/ogoglio-common/src/main/java/com/ogoglio/client/UserInputListener.java
maven/trunk/ogoglio-common/src/main/java/com/ogoglio/viewer/j3d/MotionInputHandler.java
maven/trunk/ogoglio-common/src/main/java/com/ogoglio/viewer/j3d/PhysicsBehavior.java
maven/trunk/ogoglio-common/src/test/java/com/ogoglio/loadtest/Bot.java
Modified: maven/trunk/ogoglio-common/src/main/java/com/ogoglio/client/SpaceClient.java
===================================================================
--- maven/trunk/ogoglio-common/src/main/java/com/ogoglio/client/SpaceClient.java 2007-11-21 17:16:32 UTC (rev 594)
+++ maven/trunk/ogoglio-common/src/main/java/com/ogoglio/client/SpaceClient.java 2007-11-21 17:16:47 UTC (rev 595)
@@ -295,8 +295,8 @@
sendSpaceEvent(event);
}
- public void focusCommandField() {
- listener.receivedCommandFocusRequest();
+ public void focusCommandField(String preloadedText) {
+ listener.receivedCommandFocusRequest(preloadedText);
}
private void sendSpaceEvent(SpaceEvent event) {
@@ -746,7 +746,7 @@
public void disconnected();
- public void receivedCommandFocusRequest();
+ public void receivedCommandFocusRequest(String preloadedText);
}
public void cleanup() {
Modified: maven/trunk/ogoglio-common/src/main/java/com/ogoglio/client/UserInputListener.java
===================================================================
--- maven/trunk/ogoglio-common/src/main/java/com/ogoglio/client/UserInputListener.java 2007-11-21 17:16:32 UTC (rev 594)
+++ maven/trunk/ogoglio-common/src/main/java/com/ogoglio/client/UserInputListener.java 2007-11-21 17:16:47 UTC (rev 595)
@@ -22,7 +22,7 @@
public void mouseClickedPage(Page page, Point3d intersection);
- public void focusCommandField();
+ public void focusCommandField(String preloadedText);
public void mouseContextClickedThing(Thing thing, String name, int x, int y);
}
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:16:32 UTC (rev 594)
+++ maven/trunk/ogoglio-common/src/main/java/com/ogoglio/viewer/j3d/MotionInputHandler.java 2007-11-21 17:16:47 UTC (rev 595)
@@ -55,8 +55,6 @@
private float cameraTilt = 0;
- private boolean run = false;
-
private boolean dirty = false;
private boolean cameraDirty = false;
@@ -130,16 +128,14 @@
// called from within PhysicsBehavior
public void keyPressed(KeyEvent e) {
if (e.getKeyCode() == KeyEvent.VK_UP || e.getKeyCode() == KeyEvent.VK_W) {
- if (moveForward == false || run == true) {
+ if (moveForward == false) {
dirty = true;
moveForward = true;
- run = false;
}
} else if (e.getKeyCode() == KeyEvent.VK_DOWN || e.getKeyCode() == KeyEvent.VK_S) {
- if (moveBackward == false || run == true) {
+ if (moveBackward == false) {
dirty = true;
moveBackward = true;
- run = false;
}
} else if (e.getKeyCode() == KeyEvent.VK_LEFT || e.getKeyCode() == KeyEvent.VK_Q) {
if (turnLeft == false) {
@@ -170,6 +166,16 @@
} else if (e.getKeyCode() == KeyEvent.VK_ESCAPE) {
cameraDirty = true;
cameraReset = true;
+ } else if (e.getKeyCode() == KeyEvent.VK_ENTER || e.getKeyCode() == KeyEvent.VK_SLASH) {
+ if (moveBackward || moveForward || strafeLeft || strafeRight) {
+ dirty = true;
+ moveBackward = false;
+ moveForward = false;
+ strafeLeft = false;
+ strafeRight = false;
+ }
+ String preloadedText = e.getKeyCode() == KeyEvent.VK_SLASH ? "/" : null;
+ userInputListener.focusCommandField(preloadedText);
}
reevaluate();
}
@@ -211,13 +217,6 @@
}
public void keyTyped(KeyEvent e) {
- if (e.getKeyChar() == 'r') {
- dirty = true;
- run = !run;
- } else if (e.getKeyChar() == '\n') {
- userInputListener.focusCommandField();
- }
- reevaluate();
}
public void mouseClicked(MouseEvent event) {
@@ -247,7 +246,6 @@
} else if (clickTarget.getRenderable() instanceof DoorRenderable) {
userInputListener.mouseClickedDoor(((DoorRenderable) clickTarget.getRenderable()).getDoor(), null, clickTarget.getIntersection());
} else if (clickTarget.getRenderable() instanceof PageRenderable) {
- System.out.println("Clicked page: " + ((PageRenderable) clickTarget.getRenderable()).getPage());
userInputListener.mouseClickedPage(((PageRenderable) clickTarget.getRenderable()).getPage(), clickTarget.getIntersection());
} else {
throw new IllegalStateException("Clicked on a type of renderable we don't understand");
@@ -286,8 +284,8 @@
ShapeRenderable shape = (ShapeRenderable) clickTarget.getRenderable();
renderable = (ThingRenderable) shape.getRenderable();
name = shape.getName();
- } else if(clickTarget.getRenderable() instanceof PageRenderable){
- PageRenderable pageRenderable = (PageRenderable)clickTarget.getRenderable();
+ } else if (clickTarget.getRenderable() instanceof PageRenderable) {
+ PageRenderable pageRenderable = (PageRenderable) clickTarget.getRenderable();
renderable = pageRenderable.getThingRenderable();
} else {
return;
@@ -319,4 +317,15 @@
userInputListener.mouseContextClickedThing(renderable.getThing(), name, event.getX(), event.getY());
}
}
+
+ public void focusChanged() {
+ if (moveBackward || moveForward || strafeLeft || strafeRight) {
+ dirty = true;
+ moveBackward = false;
+ moveForward = false;
+ strafeLeft = false;
+ strafeRight = false;
+ reevaluate();
+ }
+ }
}
Modified: maven/trunk/ogoglio-common/src/main/java/com/ogoglio/viewer/j3d/PhysicsBehavior.java
===================================================================
--- maven/trunk/ogoglio-common/src/main/java/com/ogoglio/viewer/j3d/PhysicsBehavior.java 2007-11-21 17:16:32 UTC (rev 594)
+++ maven/trunk/ogoglio-common/src/main/java/com/ogoglio/viewer/j3d/PhysicsBehavior.java 2007-11-21 17:16:47 UTC (rev 595)
@@ -15,6 +15,7 @@
package com.ogoglio.viewer.j3d;
import java.awt.AWTEvent;
+import java.awt.event.FocusEvent;
import java.awt.event.KeyEvent;
import java.util.Enumeration;
import java.util.Vector;
@@ -39,13 +40,15 @@
private WakeupOnAWTEvent keyEventCriteria = new WakeupOnAWTEvent(AWTEvent.KEY_EVENT_MASK);
+ private WakeupOnAWTEvent focusEventCriteria = new WakeupOnAWTEvent(AWTEvent.FOCUS_EVENT_MASK);
+
private WakeupOnElapsedTime elapsedTimeCriteria = new WakeupOnElapsedTime(50);
- private WakeupCriterion[] activeCrits = { elapsedFramesCriteria, keyEventCriteria };
+ private WakeupCriterion[] activeCrits = { elapsedFramesCriteria, keyEventCriteria, focusEventCriteria };
private WakeupOr activeWakeupCriteria = new WakeupOr(activeCrits);
- private WakeupCriterion[] dormantCrits = { elapsedTimeCriteria, keyEventCriteria };
+ private WakeupCriterion[] dormantCrits = { elapsedTimeCriteria, keyEventCriteria, focusEventCriteria };
private WakeupOr dormantWakeupCriteria = new WakeupOr(dormantCrits);
@@ -56,7 +59,7 @@
private RenderableMotion[] workingMotions = new RenderableMotion[2048];
private boolean cleaned = false;
-
+
public PhysicsBehavior(J3DRenderer renderer) {
this.renderer = renderer;
}
@@ -86,12 +89,14 @@
public void processStimulus(Enumeration criteria) {
while (criteria.hasMoreElements()) {
WakeupCriterion criterion = (WakeupCriterion) criteria.nextElement();
- if (criterion == keyEventCriteria) {
- try {
+ try {
+ if (criterion == keyEventCriteria) {
handleKeyEventCriterion();
- } catch (Throwable e) {
- e.printStackTrace();
+ } else if (criterion == focusEventCriteria && renderer.getMotionInputHandler() != null) {
+ renderer.getMotionInputHandler().focusChanged();
}
+ } catch (Throwable e) {
+ e.printStackTrace();
}
}
workingMotions = (RenderableMotion[]) renderableMotions.toArray(workingMotions);
@@ -107,7 +112,7 @@
if (!cleaned && !renderer.isOffScreen() && renderableMotions.size() > 0) {
wakeupOn(activeWakeupCriteria);
- } else if(!cleaned){
+ } else if (!cleaned) {
wakeupOn(dormantWakeupCriteria);
}
}
@@ -119,7 +124,7 @@
removeMotion(motions[i]);
}
}
-
+
private void removeMotion(RenderableMotion motion) {
renderableMotions.remove(motion);
motion.cleanup();
@@ -141,7 +146,7 @@
}
public void stopRenderableMotion(Renderable renderable) {
- if(cleaned) {
+ if (cleaned) {
return;
}
RenderableMotion motion = getMotion(renderable);
Modified: maven/trunk/ogoglio-common/src/test/java/com/ogoglio/loadtest/Bot.java
===================================================================
--- maven/trunk/ogoglio-common/src/test/java/com/ogoglio/loadtest/Bot.java 2007-11-21 17:16:32 UTC (rev 594)
+++ maven/trunk/ogoglio-common/src/test/java/com/ogoglio/loadtest/Bot.java 2007-11-21 17:16:47 UTC (rev 595)
@@ -58,7 +58,7 @@
public void receivedLink(String displayName, String link) {
}
- public void receivedCommandFocusRequest() {
+ public void receivedCommandFocusRequest(String preloadedText) {
}
public void receivedBrowserMessage(long sourceThingID, String message) {
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|