Dependencies:   mbed

Revision:
25:31761087a83f
Parent:
18:5fcb0514fb70
Child:
26:f1d3b7e31091
--- a/Graphics/Graphics.cpp	Sat Mar 28 15:09:46 2020 +0000
+++ b/Graphics/Graphics.cpp	Wed Apr 29 10:53:21 2020 +0000
@@ -263,7 +263,7 @@
 // It is a LARGE function but it reduces the clutter in main.cpp
 // This is run once every frame.
 
-void Graphics::Draw_Map(Point_2D translation, int angle, float squish, Line_2D *Track_Lines, Line_2D *Track_Dotted_Lines, Line_2D *Track_Walls, Point_2D *Track_Flags, Triangle_2D *Track_Boost_Plates, Map_Data map_info, int car_type, Point_2D ghost_position, N5110 &LCD)
+void Graphics::Draw_Map(Point_2D translation, int angle, float squish, float horizon_factor, Line_2D *Track_Lines, Line_2D *Track_Dotted_Lines, Line_2D *Track_Walls, Point_2D *Track_Flags, Triangle_2D *Track_Boost_Plates, Map_Data map_info, int car_type, Point_2D ghost_position, N5110 &LCD)
 {
     //Variable declaration
     enum cars {Basic, Offroad, Drifter, Sportscar, Racecar, Stupid};
@@ -282,6 +282,9 @@
         //Rotation
         Track_Lines_Transformed[i].from = Rotate_Point(Track_Lines_Transformed[i].from, angle);
         Track_Lines_Transformed[i].to = Rotate_Point(Track_Lines_Transformed[i].to, angle);
+        //Horizon
+        Track_Lines_Transformed[i].from = Horizon_Point(Track_Lines_Transformed[i].from, horizon_factor);
+        Track_Lines_Transformed[i].to = Horizon_Point(Track_Lines_Transformed[i].to, horizon_factor);
         //Squish
         Track_Lines_Transformed[i].from = Squish_Point(Track_Lines_Transformed[i].from, squish);
         Track_Lines_Transformed[i].to = Squish_Point(Track_Lines_Transformed[i].to, squish);
@@ -296,6 +299,9 @@
         //Rotation
         Track_Dotted_Lines_Transformed[i].from = Rotate_Point(Track_Dotted_Lines_Transformed[i].from, angle);
         Track_Dotted_Lines_Transformed[i].to = Rotate_Point(Track_Dotted_Lines_Transformed[i].to, angle);
+        //Horizon
+        Track_Dotted_Lines_Transformed[i].from = Horizon_Point(Track_Dotted_Lines_Transformed[i].from, horizon_factor);
+        Track_Dotted_Lines_Transformed[i].to = Horizon_Point(Track_Dotted_Lines_Transformed[i].to, horizon_factor);
         //Squish
         Track_Dotted_Lines_Transformed[i].from = Squish_Point(Track_Dotted_Lines_Transformed[i].from, squish);
         Track_Dotted_Lines_Transformed[i].to = Squish_Point(Track_Dotted_Lines_Transformed[i].to, squish);
@@ -308,6 +314,8 @@
         Transformed_Flags[i] = Translate_Point(Transformed_Flags[i], Round(translation.x), Round(translation.y));
         //Rotation
         Transformed_Flags[i] = Rotate_Point(Transformed_Flags[i], angle);
+        //Horizon
+        Transformed_Flags[i] = Horizon_Point(Transformed_Flags[i], horizon_factor);
         //Squish
         Transformed_Flags[i] = Squish_Point(Transformed_Flags[i], squish);
     }
@@ -321,6 +329,9 @@
         //Rotation
         Transformed_Walls[i].from = Rotate_Point(Transformed_Walls[i].from, angle);
         Transformed_Walls[i].to = Rotate_Point(Transformed_Walls[i].to, angle);
+        //Horizon
+        Transformed_Walls[i].from = Horizon_Point(Transformed_Walls[i].from, horizon_factor);
+        Transformed_Walls[i].to = Horizon_Point(Transformed_Walls[i].to, horizon_factor);
         //Squish
         Transformed_Walls[i].from = Squish_Point(Transformed_Walls[i].from, squish);
         Transformed_Walls[i].to = Squish_Point(Transformed_Walls[i].to, squish);
@@ -332,6 +343,8 @@
     Transformed_Ghost = Translate_Point(Transformed_Ghost, Round(translation.x), Round(translation.y));
     //Rotation
     Transformed_Ghost = Rotate_Point(Transformed_Ghost, angle);
+    //Horizon
+    Transformed_Ghost = Horizon_Point(Transformed_Ghost, horizon_factor);
     //Squish
     Transformed_Ghost = Squish_Point(Transformed_Ghost, squish);
     Transformed_Ghost.x = Transformed_Ghost.x + 4;
@@ -522,6 +535,19 @@
     float y_translated = point.y - translate_y; //Translates the y-points
     return {x_translated, y_translated};
 }
+
+//HORIZONED
+Point_2D Graphics::Horizon_Point(Point_2D point, float horizon_factor) //Makes all points look like they are following the horizon
+{
+    float x_horizoned;
+    if(point.x > 0) {
+        x_horizoned = point.x - point.y * horizon_factor;
+    } else {
+        x_horizoned = point.x + point.y * horizon_factor;
+    }
+    return {x_horizoned, point.y};
+}
+
 //SQUISH
 //To get the 3D perspective, the y-coordinate is reduced by a factor
 Point_2D Graphics::Squish_Point(Point_2D point, float squish) //Squishes all y-coordinates by a factor
@@ -840,12 +866,4 @@
         Graphics_Draw_Line(boost_plate_BR, boost_plate_mid, true, LCD);
     }
 
-}
-
-
-
-
-
-
-
-
+}
\ No newline at end of file