Dependencies:   mbed

Committer:
HenryWTriff
Date:
Wed Feb 19 21:40:21 2020 +0000
Revision:
6:5f76dd718dc3
Parent:
5:2d9f3c36bcb9
Child:
7:2ce6e90f6d47
Ghost Racing added, Gyro steering and boost plates

Who changed what in which revision?

UserRevisionLine numberNew contents of line
HenryWTriff 2:d08b6a1eaf2b 1 #include "Graphics.h"
HenryWTriff 2:d08b6a1eaf2b 2
HenryWTriff 3:ceed6d026b8b 3 //***********
HenryWTriff 3:ceed6d026b8b 4 // Sprites
HenryWTriff 3:ceed6d026b8b 5 //***********
HenryWTriff 3:ceed6d026b8b 6
HenryWTriff 3:ceed6d026b8b 7 int flag[8][8] = {
HenryWTriff 3:ceed6d026b8b 8 {4,1,1,1,1,1,1,1},
HenryWTriff 3:ceed6d026b8b 9 {4,1,1,0,1,0,1,1},
HenryWTriff 3:ceed6d026b8b 10 {4,1,0,1,0,1,1,1},
HenryWTriff 3:ceed6d026b8b 11 {4,1,1,0,1,0,1,1},
HenryWTriff 3:ceed6d026b8b 12 {4,1,1,1,1,1,1,1},
HenryWTriff 3:ceed6d026b8b 13 {4,4,4,4,4,4,1,1},
HenryWTriff 3:ceed6d026b8b 14 {4,4,4,4,4,4,1,1},
HenryWTriff 3:ceed6d026b8b 15 {4,4,4,4,4,4,1,1},
HenryWTriff 4:9f41fc1c2ad1 16 };
HenryWTriff 3:ceed6d026b8b 17
HenryWTriff 4:9f41fc1c2ad1 18 int car[8][8] = {
HenryWTriff 4:9f41fc1c2ad1 19 {4,4,4,4,4,4,4,4},
HenryWTriff 4:9f41fc1c2ad1 20 {4,4,4,4,4,4,4,4},
HenryWTriff 4:9f41fc1c2ad1 21 {4,1,1,1,1,1,1,4},
HenryWTriff 4:9f41fc1c2ad1 22 {4,4,4,1,1,4,4,4},
HenryWTriff 4:9f41fc1c2ad1 23 {4,4,4,1,1,4,4,4},
HenryWTriff 4:9f41fc1c2ad1 24 {1,4,1,1,1,1,4,1},
HenryWTriff 4:9f41fc1c2ad1 25 {1,1,1,0,0,1,1,1},
HenryWTriff 4:9f41fc1c2ad1 26 {1,4,1,1,1,1,4,1},
HenryWTriff 4:9f41fc1c2ad1 27 };
HenryWTriff 3:ceed6d026b8b 28
HenryWTriff 6:5f76dd718dc3 29 int ghost[8][8] = {
HenryWTriff 6:5f76dd718dc3 30 {0,0,4,4,4,4,0,0},
HenryWTriff 6:5f76dd718dc3 31 {0,1,0,4,4,0,1,0},
HenryWTriff 6:5f76dd718dc3 32 {4,0,1,0,0,1,0,4},
HenryWTriff 6:5f76dd718dc3 33 {4,4,0,1,1,0,4,4},
HenryWTriff 6:5f76dd718dc3 34 {4,4,0,1,1,0,4,4},
HenryWTriff 6:5f76dd718dc3 35 {4,0,1,0,0,1,0,4},
HenryWTriff 6:5f76dd718dc3 36 {0,1,0,4,4,0,1,0},
HenryWTriff 6:5f76dd718dc3 37 {0,0,4,4,4,4,0,0},
HenryWTriff 6:5f76dd718dc3 38 };
HenryWTriff 6:5f76dd718dc3 39
HenryWTriff 6:5f76dd718dc3 40 int count_down_3[17][17] = {
HenryWTriff 6:5f76dd718dc3 41 {4,4,4,4,0,0,0,0,0,0,0,4,4,4,4,4,4},
HenryWTriff 6:5f76dd718dc3 42 {4,4,4,0,1,1,1,1,1,1,1,0,4,4,4,4,4},
HenryWTriff 6:5f76dd718dc3 43 {4,4,0,1,1,1,1,1,1,1,1,1,0,4,4,4,4},
HenryWTriff 6:5f76dd718dc3 44 {4,0,1,1,1,1,1,1,1,1,1,1,1,0,4,4,4},
HenryWTriff 6:5f76dd718dc3 45 {4,0,1,1,1,1,0,0,0,0,1,1,1,1,0,4,4},
HenryWTriff 6:5f76dd718dc3 46 {4,0,1,1,1,0,4,4,4,4,0,1,1,1,0,4,4},
HenryWTriff 6:5f76dd718dc3 47 {4,0,1,1,1,0,4,4,0,0,1,1,1,1,0,4,4},
HenryWTriff 6:5f76dd718dc3 48 {4,4,0,0,0,4,4,0,1,1,1,1,1,0,4,4,4},
HenryWTriff 6:5f76dd718dc3 49 {4,4,4,4,4,4,4,0,1,1,1,1,0,4,4,4,4},
HenryWTriff 6:5f76dd718dc3 50 {4,4,0,0,0,4,4,0,1,1,1,1,1,0,4,4,4},
HenryWTriff 6:5f76dd718dc3 51 {4,0,1,1,1,0,4,4,0,0,1,1,1,1,0,4,4},
HenryWTriff 6:5f76dd718dc3 52 {4,0,1,1,1,0,4,4,4,4,0,1,1,1,0,4,4},
HenryWTriff 6:5f76dd718dc3 53 {4,0,1,1,1,1,0,0,0,0,1,1,1,1,0,4,4},
HenryWTriff 6:5f76dd718dc3 54 {4,4,0,1,1,1,1,1,1,1,1,1,1,0,4,4,4},
HenryWTriff 6:5f76dd718dc3 55 {4,4,4,0,1,1,1,1,1,1,1,1,0,4,4,4,4},
HenryWTriff 6:5f76dd718dc3 56 {4,4,4,4,0,1,1,1,1,1,1,0,4,4,4,4,4},
HenryWTriff 6:5f76dd718dc3 57 {4,4,4,4,4,0,0,0,0,0,0,4,4,4,4,4,4}
HenryWTriff 6:5f76dd718dc3 58 };
HenryWTriff 6:5f76dd718dc3 59
HenryWTriff 6:5f76dd718dc3 60 int count_down_2[17][17] = {
HenryWTriff 6:5f76dd718dc3 61 {4,4,4,4,4,0,0,0,0,0,0,4,4,4,4,4,4},
HenryWTriff 6:5f76dd718dc3 62 {4,4,4,4,0,1,1,1,1,1,1,0,4,4,4,4,4},
HenryWTriff 6:5f76dd718dc3 63 {4,4,4,0,1,1,1,1,1,1,1,1,0,4,4,4,4},
HenryWTriff 6:5f76dd718dc3 64 {4,4,0,1,1,1,1,1,1,1,1,1,1,0,4,4,4},
HenryWTriff 6:5f76dd718dc3 65 {4,0,1,1,1,1,0,0,0,0,1,1,1,1,0,4,4},
HenryWTriff 6:5f76dd718dc3 66 {4,0,1,1,1,0,4,4,4,0,1,1,1,1,0,4,4},
HenryWTriff 6:5f76dd718dc3 67 {4,0,1,1,1,0,4,4,0,1,1,1,1,1,0,4,4},
HenryWTriff 6:5f76dd718dc3 68 {4,4,0,0,0,4,4,0,1,1,1,1,1,0,4,4,4},
HenryWTriff 6:5f76dd718dc3 69 {4,4,4,4,4,4,0,1,1,1,1,1,0,4,4,4,4},
HenryWTriff 6:5f76dd718dc3 70 {4,4,4,4,4,0,1,1,1,1,1,0,4,4,4,4,4},
HenryWTriff 6:5f76dd718dc3 71 {4,4,4,4,0,1,1,1,1,1,0,4,4,4,4,4,4},
HenryWTriff 6:5f76dd718dc3 72 {4,4,4,0,1,1,1,1,1,0,4,4,4,4,4,4,4},
HenryWTriff 6:5f76dd718dc3 73 {4,4,0,1,1,1,1,1,0,0,0,0,0,0,4,4,4},
HenryWTriff 6:5f76dd718dc3 74 {4,0,1,1,1,1,1,1,1,1,1,1,1,1,0,4,4},
HenryWTriff 6:5f76dd718dc3 75 {4,0,1,1,1,1,1,1,1,1,1,1,1,1,0,4,4},
HenryWTriff 6:5f76dd718dc3 76 {4,0,1,1,1,1,1,1,1,1,1,1,1,1,0,4,4},
HenryWTriff 6:5f76dd718dc3 77 {4,4,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4}
HenryWTriff 6:5f76dd718dc3 78 };
HenryWTriff 6:5f76dd718dc3 79
HenryWTriff 6:5f76dd718dc3 80 int count_down_1[17][17] = {
HenryWTriff 6:5f76dd718dc3 81 {4,4,4,4,4,4,4,0,0,0,4,4,4,4,4,4,4},
HenryWTriff 6:5f76dd718dc3 82 {4,4,4,4,4,4,0,1,1,1,0,4,4,4,4,4,4},
HenryWTriff 6:5f76dd718dc3 83 {4,4,4,4,4,0,1,1,1,1,0,4,4,4,4,4,4},
HenryWTriff 6:5f76dd718dc3 84 {4,4,4,4,0,1,1,1,1,1,0,4,4,4,4,4,4},
HenryWTriff 6:5f76dd718dc3 85 {4,4,4,0,1,1,1,1,1,1,0,4,4,4,4,4,4},
HenryWTriff 6:5f76dd718dc3 86 {4,4,4,0,1,1,1,1,1,1,0,4,4,4,4,4,4},
HenryWTriff 6:5f76dd718dc3 87 {4,4,4,0,1,1,1,1,1,1,0,4,4,4,4,4,4},
HenryWTriff 6:5f76dd718dc3 88 {4,4,4,4,0,0,0,1,1,1,0,4,4,4,4,4,4},
HenryWTriff 6:5f76dd718dc3 89 {4,4,4,4,4,4,0,1,1,1,0,4,4,4,4,4,4},
HenryWTriff 6:5f76dd718dc3 90 {4,4,4,4,4,4,0,1,1,1,0,4,4,4,4,4,4},
HenryWTriff 6:5f76dd718dc3 91 {4,4,4,4,4,4,0,1,1,1,0,4,4,4,4,4,4},
HenryWTriff 6:5f76dd718dc3 92 {4,4,4,4,4,4,0,1,1,1,0,4,4,4,4,4,4},
HenryWTriff 6:5f76dd718dc3 93 {4,4,4,4,0,0,1,1,1,1,1,0,0,4,4,4,4},
HenryWTriff 6:5f76dd718dc3 94 {4,4,4,0,1,1,1,1,1,1,1,1,1,0,4,4,4},
HenryWTriff 6:5f76dd718dc3 95 {4,4,4,0,1,1,1,1,1,1,1,1,1,0,4,4,4},
HenryWTriff 6:5f76dd718dc3 96 {4,4,4,0,1,1,1,1,1,1,1,1,1,0,4,4,4},
HenryWTriff 6:5f76dd718dc3 97 {4,4,4,4,0,0,0,0,0,0,0,0,0,4,4,4,4}
HenryWTriff 6:5f76dd718dc3 98 };
HenryWTriff 6:5f76dd718dc3 99
HenryWTriff 6:5f76dd718dc3 100 int count_down_0[18][18] = {
HenryWTriff 6:5f76dd718dc3 101 {4,4,4,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4},
HenryWTriff 6:5f76dd718dc3 102 {4,4,0,1,1,1,1,0,4,4,4,4,4,4,4,4,4,4},
HenryWTriff 6:5f76dd718dc3 103 {4,0,1,1,1,1,1,0,4,4,4,4,4,4,4,4,4,4},
HenryWTriff 6:5f76dd718dc3 104 {0,1,1,1,0,0,0,4,4,4,4,4,4,4,4,4,4,4},
HenryWTriff 6:5f76dd718dc3 105 {0,1,1,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4},
HenryWTriff 6:5f76dd718dc3 106 {0,1,1,0,0,1,1,1,1,0,4,4,4,4,4,4,4,4},
HenryWTriff 6:5f76dd718dc3 107 {0,1,1,0,0,1,1,1,1,0,4,0,0,0,0,4,4,4},
HenryWTriff 6:5f76dd718dc3 108 {0,1,1,0,0,0,0,1,1,0,0,1,1,1,1,0,4,4},
HenryWTriff 6:5f76dd718dc3 109 {0,1,1,1,0,0,1,1,1,0,1,1,1,1,1,1,0,4},
HenryWTriff 6:5f76dd718dc3 110 {4,0,1,1,1,1,1,1,0,1,1,1,0,0,1,1,1,0},
HenryWTriff 6:5f76dd718dc3 111 {4,4,0,1,1,1,1,0,0,1,1,0,0,0,0,1,1,0},
HenryWTriff 6:5f76dd718dc3 112 {4,4,4,0,0,0,0,4,0,1,1,0,0,0,0,1,1,0},
HenryWTriff 6:5f76dd718dc3 113 {4,4,4,4,4,4,4,4,0,1,1,0,0,0,0,1,1,0},
HenryWTriff 6:5f76dd718dc3 114 {4,4,4,4,4,4,4,4,0,1,1,0,0,0,0,1,1,0},
HenryWTriff 6:5f76dd718dc3 115 {4,4,4,4,4,4,4,4,0,1,1,1,0,0,1,1,1,0},
HenryWTriff 6:5f76dd718dc3 116 {4,4,4,4,4,4,4,4,4,0,1,1,1,1,1,1,0,4},
HenryWTriff 6:5f76dd718dc3 117 {4,4,4,4,4,4,4,4,4,4,0,1,1,1,1,0,4,4},
HenryWTriff 6:5f76dd718dc3 118 {4,4,4,4,4,4,4,4,4,4,4,0,0,0,0,4,4,4},
HenryWTriff 6:5f76dd718dc3 119 };
HenryWTriff 6:5f76dd718dc3 120
HenryWTriff 6:5f76dd718dc3 121 int cup[16][16] = {
HenryWTriff 6:5f76dd718dc3 122 {4,4,4,4,4,0,0,0,0,0,0,4,4,4,4,4},
HenryWTriff 6:5f76dd718dc3 123 {4,0,0,0,0,1,1,1,1,1,1,0,0,0,0,4},
HenryWTriff 6:5f76dd718dc3 124 {0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0},
HenryWTriff 6:5f76dd718dc3 125 {0,1,0,0,0,1,1,0,1,1,1,0,0,0,1,0},
HenryWTriff 6:5f76dd718dc3 126 {0,1,0,0,0,1,1,0,0,1,1,0,0,0,1,0},
HenryWTriff 6:5f76dd718dc3 127 {4,0,1,0,0,1,1,0,0,1,1,0,0,1,0,4},
HenryWTriff 6:5f76dd718dc3 128 {4,0,1,0,0,1,1,0,0,1,1,0,0,1,0,4},
HenryWTriff 6:5f76dd718dc3 129 {4,4,0,1,0,1,1,0,0,1,1,0,1,0,4,4},
HenryWTriff 6:5f76dd718dc3 130 {4,4,0,1,0,1,1,1,0,1,1,0,1,0,4,4},
HenryWTriff 6:5f76dd718dc3 131 {4,4,4,0,1,1,1,1,1,1,1,1,0,4,4,4},
HenryWTriff 6:5f76dd718dc3 132 {4,4,4,4,0,0,1,1,1,1,0,0,4,4,4,4},
HenryWTriff 6:5f76dd718dc3 133 {4,4,4,4,4,4,0,1,1,0,4,4,4,4,4,4},
HenryWTriff 6:5f76dd718dc3 134 {4,4,4,4,4,4,0,1,1,0,4,4,4,4,4,4},
HenryWTriff 6:5f76dd718dc3 135 {4,4,4,4,4,0,1,1,1,1,0,4,4,4,4,4},
HenryWTriff 6:5f76dd718dc3 136 {4,4,4,4,0,1,1,1,1,1,1,0,4,4,4,4},
HenryWTriff 6:5f76dd718dc3 137 {4,4,4,4,4,0,0,0,0,0,0,4,4,4,4,4},
HenryWTriff 6:5f76dd718dc3 138 };
HenryWTriff 6:5f76dd718dc3 139
HenryWTriff 2:d08b6a1eaf2b 140 //**************************
HenryWTriff 2:d08b6a1eaf2b 141 // MAIN GRAPHICS FUNCTION
HenryWTriff 2:d08b6a1eaf2b 142 //**************************
HenryWTriff 2:d08b6a1eaf2b 143
HenryWTriff 6:5f76dd718dc3 144 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, Point_2D ghost_position, N5110 &LCD)
HenryWTriff 2:d08b6a1eaf2b 145 {
HenryWTriff 2:d08b6a1eaf2b 146
HenryWTriff 3:ceed6d026b8b 147 Line_2D Track_Lines_Transformed[map_info.number_of_track_lines];
HenryWTriff 3:ceed6d026b8b 148 Line_2D Track_Dotted_Lines_Transformed[map_info.number_of_dotted_lines];
HenryWTriff 3:ceed6d026b8b 149 Point_2D Transformed_Flags[map_info.number_of_flags];
HenryWTriff 5:2d9f3c36bcb9 150 Line_2D Transformed_Walls[map_info.number_of_walls];
HenryWTriff 6:5f76dd718dc3 151 Point_2D Transformed_Ghost;
HenryWTriff 3:ceed6d026b8b 152
HenryWTriff 3:ceed6d026b8b 153 for(int i = 0; i < map_info.number_of_track_lines; i++) {
HenryWTriff 2:d08b6a1eaf2b 154 Track_Lines_Transformed[i] = Track_Lines[i];
HenryWTriff 2:d08b6a1eaf2b 155 //Translation
HenryWTriff 2:d08b6a1eaf2b 156 Track_Lines_Transformed[i].from = Translate_Point(Track_Lines_Transformed[i].from, Round(translation.x), Round(translation.y));
HenryWTriff 2:d08b6a1eaf2b 157 Track_Lines_Transformed[i].to = Translate_Point(Track_Lines_Transformed[i].to, Round(translation.x), Round(translation.y));
HenryWTriff 2:d08b6a1eaf2b 158 //Rotation
HenryWTriff 2:d08b6a1eaf2b 159 Track_Lines_Transformed[i].from = Rotate_Point(Track_Lines_Transformed[i].from, angle);
HenryWTriff 2:d08b6a1eaf2b 160 Track_Lines_Transformed[i].to = Rotate_Point(Track_Lines_Transformed[i].to, angle);
HenryWTriff 2:d08b6a1eaf2b 161 //Squish
HenryWTriff 2:d08b6a1eaf2b 162 Track_Lines_Transformed[i].from = Squish_Point(Track_Lines_Transformed[i].from, squish);
HenryWTriff 2:d08b6a1eaf2b 163 Track_Lines_Transformed[i].to = Squish_Point(Track_Lines_Transformed[i].to, squish);
HenryWTriff 2:d08b6a1eaf2b 164 }
HenryWTriff 2:d08b6a1eaf2b 165
HenryWTriff 3:ceed6d026b8b 166 for(int i = 0; i < map_info.number_of_dotted_lines; i++) {
HenryWTriff 3:ceed6d026b8b 167 Track_Dotted_Lines_Transformed[i] = Track_Dotted_Lines[i];
HenryWTriff 3:ceed6d026b8b 168 //Translation
HenryWTriff 3:ceed6d026b8b 169 Track_Dotted_Lines_Transformed[i].from = Translate_Point(Track_Dotted_Lines_Transformed[i].from, Round(translation.x), Round(translation.y));
HenryWTriff 3:ceed6d026b8b 170 Track_Dotted_Lines_Transformed[i].to = Translate_Point(Track_Dotted_Lines_Transformed[i].to, Round(translation.x), Round(translation.y));
HenryWTriff 3:ceed6d026b8b 171 //Rotation
HenryWTriff 3:ceed6d026b8b 172 Track_Dotted_Lines_Transformed[i].from = Rotate_Point(Track_Dotted_Lines_Transformed[i].from, angle);
HenryWTriff 3:ceed6d026b8b 173 Track_Dotted_Lines_Transformed[i].to = Rotate_Point(Track_Dotted_Lines_Transformed[i].to, angle);
HenryWTriff 3:ceed6d026b8b 174 //Squish
HenryWTriff 3:ceed6d026b8b 175 Track_Dotted_Lines_Transformed[i].from = Squish_Point(Track_Dotted_Lines_Transformed[i].from, squish);
HenryWTriff 3:ceed6d026b8b 176 Track_Dotted_Lines_Transformed[i].to = Squish_Point(Track_Dotted_Lines_Transformed[i].to, squish);
HenryWTriff 3:ceed6d026b8b 177 }
HenryWTriff 3:ceed6d026b8b 178
HenryWTriff 3:ceed6d026b8b 179 for(int i = 0; i < map_info.number_of_flags; i++) {
HenryWTriff 3:ceed6d026b8b 180 Transformed_Flags[i] = Track_Flags[i];
HenryWTriff 3:ceed6d026b8b 181 //Translation
HenryWTriff 3:ceed6d026b8b 182 Transformed_Flags[i] = Translate_Point(Transformed_Flags[i], Round(translation.x), Round(translation.y));
HenryWTriff 3:ceed6d026b8b 183 //Rotation
HenryWTriff 3:ceed6d026b8b 184 Transformed_Flags[i] = Rotate_Point(Transformed_Flags[i], angle);
HenryWTriff 3:ceed6d026b8b 185 //Squish
HenryWTriff 3:ceed6d026b8b 186 Transformed_Flags[i] = Squish_Point(Transformed_Flags[i], squish);
HenryWTriff 3:ceed6d026b8b 187 }
HenryWTriff 3:ceed6d026b8b 188
HenryWTriff 5:2d9f3c36bcb9 189 for(int i = 0; i < map_info.number_of_walls; i++) {
HenryWTriff 5:2d9f3c36bcb9 190 Transformed_Walls[i] = Track_Walls[i];
HenryWTriff 5:2d9f3c36bcb9 191 //Translation
HenryWTriff 5:2d9f3c36bcb9 192 Transformed_Walls[i].from = Translate_Point(Transformed_Walls[i].from, Round(translation.x), Round(translation.y));
HenryWTriff 5:2d9f3c36bcb9 193 Transformed_Walls[i].to = Translate_Point(Transformed_Walls[i].to, Round(translation.x), Round(translation.y));
HenryWTriff 5:2d9f3c36bcb9 194 //Rotation
HenryWTriff 5:2d9f3c36bcb9 195 Transformed_Walls[i].from = Rotate_Point(Transformed_Walls[i].from, angle);
HenryWTriff 5:2d9f3c36bcb9 196 Transformed_Walls[i].to = Rotate_Point(Transformed_Walls[i].to, angle);
HenryWTriff 5:2d9f3c36bcb9 197 //Squish
HenryWTriff 5:2d9f3c36bcb9 198 Transformed_Walls[i].from = Squish_Point(Transformed_Walls[i].from, squish);
HenryWTriff 5:2d9f3c36bcb9 199 Transformed_Walls[i].to = Squish_Point(Transformed_Walls[i].to, squish);
HenryWTriff 5:2d9f3c36bcb9 200 }
HenryWTriff 5:2d9f3c36bcb9 201
HenryWTriff 6:5f76dd718dc3 202 Transformed_Ghost = ghost_position;
HenryWTriff 6:5f76dd718dc3 203 //Translation
HenryWTriff 6:5f76dd718dc3 204 Transformed_Ghost = Translate_Point(Transformed_Ghost, Round(translation.x), Round(translation.y));
HenryWTriff 6:5f76dd718dc3 205 //Rotation
HenryWTriff 6:5f76dd718dc3 206 Transformed_Ghost = Rotate_Point(Transformed_Ghost, angle);
HenryWTriff 6:5f76dd718dc3 207 //Squish
HenryWTriff 6:5f76dd718dc3 208 Transformed_Ghost = Squish_Point(Transformed_Ghost, squish);
HenryWTriff 6:5f76dd718dc3 209
HenryWTriff 3:ceed6d026b8b 210 for(int i = 0; i < map_info.number_of_track_lines; i++) {
HenryWTriff 2:d08b6a1eaf2b 211 Graphics_Draw_Line(Track_Lines_Transformed[i].from, Track_Lines_Transformed[i].to, true, LCD);
HenryWTriff 2:d08b6a1eaf2b 212 }
HenryWTriff 3:ceed6d026b8b 213
HenryWTriff 3:ceed6d026b8b 214 for(int i = 0; i < map_info.number_of_dotted_lines; i++) {
HenryWTriff 3:ceed6d026b8b 215 Graphics_Draw_Line(Track_Dotted_Lines_Transformed[i].from, Track_Dotted_Lines_Transformed[i].to,false, LCD);
HenryWTriff 3:ceed6d026b8b 216 }
HenryWTriff 3:ceed6d026b8b 217
HenryWTriff 6:5f76dd718dc3 218 for(int i = 0; i < map_info.number_of_boost_plates; i++) {
HenryWTriff 6:5f76dd718dc3 219 Graphics_Draw_Boost_Plate(Track_Boost_Plates[i], translation, angle, squish, LCD);
HenryWTriff 6:5f76dd718dc3 220 }
HenryWTriff 6:5f76dd718dc3 221
HenryWTriff 3:ceed6d026b8b 222 for(int i = 0; i < map_info.number_of_flags; i++) {
HenryWTriff 3:ceed6d026b8b 223 Graphics_Draw_Sprite(Transformed_Flags[i], 8, 8, (int *)flag, LCD);
HenryWTriff 3:ceed6d026b8b 224 }
HenryWTriff 5:2d9f3c36bcb9 225
HenryWTriff 6:5f76dd718dc3 226 Graphics_Draw_Sprite(Transformed_Ghost, 8, 8, (int *)ghost, LCD);
HenryWTriff 6:5f76dd718dc3 227
HenryWTriff 5:2d9f3c36bcb9 228 for(int i = 0; i < map_info.number_of_walls; i++) {
HenryWTriff 5:2d9f3c36bcb9 229 Graphics_Draw_Wall(Transformed_Walls[i].from, Transformed_Walls[i].to,4, LCD);
HenryWTriff 5:2d9f3c36bcb9 230 }
HenryWTriff 5:2d9f3c36bcb9 231
HenryWTriff 4:9f41fc1c2ad1 232 Point_2D car_position = {4,0};
HenryWTriff 4:9f41fc1c2ad1 233 Graphics_Draw_Sprite(car_position,8,8,(int *)car, LCD);
HenryWTriff 2:d08b6a1eaf2b 234 }
HenryWTriff 2:d08b6a1eaf2b 235
HenryWTriff 2:d08b6a1eaf2b 236 //*******************
HenryWTriff 2:d08b6a1eaf2b 237 // SCREEN SETTINGS
HenryWTriff 2:d08b6a1eaf2b 238 //*******************
HenryWTriff 2:d08b6a1eaf2b 239
HenryWTriff 2:d08b6a1eaf2b 240 void Graphics::Change_Contrast(N5110 &LCD, Gamepad &Device)
HenryWTriff 2:d08b6a1eaf2b 241 {
HenryWTriff 2:d08b6a1eaf2b 242 LCD.setContrast((0.35 + 0.2 * Device.read_pot1()));
HenryWTriff 2:d08b6a1eaf2b 243 }
HenryWTriff 2:d08b6a1eaf2b 244
HenryWTriff 6:5f76dd718dc3 245 //****************
HenryWTriff 6:5f76dd718dc3 246 // START SCREEN
HenryWTriff 6:5f76dd718dc3 247 //****************
HenryWTriff 6:5f76dd718dc3 248
HenryWTriff 6:5f76dd718dc3 249 void Graphics::Start_Sequence(int state, N5110 &LCD)
HenryWTriff 6:5f76dd718dc3 250 {
HenryWTriff 6:5f76dd718dc3 251 Point_2D count_down_position = {8,8};
HenryWTriff 6:5f76dd718dc3 252 if(state == 3) {
HenryWTriff 6:5f76dd718dc3 253 Graphics_Draw_Sprite(count_down_position, 17, 17, (int *) count_down_3, LCD);
HenryWTriff 6:5f76dd718dc3 254 } else if(state == 2) {
HenryWTriff 6:5f76dd718dc3 255 Graphics_Draw_Sprite(count_down_position, 17, 17, (int *) count_down_2, LCD);
HenryWTriff 6:5f76dd718dc3 256 } else if(state == 1) {
HenryWTriff 6:5f76dd718dc3 257 Graphics_Draw_Sprite(count_down_position, 17, 17, (int *) count_down_1, LCD);
HenryWTriff 6:5f76dd718dc3 258 } else if(state == 0) {
HenryWTriff 6:5f76dd718dc3 259 Graphics_Draw_Sprite(count_down_position, 18, 18, (int *) count_down_0, LCD);
HenryWTriff 6:5f76dd718dc3 260 }
HenryWTriff 6:5f76dd718dc3 261
HenryWTriff 6:5f76dd718dc3 262 }
HenryWTriff 6:5f76dd718dc3 263
HenryWTriff 6:5f76dd718dc3 264 void Graphics::Finish(N5110 &LCD)
HenryWTriff 6:5f76dd718dc3 265 {
HenryWTriff 6:5f76dd718dc3 266 Point_2D finish_position = {8,8};
HenryWTriff 6:5f76dd718dc3 267 Graphics_Draw_Sprite(finish_position, 16, 16, (int *) cup, LCD);
HenryWTriff 6:5f76dd718dc3 268 }
HenryWTriff 6:5f76dd718dc3 269
HenryWTriff 5:2d9f3c36bcb9 270 //********************
HenryWTriff 5:2d9f3c36bcb9 271 // DRAW LAP COUNTER
HenryWTriff 5:2d9f3c36bcb9 272 //********************
HenryWTriff 5:2d9f3c36bcb9 273
HenryWTriff 5:2d9f3c36bcb9 274 void Graphics::Draw_Laps(int laps, N5110 &LCD)
HenryWTriff 5:2d9f3c36bcb9 275 {
HenryWTriff 5:2d9f3c36bcb9 276 if(laps == 1) {
HenryWTriff 5:2d9f3c36bcb9 277 LCD.printString("1",0,5);
HenryWTriff 5:2d9f3c36bcb9 278 } else if (laps == 2) {
HenryWTriff 5:2d9f3c36bcb9 279 LCD.printString("2",0,5);
HenryWTriff 5:2d9f3c36bcb9 280 } else if (laps == 3) {
HenryWTriff 5:2d9f3c36bcb9 281 LCD.printString("3",0,5);
HenryWTriff 5:2d9f3c36bcb9 282 } else if (laps == 4) {
HenryWTriff 5:2d9f3c36bcb9 283 LCD.printString("4",0,5);
HenryWTriff 5:2d9f3c36bcb9 284 } else if (laps == 5) {
HenryWTriff 5:2d9f3c36bcb9 285 LCD.printString("5",0,5);
HenryWTriff 5:2d9f3c36bcb9 286 }
HenryWTriff 5:2d9f3c36bcb9 287 }
HenryWTriff 2:d08b6a1eaf2b 288
HenryWTriff 6:5f76dd718dc3 289 void Graphics::Draw_Time(bool finished, Time time, N5110 &LCD)
HenryWTriff 6:5f76dd718dc3 290 {
HenryWTriff 6:5f76dd718dc3 291 if(finished == false) {
HenryWTriff 6:5f76dd718dc3 292 char min[1];
HenryWTriff 6:5f76dd718dc3 293 sprintf(min, "%i", time.mins);
HenryWTriff 6:5f76dd718dc3 294 LCD.printString(min,47,5);
HenryWTriff 6:5f76dd718dc3 295
HenryWTriff 6:5f76dd718dc3 296 LCD.printString(":",52,5);
HenryWTriff 6:5f76dd718dc3 297
HenryWTriff 6:5f76dd718dc3 298 if(time.secs < 10) {
HenryWTriff 6:5f76dd718dc3 299 LCD.printString("0",57,5);
HenryWTriff 6:5f76dd718dc3 300 char sec[1];
HenryWTriff 6:5f76dd718dc3 301 sprintf(sec, "%i", time.secs);
HenryWTriff 6:5f76dd718dc3 302 LCD.printString(sec,63,5);
HenryWTriff 6:5f76dd718dc3 303 } else {
HenryWTriff 6:5f76dd718dc3 304 char sec[2];
HenryWTriff 6:5f76dd718dc3 305 sprintf(sec, "%i", time.secs);
HenryWTriff 6:5f76dd718dc3 306 LCD.printString(sec,57,5);
HenryWTriff 6:5f76dd718dc3 307 }
HenryWTriff 6:5f76dd718dc3 308
HenryWTriff 6:5f76dd718dc3 309 LCD.printString(".",68,5);
HenryWTriff 6:5f76dd718dc3 310
HenryWTriff 6:5f76dd718dc3 311 char mili[2];
HenryWTriff 6:5f76dd718dc3 312 sprintf(mili, "%i", time.milis);
HenryWTriff 6:5f76dd718dc3 313 LCD.printString(mili,73,5);
HenryWTriff 6:5f76dd718dc3 314 } else {
HenryWTriff 6:5f76dd718dc3 315 char min[1];
HenryWTriff 6:5f76dd718dc3 316 sprintf(min, "%i", time.mins);
HenryWTriff 6:5f76dd718dc3 317 LCD.printString(min,23,0);
HenryWTriff 6:5f76dd718dc3 318
HenryWTriff 6:5f76dd718dc3 319 LCD.printString(":",28,0);
HenryWTriff 6:5f76dd718dc3 320
HenryWTriff 6:5f76dd718dc3 321 if(time.secs < 10) {
HenryWTriff 6:5f76dd718dc3 322 LCD.printString("0",33,0);
HenryWTriff 6:5f76dd718dc3 323 char sec[1];
HenryWTriff 6:5f76dd718dc3 324 sprintf(sec, "%i", time.secs);
HenryWTriff 6:5f76dd718dc3 325 LCD.printString(sec,39,0);
HenryWTriff 6:5f76dd718dc3 326 } else {
HenryWTriff 6:5f76dd718dc3 327 char sec[2];
HenryWTriff 6:5f76dd718dc3 328 sprintf(sec, "%i", time.secs);
HenryWTriff 6:5f76dd718dc3 329 LCD.printString(sec,33,0);
HenryWTriff 6:5f76dd718dc3 330 }
HenryWTriff 6:5f76dd718dc3 331
HenryWTriff 6:5f76dd718dc3 332 LCD.printString(".",44,0);
HenryWTriff 6:5f76dd718dc3 333
HenryWTriff 6:5f76dd718dc3 334 char mili[2];
HenryWTriff 6:5f76dd718dc3 335 sprintf(mili, "%i", time.milis);
HenryWTriff 6:5f76dd718dc3 336 LCD.printString(mili,49,0);
HenryWTriff 6:5f76dd718dc3 337 }
HenryWTriff 6:5f76dd718dc3 338 }
HenryWTriff 6:5f76dd718dc3 339
HenryWTriff 2:d08b6a1eaf2b 340 //**************
HenryWTriff 2:d08b6a1eaf2b 341 // TRANSFORM
HenryWTriff 2:d08b6a1eaf2b 342 //**************
HenryWTriff 2:d08b6a1eaf2b 343
HenryWTriff 2:d08b6a1eaf2b 344 //ROTATE
HenryWTriff 2:d08b6a1eaf2b 345 Point_2D Graphics::Rotate_Point(Point_2D point, float angle)
HenryWTriff 2:d08b6a1eaf2b 346 {
HenryWTriff 2:d08b6a1eaf2b 347 angle = (angle * PI)/180;
HenryWTriff 2:d08b6a1eaf2b 348 float x_rotated = point.x * cos(angle) - point.y * sin(angle);
HenryWTriff 2:d08b6a1eaf2b 349 float y_rotated = point.y * cos(angle) + point.x * sin(angle);
HenryWTriff 2:d08b6a1eaf2b 350 return {x_rotated, y_rotated};
HenryWTriff 2:d08b6a1eaf2b 351 }
HenryWTriff 2:d08b6a1eaf2b 352 //TRANSLATE
HenryWTriff 2:d08b6a1eaf2b 353 Point_2D Graphics::Translate_Point(Point_2D point, int translate_x, int translate_y)
HenryWTriff 2:d08b6a1eaf2b 354 {
HenryWTriff 2:d08b6a1eaf2b 355 float x_translated = point.x - translate_x;
HenryWTriff 2:d08b6a1eaf2b 356 float y_translated = point.y - translate_y;
HenryWTriff 2:d08b6a1eaf2b 357 return {x_translated, y_translated};
HenryWTriff 2:d08b6a1eaf2b 358 }
HenryWTriff 2:d08b6a1eaf2b 359 //SQUISH
HenryWTriff 2:d08b6a1eaf2b 360 Point_2D Graphics::Squish_Point(Point_2D point, float squish)
HenryWTriff 2:d08b6a1eaf2b 361 {
HenryWTriff 2:d08b6a1eaf2b 362 float x_squish = point.x;
HenryWTriff 2:d08b6a1eaf2b 363 float y_squish = point.y * squish;
HenryWTriff 2:d08b6a1eaf2b 364 return {x_squish, y_squish};
HenryWTriff 2:d08b6a1eaf2b 365 }
HenryWTriff 2:d08b6a1eaf2b 366
HenryWTriff 2:d08b6a1eaf2b 367 //********
HenryWTriff 2:d08b6a1eaf2b 368 // MATH
HenryWTriff 2:d08b6a1eaf2b 369 //********
HenryWTriff 2:d08b6a1eaf2b 370
HenryWTriff 2:d08b6a1eaf2b 371 int Graphics::Round(float number)
HenryWTriff 2:d08b6a1eaf2b 372 {
HenryWTriff 2:d08b6a1eaf2b 373 int number_int = (number * 10);
HenryWTriff 2:d08b6a1eaf2b 374 int remainder = number_int % 10;
HenryWTriff 2:d08b6a1eaf2b 375 if(remainder < 5) {
HenryWTriff 2:d08b6a1eaf2b 376 return ((number_int - remainder) / 10);
HenryWTriff 2:d08b6a1eaf2b 377 } else {
HenryWTriff 2:d08b6a1eaf2b 378 return ((number_int + (10 - remainder)) / 10);
HenryWTriff 2:d08b6a1eaf2b 379 }
HenryWTriff 2:d08b6a1eaf2b 380 }
HenryWTriff 2:d08b6a1eaf2b 381
HenryWTriff 2:d08b6a1eaf2b 382 float Graphics::Gradient(Point_2D from, Point_2D to)
HenryWTriff 2:d08b6a1eaf2b 383 {
HenryWTriff 2:d08b6a1eaf2b 384 float change_in_y = to.y - from.y;
HenryWTriff 2:d08b6a1eaf2b 385 float change_in_x = to.x - from.x;
HenryWTriff 2:d08b6a1eaf2b 386 float gradient = change_in_y / change_in_x;
HenryWTriff 2:d08b6a1eaf2b 387 if(gradient < 0.001 && gradient > -0.001) {
HenryWTriff 2:d08b6a1eaf2b 388 return 0;
HenryWTriff 2:d08b6a1eaf2b 389 } else {
HenryWTriff 2:d08b6a1eaf2b 390 return gradient;
HenryWTriff 2:d08b6a1eaf2b 391 }
HenryWTriff 2:d08b6a1eaf2b 392 }
HenryWTriff 2:d08b6a1eaf2b 393
HenryWTriff 2:d08b6a1eaf2b 394 bool Graphics::Gradient_Check_Infinate(Point_2D from, Point_2D to)
HenryWTriff 2:d08b6a1eaf2b 395 {
HenryWTriff 2:d08b6a1eaf2b 396 float change_in_x = to.x - from.x;
HenryWTriff 2:d08b6a1eaf2b 397 if(change_in_x < 0.001 && change_in_x > -0.001) {
HenryWTriff 2:d08b6a1eaf2b 398 return true;
HenryWTriff 2:d08b6a1eaf2b 399 } else {
HenryWTriff 2:d08b6a1eaf2b 400 return false;
HenryWTriff 2:d08b6a1eaf2b 401 }
HenryWTriff 2:d08b6a1eaf2b 402 }
HenryWTriff 2:d08b6a1eaf2b 403
HenryWTriff 3:ceed6d026b8b 404 //*************
HenryWTriff 3:ceed6d026b8b 405 // DRAW LINE
HenryWTriff 3:ceed6d026b8b 406 //*************
HenryWTriff 2:d08b6a1eaf2b 407
HenryWTriff 2:d08b6a1eaf2b 408 void Graphics::Graphics_Draw_Line(Point_2D from, Point_2D to, bool solid, N5110 &LCD) //Draw a line between two points on only the portion of the screen
HenryWTriff 2:d08b6a1eaf2b 409 {
HenryWTriff 2:d08b6a1eaf2b 410
HenryWTriff 2:d08b6a1eaf2b 411 if( Gradient_Check_Infinate(from, to) == false ) { //Checking to see if the line is vertical
HenryWTriff 2:d08b6a1eaf2b 412 Point_2D plot_x_from = {0,0};
HenryWTriff 2:d08b6a1eaf2b 413 Point_2D plot_x_to = {0,0};
HenryWTriff 2:d08b6a1eaf2b 414 Point_2D plot_y_from = {0,0};
HenryWTriff 2:d08b6a1eaf2b 415 Point_2D plot_y_to = {0,0};
HenryWTriff 2:d08b6a1eaf2b 416
HenryWTriff 2:d08b6a1eaf2b 417 float gradient = Gradient(from, to); // Calculating the gradient
HenryWTriff 2:d08b6a1eaf2b 418 float y_intercept = (from.y - gradient * from.x); // Calulating the y intercept y - mx = c
HenryWTriff 2:d08b6a1eaf2b 419 float x_intercept = (from.x - from.y / gradient); // Calculating the x intercept x - y/m = d
HenryWTriff 2:d08b6a1eaf2b 420
HenryWTriff 2:d08b6a1eaf2b 421 if(gradient <= 1 && gradient >= -1) {
HenryWTriff 2:d08b6a1eaf2b 422 //Reordering from and to so that the for loops below can use ++
HenryWTriff 2:d08b6a1eaf2b 423 if(to.x < from.x) {
HenryWTriff 2:d08b6a1eaf2b 424 plot_x_from = to;
HenryWTriff 2:d08b6a1eaf2b 425 plot_x_to = from;
HenryWTriff 2:d08b6a1eaf2b 426 } else {
HenryWTriff 2:d08b6a1eaf2b 427 plot_x_from = from;
HenryWTriff 2:d08b6a1eaf2b 428 plot_x_to = to;
HenryWTriff 2:d08b6a1eaf2b 429 }
HenryWTriff 2:d08b6a1eaf2b 430 if(solid == true) {
HenryWTriff 2:d08b6a1eaf2b 431 for(int x = Round(plot_x_from.x); x <= Round(plot_x_to.x); x++) { //Iterating through the x points
HenryWTriff 2:d08b6a1eaf2b 432 int y = -(Round((gradient * x) + y_intercept)); //Calculating the value of y for each x point
HenryWTriff 2:d08b6a1eaf2b 433 Point_2D plot_x = {x+42, y+36}; //Assigning them to a Plot_2D variable and transforming so the centre of the screen is 0,0
HenryWTriff 2:d08b6a1eaf2b 434 if(plot_x.x <= 84 && plot_x.x >= 0 && plot_x.y <=48 && plot_x.y >= 0) {
HenryWTriff 2:d08b6a1eaf2b 435 LCD.setPixel(plot_x.x, plot_x.y, true); //Plotting the points
HenryWTriff 2:d08b6a1eaf2b 436 }
HenryWTriff 2:d08b6a1eaf2b 437 }
HenryWTriff 2:d08b6a1eaf2b 438 } else {
HenryWTriff 2:d08b6a1eaf2b 439 for(int x = Round(plot_x_from.x); x <= Round(plot_x_to.x); x+=2) { //Iterating through the x points
HenryWTriff 2:d08b6a1eaf2b 440 int y = -(Round((gradient * x) + y_intercept)); //Calculating the value of y for each x point
HenryWTriff 2:d08b6a1eaf2b 441 Point_2D plot_x = {x+42, y+36}; //Assigning them to a Plot_2D variable and transforming so the centre of the screen is 0,0
HenryWTriff 2:d08b6a1eaf2b 442 if(plot_x.x <= 84 && plot_x.x >= 0 && plot_x.y <=48 && plot_x.y >= 0) {
HenryWTriff 2:d08b6a1eaf2b 443 LCD.setPixel(plot_x.x, plot_x.y, true); //Plotting the points
HenryWTriff 2:d08b6a1eaf2b 444 }
HenryWTriff 2:d08b6a1eaf2b 445 }
HenryWTriff 2:d08b6a1eaf2b 446 }
HenryWTriff 2:d08b6a1eaf2b 447 } else {
HenryWTriff 2:d08b6a1eaf2b 448 if(to.y < from.y) {
HenryWTriff 2:d08b6a1eaf2b 449 plot_y_from = to;
HenryWTriff 2:d08b6a1eaf2b 450 plot_y_to = from;
HenryWTriff 2:d08b6a1eaf2b 451 } else {
HenryWTriff 2:d08b6a1eaf2b 452 plot_y_from = from;
HenryWTriff 2:d08b6a1eaf2b 453 plot_y_to = to;
HenryWTriff 2:d08b6a1eaf2b 454 }
HenryWTriff 2:d08b6a1eaf2b 455 if(solid == true) {
HenryWTriff 2:d08b6a1eaf2b 456 for(int y = Round(plot_y_from.y); y <= Round(plot_y_to.y); y++) { //Iterating through the Y points
HenryWTriff 2:d08b6a1eaf2b 457 int x = Round((y / gradient) + x_intercept); //Calculating the value of x for every y point
HenryWTriff 2:d08b6a1eaf2b 458 Point_2D plot_y = {x+42, (-y)+36}; //Assigning them to a Plot_2D variable and transforming so the centre of the screen is 0,0
HenryWTriff 2:d08b6a1eaf2b 459 if(plot_y.x <= 84 && plot_y.x >= 0 && plot_y.y <=48 && plot_y.y >= 0) {
HenryWTriff 2:d08b6a1eaf2b 460 LCD.setPixel(plot_y.x, plot_y.y, true); //Plotting the points
HenryWTriff 2:d08b6a1eaf2b 461 }
HenryWTriff 2:d08b6a1eaf2b 462 }
HenryWTriff 2:d08b6a1eaf2b 463 } else {
HenryWTriff 2:d08b6a1eaf2b 464 for(int y = Round(plot_y_from.y); y <= Round(plot_y_to.y); y+=2) { //Iterating through the Y points
HenryWTriff 2:d08b6a1eaf2b 465 int x = Round((y / gradient) + x_intercept); //Calculating the value of x for every y point
HenryWTriff 2:d08b6a1eaf2b 466 Point_2D plot_y = {x+42, (-y)+36}; //Assigning them to a Plot_2D variable and transforming so the centre of the screen is 0,0
HenryWTriff 2:d08b6a1eaf2b 467 if(plot_y.x <= 84 && plot_y.x >= 0 && plot_y.y <=48 && plot_y.y >= 0) {
HenryWTriff 2:d08b6a1eaf2b 468 LCD.setPixel(plot_y.x, plot_y.y, true); //Plotting the points
HenryWTriff 2:d08b6a1eaf2b 469 }
HenryWTriff 2:d08b6a1eaf2b 470 }
HenryWTriff 2:d08b6a1eaf2b 471 }
HenryWTriff 2:d08b6a1eaf2b 472 }
HenryWTriff 2:d08b6a1eaf2b 473
HenryWTriff 2:d08b6a1eaf2b 474 } else {
HenryWTriff 2:d08b6a1eaf2b 475 Point_2D plot_y_from = {0,0};
HenryWTriff 2:d08b6a1eaf2b 476 Point_2D plot_y_to = {0,0};
HenryWTriff 2:d08b6a1eaf2b 477 //Reordering from and to so that the for loops below can use ++
HenryWTriff 2:d08b6a1eaf2b 478 if(to.y < from.y) {
HenryWTriff 2:d08b6a1eaf2b 479 plot_y_from = to;
HenryWTriff 2:d08b6a1eaf2b 480 plot_y_to = from;
HenryWTriff 2:d08b6a1eaf2b 481 } else {
HenryWTriff 2:d08b6a1eaf2b 482 plot_y_from = from;
HenryWTriff 2:d08b6a1eaf2b 483 plot_y_to = to;
HenryWTriff 2:d08b6a1eaf2b 484 }
HenryWTriff 2:d08b6a1eaf2b 485 float x_intercept = from.x; //Calculating the x_intercept
HenryWTriff 2:d08b6a1eaf2b 486 if(solid == true) {
HenryWTriff 2:d08b6a1eaf2b 487 for(int y = plot_y_from.y; y <= plot_y_to.y; y++) {
HenryWTriff 2:d08b6a1eaf2b 488 Point_2D plot_y = {x_intercept+42, (-y)+36}; //Assigning them to a Plot_2D variable and transforming so the centre of the screen is 0,0
HenryWTriff 2:d08b6a1eaf2b 489 LCD.setPixel(plot_y.x, plot_y.y, true); //Plotting the points
HenryWTriff 2:d08b6a1eaf2b 490 }
HenryWTriff 2:d08b6a1eaf2b 491 } else {
HenryWTriff 2:d08b6a1eaf2b 492 for(int y = plot_y_from.y; y <= plot_y_to.y; y+=2) {
HenryWTriff 2:d08b6a1eaf2b 493 Point_2D plot_y = {x_intercept+42, (-y)+36}; //Assigning them to a Plot_2D variable and transforming so the centre of the screen is 0,0
HenryWTriff 2:d08b6a1eaf2b 494 LCD.setPixel(plot_y.x, plot_y.y, true); //Plotting the points
HenryWTriff 2:d08b6a1eaf2b 495 }
HenryWTriff 2:d08b6a1eaf2b 496 }
HenryWTriff 2:d08b6a1eaf2b 497 }
HenryWTriff 3:ceed6d026b8b 498 }
HenryWTriff 3:ceed6d026b8b 499
HenryWTriff 3:ceed6d026b8b 500 //***************
HenryWTriff 3:ceed6d026b8b 501 // DRAW SPRITE
HenryWTriff 3:ceed6d026b8b 502 //***************
HenryWTriff 3:ceed6d026b8b 503
HenryWTriff 3:ceed6d026b8b 504 void Graphics::Graphics_Draw_Sprite(Point_2D point, int x_size, int y_size, int *sprite, N5110 &LCD)
HenryWTriff 3:ceed6d026b8b 505 {
HenryWTriff 3:ceed6d026b8b 506 Point_2D zeroed_point = {Round(point.x) + 42 - x_size, Round(-point.y) + 36 - y_size};
HenryWTriff 3:ceed6d026b8b 507 if(zeroed_point.x <= 84 && zeroed_point.x >= 0 && zeroed_point.y <= 48 && zeroed_point.y >= 0) {
HenryWTriff 3:ceed6d026b8b 508 for(int y = 0; y < y_size; y++) {
HenryWTriff 3:ceed6d026b8b 509 for(int x = 0; x < x_size; x++) {
HenryWTriff 3:ceed6d026b8b 510 if(*((sprite + y*y_size)+x) == 1) {
HenryWTriff 3:ceed6d026b8b 511 LCD.setPixel((zeroed_point.x + x), (zeroed_point.y + y), true);
HenryWTriff 3:ceed6d026b8b 512 } else if(*((sprite + y*y_size)+x) == 0) {
HenryWTriff 3:ceed6d026b8b 513 LCD.setPixel((zeroed_point.x + x), (zeroed_point.y + y), false);
HenryWTriff 3:ceed6d026b8b 514 }
HenryWTriff 3:ceed6d026b8b 515 }
HenryWTriff 3:ceed6d026b8b 516 }
HenryWTriff 3:ceed6d026b8b 517 }
HenryWTriff 5:2d9f3c36bcb9 518 }
HenryWTriff 5:2d9f3c36bcb9 519
HenryWTriff 5:2d9f3c36bcb9 520 //***************
HenryWTriff 5:2d9f3c36bcb9 521 // DRAW WALL
HenryWTriff 5:2d9f3c36bcb9 522 //***************
HenryWTriff 5:2d9f3c36bcb9 523
HenryWTriff 5:2d9f3c36bcb9 524 void Graphics::Graphics_Draw_Wall(Point_2D from, Point_2D to, int height, N5110 &LCD) //Draw a line between two points on only the portion of the screen
HenryWTriff 5:2d9f3c36bcb9 525 {
HenryWTriff 5:2d9f3c36bcb9 526 if(Gradient_Check_Infinate(from, to) == 0) { //Checking to see if the line is vertical
HenryWTriff 5:2d9f3c36bcb9 527 Point_2D plot_x_from = {0,0};
HenryWTriff 5:2d9f3c36bcb9 528 Point_2D plot_x_to = {0,0};
HenryWTriff 5:2d9f3c36bcb9 529 Point_2D plot_y_from = {0,0};
HenryWTriff 5:2d9f3c36bcb9 530 Point_2D plot_y_to = {0,0};
HenryWTriff 5:2d9f3c36bcb9 531
HenryWTriff 5:2d9f3c36bcb9 532 float gradient = Gradient(from, to); // Calculating the gradient
HenryWTriff 5:2d9f3c36bcb9 533 float y_intercept = (from.y - gradient * from.x); // Calulating the y intercept y - mx = c
HenryWTriff 5:2d9f3c36bcb9 534 float x_intercept = (from.x - from.y / gradient); // Calculating the x intercept x - y/m = d
HenryWTriff 5:2d9f3c36bcb9 535
HenryWTriff 5:2d9f3c36bcb9 536 if(gradient <= 1 && gradient >= -1) {
HenryWTriff 5:2d9f3c36bcb9 537 //Reordering from and to so that the for loops below can use ++
HenryWTriff 5:2d9f3c36bcb9 538 if(to.x < from.x) {
HenryWTriff 5:2d9f3c36bcb9 539 plot_x_from = to;
HenryWTriff 5:2d9f3c36bcb9 540 plot_x_to = from;
HenryWTriff 5:2d9f3c36bcb9 541 } else {
HenryWTriff 5:2d9f3c36bcb9 542 plot_x_from = from;
HenryWTriff 5:2d9f3c36bcb9 543 plot_x_to = to;
HenryWTriff 5:2d9f3c36bcb9 544 }
HenryWTriff 5:2d9f3c36bcb9 545 for(int x = Round(plot_x_from.x); x <= Round(plot_x_to.x); x++) { //Iterating through the x points
HenryWTriff 5:2d9f3c36bcb9 546 int y = -(Round((gradient * x) + y_intercept)); //Calculating the value of y for each x point
HenryWTriff 5:2d9f3c36bcb9 547 Point_2D plot_x = {x+42, y+36}; //Assigning them to a Plot_2D variable and transforming so the centre of the screen is 0,0
HenryWTriff 5:2d9f3c36bcb9 548 if(plot_x.x <= 84 && plot_x.x >= 0 && plot_x.y <=48 && plot_x.y >= 0) {
HenryWTriff 5:2d9f3c36bcb9 549 for(int y_add = 0; y_add < height; y_add++) {
HenryWTriff 5:2d9f3c36bcb9 550 LCD.setPixel(plot_x.x, plot_x.y - y_add, true);
HenryWTriff 5:2d9f3c36bcb9 551 }
HenryWTriff 5:2d9f3c36bcb9 552 }
HenryWTriff 5:2d9f3c36bcb9 553 }
HenryWTriff 5:2d9f3c36bcb9 554 } else {
HenryWTriff 5:2d9f3c36bcb9 555 if(to.y < from.y) {
HenryWTriff 5:2d9f3c36bcb9 556 plot_y_from = to;
HenryWTriff 5:2d9f3c36bcb9 557 plot_y_to = from;
HenryWTriff 5:2d9f3c36bcb9 558 } else {
HenryWTriff 5:2d9f3c36bcb9 559 plot_y_from = from;
HenryWTriff 5:2d9f3c36bcb9 560 plot_y_to = to;
HenryWTriff 5:2d9f3c36bcb9 561 }
HenryWTriff 5:2d9f3c36bcb9 562 for(int y = Round(plot_y_from.y); y <= Round(plot_y_to.y); y++) { //Iterating through the Y points
HenryWTriff 5:2d9f3c36bcb9 563 int x = Round((y / gradient) + x_intercept); //Calculating the value of x for every y point
HenryWTriff 5:2d9f3c36bcb9 564 Point_2D plot_y = {x+42, (-y)+36}; //Assigning them to a Plot_2D variable and transforming so the centre of the screen is 0,0
HenryWTriff 5:2d9f3c36bcb9 565 if(plot_y.x <= 84 && plot_y.x >= 0 && plot_y.y <=48 && plot_y.y >= 0) {
HenryWTriff 5:2d9f3c36bcb9 566 for(int y_add = 0; y_add < height; y_add++) {
HenryWTriff 5:2d9f3c36bcb9 567 LCD.setPixel(plot_y.x, plot_y.y - y_add, true);
HenryWTriff 5:2d9f3c36bcb9 568 }
HenryWTriff 5:2d9f3c36bcb9 569 }
HenryWTriff 5:2d9f3c36bcb9 570 }
HenryWTriff 5:2d9f3c36bcb9 571 }
HenryWTriff 5:2d9f3c36bcb9 572
HenryWTriff 5:2d9f3c36bcb9 573 } else {
HenryWTriff 5:2d9f3c36bcb9 574 Point_2D plot_y_from = {0,0};
HenryWTriff 5:2d9f3c36bcb9 575 Point_2D plot_y_to = {0,0};
HenryWTriff 5:2d9f3c36bcb9 576 //Reordering from and to so that the for loops below can use ++
HenryWTriff 5:2d9f3c36bcb9 577 if(to.y < from.y) {
HenryWTriff 5:2d9f3c36bcb9 578 plot_y_from = to;
HenryWTriff 5:2d9f3c36bcb9 579 plot_y_to = from;
HenryWTriff 5:2d9f3c36bcb9 580 } else {
HenryWTriff 5:2d9f3c36bcb9 581 plot_y_from = from;
HenryWTriff 5:2d9f3c36bcb9 582 plot_y_to = to;
HenryWTriff 5:2d9f3c36bcb9 583 }
HenryWTriff 5:2d9f3c36bcb9 584 float x_intercept = from.x; //Calculating the x_intercept
HenryWTriff 5:2d9f3c36bcb9 585 for(int y = plot_y_from.y; y <= plot_y_to.y; y++) {
HenryWTriff 5:2d9f3c36bcb9 586 Point_2D plot_y = {x_intercept+42, (-y)+36}; //Assigning them to a Plot_2D variable and transforming so the centre of the screen is 0,0
HenryWTriff 5:2d9f3c36bcb9 587 for(int y_add = 0; y_add < height; y_add++) {
HenryWTriff 5:2d9f3c36bcb9 588 LCD.setPixel(plot_y.x, plot_y.y - y_add, true);
HenryWTriff 5:2d9f3c36bcb9 589 }
HenryWTriff 5:2d9f3c36bcb9 590 }
HenryWTriff 5:2d9f3c36bcb9 591
HenryWTriff 5:2d9f3c36bcb9 592 }
HenryWTriff 6:5f76dd718dc3 593 }
HenryWTriff 6:5f76dd718dc3 594
HenryWTriff 6:5f76dd718dc3 595 //********************
HenryWTriff 6:5f76dd718dc3 596 // DRAW BOOST PLATE
HenryWTriff 6:5f76dd718dc3 597 //********************
HenryWTriff 6:5f76dd718dc3 598
HenryWTriff 6:5f76dd718dc3 599 void Graphics::Graphics_Draw_Boost_Plate(Triangle_2D boost_plate, Point_2D translation, int angle, float squish, N5110 &LCD)
HenryWTriff 6:5f76dd718dc3 600 {
HenryWTriff 6:5f76dd718dc3 601 Point_2D boost_plate_TL = boost_plate.TL;
HenryWTriff 6:5f76dd718dc3 602 Point_2D boost_plate_TR = {boost_plate.BR.x, boost_plate.TL.y};
HenryWTriff 6:5f76dd718dc3 603 Point_2D boost_plate_BL = {boost_plate.TL.x, boost_plate.BR.y};
HenryWTriff 6:5f76dd718dc3 604 Point_2D boost_plate_BR = boost_plate.BR;
HenryWTriff 6:5f76dd718dc3 605 Point_2D boost_plate_mid;
HenryWTriff 6:5f76dd718dc3 606 if(boost_plate.Type == 1) {
HenryWTriff 6:5f76dd718dc3 607 boost_plate_mid.x = boost_plate_BR.x;
HenryWTriff 6:5f76dd718dc3 608 boost_plate_mid.y = (((boost_plate_TL.y - boost_plate_BR.y) / 2) + boost_plate_BR.y);
HenryWTriff 6:5f76dd718dc3 609 } else if(boost_plate.Type == 2) {
HenryWTriff 6:5f76dd718dc3 610 boost_plate_mid.x = (((boost_plate_BR.x - boost_plate_TL.x) / 2) + boost_plate_TL.x);
HenryWTriff 6:5f76dd718dc3 611 boost_plate_mid.y = boost_plate_BR.y;
HenryWTriff 6:5f76dd718dc3 612 } else if(boost_plate.Type == 3) {
HenryWTriff 6:5f76dd718dc3 613 boost_plate_mid.x = boost_plate_TL.x;
HenryWTriff 6:5f76dd718dc3 614 boost_plate_mid.y = (((boost_plate_TL.y - boost_plate_BR.y) / 2) + boost_plate_BR.y);
HenryWTriff 6:5f76dd718dc3 615 } else if(boost_plate.Type == 4) {
HenryWTriff 6:5f76dd718dc3 616 boost_plate_mid.x = (((boost_plate_BR.x - boost_plate_TL.x) / 2) + boost_plate_TL.x);
HenryWTriff 6:5f76dd718dc3 617 boost_plate_mid.y = boost_plate_TL.y;
HenryWTriff 6:5f76dd718dc3 618 }
HenryWTriff 6:5f76dd718dc3 619
HenryWTriff 6:5f76dd718dc3 620 //Translation
HenryWTriff 6:5f76dd718dc3 621 boost_plate_TL = Translate_Point(boost_plate_TL, Round(translation.x), Round(translation.y));
HenryWTriff 6:5f76dd718dc3 622 boost_plate_TR = Translate_Point(boost_plate_TR, Round(translation.x), Round(translation.y));
HenryWTriff 6:5f76dd718dc3 623 boost_plate_BL = Translate_Point(boost_plate_BL, Round(translation.x), Round(translation.y));
HenryWTriff 6:5f76dd718dc3 624 boost_plate_BR = Translate_Point(boost_plate_BR, Round(translation.x), Round(translation.y));
HenryWTriff 6:5f76dd718dc3 625 boost_plate_mid = Translate_Point(boost_plate_mid, Round(translation.x), Round(translation.y));
HenryWTriff 6:5f76dd718dc3 626
HenryWTriff 6:5f76dd718dc3 627 //Rotation
HenryWTriff 6:5f76dd718dc3 628 boost_plate_TL = Rotate_Point(boost_plate_TL, angle);
HenryWTriff 6:5f76dd718dc3 629 boost_plate_TR = Rotate_Point(boost_plate_TR, angle);
HenryWTriff 6:5f76dd718dc3 630 boost_plate_BL = Rotate_Point(boost_plate_BL, angle);
HenryWTriff 6:5f76dd718dc3 631 boost_plate_BR = Rotate_Point(boost_plate_BR, angle);
HenryWTriff 6:5f76dd718dc3 632 boost_plate_mid = Rotate_Point(boost_plate_mid, angle);
HenryWTriff 6:5f76dd718dc3 633
HenryWTriff 6:5f76dd718dc3 634 //Squish
HenryWTriff 6:5f76dd718dc3 635 boost_plate_TL = Squish_Point(boost_plate_TL, squish);
HenryWTriff 6:5f76dd718dc3 636 boost_plate_TR = Squish_Point(boost_plate_TR, squish);
HenryWTriff 6:5f76dd718dc3 637 boost_plate_BL = Squish_Point(boost_plate_BL, squish);
HenryWTriff 6:5f76dd718dc3 638 boost_plate_BR = Squish_Point(boost_plate_BR, squish);
HenryWTriff 6:5f76dd718dc3 639 boost_plate_mid = Squish_Point(boost_plate_mid, squish);
HenryWTriff 6:5f76dd718dc3 640
HenryWTriff 6:5f76dd718dc3 641 Graphics_Draw_Line(boost_plate_TL, boost_plate_TR, true, LCD);
HenryWTriff 6:5f76dd718dc3 642 Graphics_Draw_Line(boost_plate_TR, boost_plate_BR, true, LCD);
HenryWTriff 6:5f76dd718dc3 643 Graphics_Draw_Line(boost_plate_BR, boost_plate_BL, true, LCD);
HenryWTriff 6:5f76dd718dc3 644 Graphics_Draw_Line(boost_plate_BL, boost_plate_TL, true, LCD);
HenryWTriff 6:5f76dd718dc3 645
HenryWTriff 6:5f76dd718dc3 646 if(boost_plate.Type == 1) {
HenryWTriff 6:5f76dd718dc3 647 Graphics_Draw_Line(boost_plate_TL, boost_plate_mid, true, LCD);
HenryWTriff 6:5f76dd718dc3 648 Graphics_Draw_Line(boost_plate_BL, boost_plate_mid, true, LCD);
HenryWTriff 6:5f76dd718dc3 649 } else if(boost_plate.Type == 2) {
HenryWTriff 6:5f76dd718dc3 650 Graphics_Draw_Line(boost_plate_TL, boost_plate_mid, true, LCD);
HenryWTriff 6:5f76dd718dc3 651 Graphics_Draw_Line(boost_plate_BL, boost_plate_mid, true, LCD);
HenryWTriff 6:5f76dd718dc3 652 } else if(boost_plate.Type == 3) {
HenryWTriff 6:5f76dd718dc3 653 Graphics_Draw_Line(boost_plate_TR, boost_plate_mid, true, LCD);
HenryWTriff 6:5f76dd718dc3 654 Graphics_Draw_Line(boost_plate_BR, boost_plate_mid, true, LCD);
HenryWTriff 6:5f76dd718dc3 655 } else if(boost_plate.Type == 4) {
HenryWTriff 6:5f76dd718dc3 656 Graphics_Draw_Line(boost_plate_TR, boost_plate_mid, true, LCD);
HenryWTriff 6:5f76dd718dc3 657 Graphics_Draw_Line(boost_plate_BR, boost_plate_mid, true, LCD);
HenryWTriff 6:5f76dd718dc3 658 }
HenryWTriff 6:5f76dd718dc3 659
HenryWTriff 6:5f76dd718dc3 660 }
HenryWTriff 6:5f76dd718dc3 661
HenryWTriff 6:5f76dd718dc3 662
HenryWTriff 6:5f76dd718dc3 663
HenryWTriff 6:5f76dd718dc3 664
HenryWTriff 6:5f76dd718dc3 665
HenryWTriff 6:5f76dd718dc3 666
HenryWTriff 6:5f76dd718dc3 667
HenryWTriff 6:5f76dd718dc3 668