diff options
Diffstat (limited to 'src/RaceTrack.java')
-rw-r--r-- | src/RaceTrack.java | 50 |
1 files changed, 39 insertions, 11 deletions
diff --git a/src/RaceTrack.java b/src/RaceTrack.java index d2bcaa5..3865b3d 100644 --- a/src/RaceTrack.java +++ b/src/RaceTrack.java @@ -42,14 +42,13 @@ class RaceTrack extends BetterBase { * Array with control points for the custom track. */ private Vector[] controlPointsCustomTrack; + private final RobotRace race; /** * Constructs the race track, sets up display lists. */ - public RaceTrack() { - // code goes here ... - - + public RaceTrack(RobotRace race) { + this.race = race; } /** @@ -148,29 +147,58 @@ class RaceTrack extends BetterBase { Vector norm_inside = norm_outside.scale(-1).normalized(); Vector norm_up = Vector.Z; - gl.glBegin(GL_QUAD_STRIP); + // Set brick texture + race.getBrickTexture().bind(gl); + + // Draw track walls + gl.glBegin(GL_QUADS); setColor(Color.RED); // inside bottom glNormal(norm_inside); + gl.glTexCoord2f(0, 0); glVertex(point_E); + gl.glTexCoord2f(1, 0); glVertex(point_F); setColor(Colors.PALE_TURQOISE); // inside top glNormal(norm_up.add(norm_inside).normalized()); - glVertex(point_A); + gl.glTexCoord2f(1, 1); glVertex(point_C); - // outside top - glNormal(norm_up.add(norm_outside).normalized()); - glVertex(point_B); - glVertex(point_D); - setColor(Color.RED); + gl.glTexCoord2f(0, 1); + glVertex(point_A); + // outside bottom glNormal(norm_outside); + gl.glTexCoord2f(0, 0); glVertex(point_G); + gl.glTexCoord2f(1, 0); glVertex(point_H); + // outside top + glNormal(norm_up.add(norm_outside).normalized()); + gl.glTexCoord2f(1, 1); + glVertex(point_D); + gl.glTexCoord2f(0, 1); + glVertex(point_B); + gl.glEnd(); + + race.getTrackTexture().bind(gl); + + // Draw track itself + gl.glBegin(GL_QUADS); + glNormal(Vector.Z); + gl.glTexCoord2f(0, 0); + glVertex(point_A); + gl.glTexCoord2f(1, 0); + glVertex(point_C); + gl.glTexCoord2f(1, 1); + glVertex(point_D); + gl.glTexCoord2f(0, 1); + glVertex(point_B); gl.glEnd(); } + unbindTextures(); + // save points for next draw round point_E = point_F; point_A = point_C; |