From c1096615afac1175221057319598fbea7c28cf14 Mon Sep 17 00:00:00 2001
From: Nick Gasson <nick@nickg.me.uk>
Date: Fri, 1 May 2009 19:04:19 +0100
Subject: [PATCH] Reduce track size

---
 include/TrackCommon.hpp |  5 +++
 src/Game.cpp            |  4 +-
 src/TrackCommon.cpp     | 83 +++++++++++++++++++++--------------------
 src/Train.cpp           |  2 +
 4 files changed, 52 insertions(+), 42 deletions(-)

diff --git a/include/TrackCommon.hpp b/include/TrackCommon.hpp
index 14c9cb8..9bb89a2 100644
--- a/include/TrackCommon.hpp
+++ b/include/TrackCommon.hpp
@@ -24,4 +24,9 @@ void renderStraightRail();
 void renderCurvedTrack(int baseRadius, double startAngle, double endAngle);
 void transformToOrigin(int baseRadius, double startAngle);
 
+// Track constants
+namespace track {
+   const double RAIL_HEIGHT = 0.1;
+}
+
 #endif
diff --git a/src/Game.cpp b/src/Game.cpp
index abf1407..a23a32b 100644
--- a/src/Game.cpp
+++ b/src/Game.cpp
@@ -105,10 +105,10 @@ void Game::onKeyDown(SDLKey aKey)
       myMovement.x = speed;
       break;
    case SDLK_UP:
-      myMovement.y = -yspeed;
+      myMovement.y = yspeed;
       break;
    case SDLK_DOWN:
-      myMovement.y = yspeed;
+      myMovement.y = -yspeed;
       break;
    case SDLK_b:
       myTrain->controller()->actOn(BRAKE_TOGGLE);
diff --git a/src/TrackCommon.cpp b/src/TrackCommon.cpp
index e5909d8..c3e6ce8 100644
--- a/src/TrackCommon.cpp
+++ b/src/TrackCommon.cpp
@@ -23,12 +23,13 @@
 
 #include <GL/gl.h>
 
-namespace Track {
+namespace track {
    const double railWidth = 0.05;
-   const double railHeight = 0.1;
-   const double gauge = 0.7;
+   const double gauge = 0.5;
 
    const int sleepersPerUnit = 4;
+
+   const float SLEEPER_LENGTH = 0.8;
 }
 
 // Draw a sleeper in the current maxtrix location
@@ -46,40 +47,42 @@ void renderSleeper()
    glColor3d(0.5, 0.3, 0.0);
    glBegin(GL_QUADS);
 
+   const double r = track::SLEEPER_LENGTH / 2.0;
+
    // Top
    glNormal3d(0.0, 1.0, 0.0);  // Up
-   glVertex3d(-sleeperOff, sleeperDepth, -0.5);
-   glVertex3d(-sleeperOff, sleeperDepth, 0.5);
-   glVertex3d(sleeperOff, sleeperDepth, 0.5);
-   glVertex3d(sleeperOff, sleeperDepth, -0.5);
+   glVertex3d(-sleeperOff, sleeperDepth, -r);
+   glVertex3d(-sleeperOff, sleeperDepth, r);
+   glVertex3d(sleeperOff, sleeperDepth, r);
+   glVertex3d(sleeperOff, sleeperDepth, -r);
 
    // Side 1
    glNormal3d(1.0, 0.0, 0.0);  // +ve x
-   glVertex3d(sleeperOff, sleeperDepth, -0.5);
-   glVertex3d(sleeperOff, 0.0, -0.5);
-   glVertex3d(-sleeperOff, 0.0, -0.5);
-   glVertex3d(-sleeperOff, sleeperDepth, -0.5);
+   glVertex3d(sleeperOff, sleeperDepth, -r);
+   glVertex3d(sleeperOff, 0.0, -r);
+   glVertex3d(-sleeperOff, 0.0, -r);
+   glVertex3d(-sleeperOff, sleeperDepth, -r);
 
    // Side 2
    glNormal3d(-1.0, 0.0, 0.0);  // -ve x
-   glVertex3d(-sleeperOff, sleeperDepth, 0.5);
-   glVertex3d(-sleeperOff, 0.0, 0.5);
-   glVertex3d(sleeperOff, 0.0, 0.5);
-   glVertex3d(sleeperOff, sleeperDepth, 0.5);
+   glVertex3d(-sleeperOff, sleeperDepth, r);
+   glVertex3d(-sleeperOff, 0.0, r);
+   glVertex3d(sleeperOff, 0.0, r);
+   glVertex3d(sleeperOff, sleeperDepth, r);
 
    // Front
    glNormal3d(0.0, 0.0, 1.0);  // +ve z
-   glVertex3d(sleeperOff, 0.0, 0.5);
-   glVertex3d(sleeperOff, 0.0, -0.5);
-   glVertex3d(sleeperOff, sleeperDepth, -0.5);
-   glVertex3d(sleeperOff, sleeperDepth, 0.5);
+   glVertex3d(sleeperOff, 0.0, r);
+   glVertex3d(sleeperOff, 0.0, -r);
+   glVertex3d(sleeperOff, sleeperDepth, -r);
+   glVertex3d(sleeperOff, sleeperDepth, r);
 
    // Back
    glNormal3d(0.0, 0.0, -1.0);  // -ve z
-   glVertex3d(-sleeperOff, sleeperDepth, 0.5);
-   glVertex3d(-sleeperOff, sleeperDepth, -0.5);
-   glVertex3d(-sleeperOff, 0.0, -0.5);
-   glVertex3d(-sleeperOff, 0.0, 0.5);
+   glVertex3d(-sleeperOff, sleeperDepth, r);
+   glVertex3d(-sleeperOff, sleeperDepth, -r);
+   glVertex3d(-sleeperOff, 0.0, -r);
+   glVertex3d(-sleeperOff, 0.0, r);
    
    
    glEnd();  // glBegin(GL_QUADS)
@@ -91,30 +94,30 @@ void renderSleeper()
 static void renderOneRail()
 {
    glPushMatrix();
-   glTranslated(-Track::railWidth/2.0, 0.0, 0.0);
+   glTranslated(-track::railWidth/2.0, 0.0, 0.0);
    
    glBegin(GL_QUADS);
    
    // Top side
    glNormal3d(0.0, 1.0, 0.0);
-   glVertex3d(0.0, Track::railHeight, 0.0);
-   glVertex3d(0.0, Track::railHeight, 1.0);
-   glVertex3d(Track::railWidth, Track::railHeight, 1.0);
-   glVertex3d(Track::railWidth, Track::railHeight, 0.0);
+   glVertex3d(0.0, track::RAIL_HEIGHT, 0.0);
+   glVertex3d(0.0, track::RAIL_HEIGHT, 1.0);
+   glVertex3d(track::railWidth, track::RAIL_HEIGHT, 1.0);
+   glVertex3d(track::railWidth, track::RAIL_HEIGHT, 0.0);
    
    // Outer side
    glNormal3d(-1.0, 0.0, 0.0);
-   glVertex3d(0.0, Track::railHeight, 0.0);
+   glVertex3d(0.0, track::RAIL_HEIGHT, 0.0);
    glVertex3d(0.0, 0.0, 0.0);
    glVertex3d(0.0, 0.0, 1.0);
-   glVertex3d(0.0, Track::railHeight, 1.0);
+   glVertex3d(0.0, track::RAIL_HEIGHT, 1.0);
    
    // Inner side
    glNormal3d(1.0, 0.0, 0.0);
-   glVertex3d(Track::railWidth, Track::railHeight, 1.0);
-   glVertex3d(Track::railWidth, 0.0, 1.0);
-   glVertex3d(Track::railWidth, 0.0, 0.0);
-   glVertex3d(Track::railWidth, Track::railHeight, 0.0);
+   glVertex3d(track::railWidth, track::RAIL_HEIGHT, 1.0);
+   glVertex3d(track::railWidth, 0.0, 1.0);
+   glVertex3d(track::railWidth, 0.0, 0.0);
+   glVertex3d(track::railWidth, track::RAIL_HEIGHT, 0.0);
    
    glEnd();
    glPopMatrix();
@@ -125,10 +128,10 @@ void renderStraightRail()
    glPushMatrix();
    glColor3d(0.7, 0.7, 0.7);
 
-   glTranslated(-Track::gauge/2.0, 0.0, -0.5);
+   glTranslated(-track::gauge/2.0, 0.0, -0.5);
    renderOneRail();
    
-   glTranslated(Track::gauge, 0.0, 0.0);
+   glTranslated(track::gauge, 0.0, 0.0);
    renderOneRail();
 
    glPopMatrix();
@@ -170,10 +173,10 @@ enum RailType {
 static void makeCurveRail(double baseRadius, double startAngle,
                           double finishAngle, RailType type)
 {
-   const double edgeWidth = (1 - Track::gauge - Track::railWidth)/2.0;
+   const double edgeWidth = (1 - track::gauge - track::railWidth)/2.0;
    const double R = baseRadius - edgeWidth
-      - (type == OuterRail ? 0 : Track::gauge);
-   const double r = R - Track::railWidth;
+      - (type == OuterRail ? 0 : track::gauge);
+   const double r = R - track::railWidth;
 
    const double step = 0.1;
 
@@ -278,7 +281,7 @@ void renderCurvedTrack(int baseRadius, double startAngle, double endAngle)
    makeCurveRail(baseRadiusD, startAngle, endAngle, InnerRail);
 
    const double length = (endAngle - startAngle) * baseRadius;
-   const int numSleepers = length * Track::sleepersPerUnit;
+   const int numSleepers = length * track::sleepersPerUnit;
    const double sleeperAngle =
       ((endAngle - startAngle) / numSleepers) * (180.0 / M_PI);
 
diff --git a/src/Train.cpp b/src/Train.cpp
index cc0f48a..405e4ad 100644
--- a/src/Train.cpp
+++ b/src/Train.cpp
@@ -18,6 +18,7 @@
 #include "ITrain.hpp"
 #include "IRollingStock.hpp"
 #include "ILogger.hpp"
+#include "TrackCommon.hpp"
 
 #include <stdexcept>
 
@@ -107,6 +108,7 @@ void Train::render() const
    glPushMatrix();
 
    myTransformer(mySegmentDelta);
+   glTranslatef(0.0f, track::RAIL_HEIGHT, 0.0f);
    myEngine->render();
 
    glPopMatrix();
-- 
2.39.5