Henry Triff
/
ELEC2645_Project_el18ht
Diff: Graphics/Graphics.cpp
- 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