diff options
author | Peter Wu <lekensteyn@gmail.com> | 2013-12-20 12:44:28 +0100 |
---|---|---|
committer | Peter Wu <lekensteyn@gmail.com> | 2013-12-20 12:44:28 +0100 |
commit | f0558a20c1674459bbd46a965672983fc91a7278 (patch) | |
tree | cbc1e96a44889a64199c7c9c050d8cf9b3da6f82 | |
parent | 6b8a19646b51ed3c19e52607a120025ff395abf1 (diff) | |
download | 2iv60-robots-f0558a20c1674459bbd46a965672983fc91a7278.tar.gz |
Attempt to implement First Person viewing mode
-rw-r--r-- | src/Camera.java | 29 |
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; + } } |