summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Wu <lekensteyn@gmail.com>2013-12-20 12:44:28 +0100
committerPeter Wu <lekensteyn@gmail.com>2013-12-20 12:44:28 +0100
commitf0558a20c1674459bbd46a965672983fc91a7278 (patch)
treecbc1e96a44889a64199c7c9c050d8cf9b3da6f82
parent6b8a19646b51ed3c19e52607a120025ff395abf1 (diff)
download2iv60-robots-f0558a20c1674459bbd46a965672983fc91a7278.tar.gz
Attempt to implement First Person viewing mode
-rw-r--r--src/Camera.java29
1 files changed, 28 insertions, 1 deletions
diff --git a/src/Camera.java b/src/Camera.java
index 57c6d70..694633d 100644
--- a/src/Camera.java
+++ b/src/Camera.java
@@ -146,7 +146,21 @@ class Camera {
* on the first person mode.
*/
private void setFirstPersonMode() {
- // code goes here ...
+ /**
+ * First person mode: look from the slowest robot forward.
+ */
+ Robot focus = getSlowestRobot();
+
+ // trivial: looks from the robot POV.
+ eye = track.getPointForLane(focus.getTimePos(), focus.getLane());
+
+ // The question is similar to question 2b of the intermediate test
+ // http://www.win.tue.nl/~vanwijk/2IV60/2IV60_test_exam_161213_answers.pdf
+ // C(t) = E(t) + P'(t) (P'(t) is the tangent vector).
+ center = center.add(track.getTangent(focus.getTimePos()));
+
+ // trivial: look forward, so up vector points up.
+ up = Vector.Z;
}
/**
@@ -163,4 +177,17 @@ class Camera {
}
return selected;
}
+
+ /**
+ * Returns the robots which has the lowest Global State Time position.
+ */
+ private Robot getSlowestRobot() {
+ Robot slowest = robots[0];
+ for (Robot robot : robots) {
+ if (robot.getTimePos() < slowest.getTimePos()) {
+ slowest = robot;
+ }
+ }
+ return slowest;
+ }
}