From 0ce5a249d8b8aabc98f3dccee78cced779018594 Mon Sep 17 00:00:00 2001 From: Peter Wu Date: Fri, 17 Jan 2014 17:30:18 +0100 Subject: Hide debug track behind B key --- src/RaceTrack.java | 53 ++++++++++++++++++++++++++++++----------------------- src/RobotRace.java | 7 ++++++- 2 files changed, 36 insertions(+), 24 deletions(-) diff --git a/src/RaceTrack.java b/src/RaceTrack.java index 9d2c42b..8958c3d 100644 --- a/src/RaceTrack.java +++ b/src/RaceTrack.java @@ -31,12 +31,12 @@ class RaceTrack extends BetterBase { /** * Array with control points for the L-track. */ - private Vector[] controlPointsLTrack; + private final Vector[] controlPointsLTrack; /** * Array with control points for the C-track. */ - private Vector[] controlPointsCTrack; + private final Vector[] controlPointsCTrack; /** * Array with control points for the custom track. @@ -45,9 +45,10 @@ class RaceTrack extends BetterBase { private Vector[] selectedControlPoints; private final RobotRace race; /** - * Debug option: set to true to show control points. + * Debug option: set to true to show control points and center line for + * Bézier spline tracks. */ - private static final boolean drawControlPoints = true; + boolean debugBezierTracks = false; /** * Constructs the race track, sets up display lists. @@ -380,25 +381,29 @@ class RaceTrack extends BetterBase { point_B = point_D; point_G = point_H; } + + // debugging purposes: show track center and control points + if (debugBezierTracks && selectedControlPoints != null) { + drawCenterLineTrack(selectedControlPoints); + } } /** - * Draw a closed race track. + * Draw a closed race track with control points. * * @param pts Control points. */ - private void drawTrack(Vector[] pts) { - if (pts == null) { - System.err.println("not implemented points"); - return; - } - + private void drawCenterLineTrack(Vector[] pts) { + assert pts != null; assert pts.length % 3 == 0 : "Multiple of three control points required"; int number_of_segments = pts.length / 3; // number of "u" units per segment double segment_size = 1.0 / number_of_segments; + // put lines and dots above track + gl.glTranslated(0, 0, 1); + gl.glLineWidth(5); gl.glBegin(GL_LINE_STRIP); for (double i = 0; i <= SEGMENTS; ++i) { @@ -409,24 +414,26 @@ class RaceTrack extends BetterBase { // scale the part to 0.0 to 0.1 segment_u *= number_of_segments; - assert segment_u >= 0.0 && segment_u <= 1.0 : "Segment out of bounds"; + segment_u = min(segment_u, 1.0); + //assert segment_u >= 0.0 && segment_u <= 1.0 : "Segment out of bounds: " + segment_u; Vector bezierPt = getCubicBezierPnt(segment_u, pts, start); - gl.glColor4d(1.0, 0.0, segment_number, .8); + gl.glColor4d(1.0, 0.0, segment_number % 2 == 0 ? 1 : 0, .8); glVertex(bezierPt); } gl.glEnd(); - if (drawControlPoints) { - // draw control points - gl.glPointSize(10); - gl.glBegin(GL_POINTS); - for (int i = 0; i < pts.length; i++) { - double color = ((double) i / 3.0); - gl.glColor3d(0.0, color, 1.0); - glVertex(pts[i]); - } - gl.glEnd(); + // draw control points + gl.glPointSize(10); + gl.glBegin(GL_POINTS); + for (int i = 0; i < pts.length; i++) { + double color = ((double) i / 3.0); + gl.glColor3d(0.0, color, 1.0); + glVertex(pts[i]); } + gl.glEnd(); + + // restore position + gl.glTranslated(0, 0, -1); } /** diff --git a/src/RobotRace.java b/src/RobotRace.java index 40f0146..806a1f2 100644 --- a/src/RobotRace.java +++ b/src/RobotRace.java @@ -88,7 +88,7 @@ public class RobotRace extends Base { /** * Instance of the race track. */ - private final RaceTrack raceTrack; + final RaceTrack raceTrack; /** * Instance of the terrain. @@ -696,6 +696,11 @@ public class RobotRace extends Base { robotRace.mainWindow.updateElements(); } return true; + case KeyEvent.VK_B: + boolean enabled = !robotRace.raceTrack.debugBezierTracks; + robotRace.raceTrack.debugBezierTracks = enabled; + System.err.println("Show Bézier debug track: " + enabled); + return true; default: return false; } -- cgit v1.2.1