Dependencies:   mbed

Committer:
HenryWTriff
Date:
Tue Feb 11 13:18:40 2020 +0000
Revision:
3:ceed6d026b8b
Parent:
2:d08b6a1eaf2b
Child:
4:9f41fc1c2ad1
Controls added, Proper map drawn, Sprites added

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 3:ceed6d026b8b 16 };
HenryWTriff 3:ceed6d026b8b 17
HenryWTriff 3:ceed6d026b8b 18
HenryWTriff 2:d08b6a1eaf2b 19 //**************************
HenryWTriff 2:d08b6a1eaf2b 20 // MAIN GRAPHICS FUNCTION
HenryWTriff 2:d08b6a1eaf2b 21 //**************************
HenryWTriff 2:d08b6a1eaf2b 22
HenryWTriff 3:ceed6d026b8b 23 void Graphics::Draw_Map(int game_fps, Point_2D translation, int angle, float squish, Line_2D *Track_Lines, Line_2D *Track_Dotted_Lines, Point_2D *Track_Flags, Map_Data map_info, N5110 &LCD)
HenryWTriff 2:d08b6a1eaf2b 24 {
HenryWTriff 2:d08b6a1eaf2b 25
HenryWTriff 3:ceed6d026b8b 26 Line_2D Track_Lines_Transformed[map_info.number_of_track_lines];
HenryWTriff 3:ceed6d026b8b 27 Line_2D Track_Dotted_Lines_Transformed[map_info.number_of_dotted_lines];
HenryWTriff 3:ceed6d026b8b 28 Point_2D Transformed_Flags[map_info.number_of_flags];
HenryWTriff 3:ceed6d026b8b 29
HenryWTriff 3:ceed6d026b8b 30 for(int i = 0; i < map_info.number_of_track_lines; i++) {
HenryWTriff 2:d08b6a1eaf2b 31 Track_Lines_Transformed[i] = Track_Lines[i];
HenryWTriff 2:d08b6a1eaf2b 32 //Translation
HenryWTriff 2:d08b6a1eaf2b 33 Track_Lines_Transformed[i].from = Translate_Point(Track_Lines_Transformed[i].from, Round(translation.x), Round(translation.y));
HenryWTriff 2:d08b6a1eaf2b 34 Track_Lines_Transformed[i].to = Translate_Point(Track_Lines_Transformed[i].to, Round(translation.x), Round(translation.y));
HenryWTriff 2:d08b6a1eaf2b 35 //Rotation
HenryWTriff 2:d08b6a1eaf2b 36 Track_Lines_Transformed[i].from = Rotate_Point(Track_Lines_Transformed[i].from, angle);
HenryWTriff 2:d08b6a1eaf2b 37 Track_Lines_Transformed[i].to = Rotate_Point(Track_Lines_Transformed[i].to, angle);
HenryWTriff 2:d08b6a1eaf2b 38 //Squish
HenryWTriff 2:d08b6a1eaf2b 39 Track_Lines_Transformed[i].from = Squish_Point(Track_Lines_Transformed[i].from, squish);
HenryWTriff 2:d08b6a1eaf2b 40 Track_Lines_Transformed[i].to = Squish_Point(Track_Lines_Transformed[i].to, squish);
HenryWTriff 2:d08b6a1eaf2b 41 }
HenryWTriff 2:d08b6a1eaf2b 42
HenryWTriff 3:ceed6d026b8b 43 for(int i = 0; i < map_info.number_of_dotted_lines; i++) {
HenryWTriff 3:ceed6d026b8b 44 Track_Dotted_Lines_Transformed[i] = Track_Dotted_Lines[i];
HenryWTriff 3:ceed6d026b8b 45 //Translation
HenryWTriff 3:ceed6d026b8b 46 Track_Dotted_Lines_Transformed[i].from = Translate_Point(Track_Dotted_Lines_Transformed[i].from, Round(translation.x), Round(translation.y));
HenryWTriff 3:ceed6d026b8b 47 Track_Dotted_Lines_Transformed[i].to = Translate_Point(Track_Dotted_Lines_Transformed[i].to, Round(translation.x), Round(translation.y));
HenryWTriff 3:ceed6d026b8b 48 //Rotation
HenryWTriff 3:ceed6d026b8b 49 Track_Dotted_Lines_Transformed[i].from = Rotate_Point(Track_Dotted_Lines_Transformed[i].from, angle);
HenryWTriff 3:ceed6d026b8b 50 Track_Dotted_Lines_Transformed[i].to = Rotate_Point(Track_Dotted_Lines_Transformed[i].to, angle);
HenryWTriff 3:ceed6d026b8b 51 //Squish
HenryWTriff 3:ceed6d026b8b 52 Track_Dotted_Lines_Transformed[i].from = Squish_Point(Track_Dotted_Lines_Transformed[i].from, squish);
HenryWTriff 3:ceed6d026b8b 53 Track_Dotted_Lines_Transformed[i].to = Squish_Point(Track_Dotted_Lines_Transformed[i].to, squish);
HenryWTriff 3:ceed6d026b8b 54 }
HenryWTriff 3:ceed6d026b8b 55
HenryWTriff 3:ceed6d026b8b 56 for(int i = 0; i < map_info.number_of_flags; i++) {
HenryWTriff 3:ceed6d026b8b 57 Transformed_Flags[i] = Track_Flags[i];
HenryWTriff 3:ceed6d026b8b 58 //Translation
HenryWTriff 3:ceed6d026b8b 59 Transformed_Flags[i] = Translate_Point(Transformed_Flags[i], Round(translation.x), Round(translation.y));
HenryWTriff 3:ceed6d026b8b 60 //Rotation
HenryWTriff 3:ceed6d026b8b 61 Transformed_Flags[i] = Rotate_Point(Transformed_Flags[i], angle);
HenryWTriff 3:ceed6d026b8b 62 //Squish
HenryWTriff 3:ceed6d026b8b 63 Transformed_Flags[i] = Squish_Point(Transformed_Flags[i], squish);
HenryWTriff 3:ceed6d026b8b 64 }
HenryWTriff 3:ceed6d026b8b 65
HenryWTriff 2:d08b6a1eaf2b 66 LCD.clear();
HenryWTriff 3:ceed6d026b8b 67 for(int i = 0; i < map_info.number_of_track_lines; i++) {
HenryWTriff 2:d08b6a1eaf2b 68 Graphics_Draw_Line(Track_Lines_Transformed[i].from, Track_Lines_Transformed[i].to, true, LCD);
HenryWTriff 2:d08b6a1eaf2b 69 }
HenryWTriff 3:ceed6d026b8b 70
HenryWTriff 3:ceed6d026b8b 71 for(int i = 0; i < map_info.number_of_dotted_lines; i++) {
HenryWTriff 3:ceed6d026b8b 72 Graphics_Draw_Line(Track_Dotted_Lines_Transformed[i].from, Track_Dotted_Lines_Transformed[i].to,false, LCD);
HenryWTriff 3:ceed6d026b8b 73 }
HenryWTriff 3:ceed6d026b8b 74
HenryWTriff 3:ceed6d026b8b 75 for(int i = 0; i < map_info.number_of_flags; i++) {
HenryWTriff 3:ceed6d026b8b 76 Graphics_Draw_Sprite(Transformed_Flags[i], 8, 8, (int *)flag, LCD);
HenryWTriff 3:ceed6d026b8b 77 }
HenryWTriff 3:ceed6d026b8b 78
HenryWTriff 2:d08b6a1eaf2b 79 LCD.refresh();
HenryWTriff 3:ceed6d026b8b 80 wait((1 / game_fps));
HenryWTriff 2:d08b6a1eaf2b 81 }
HenryWTriff 2:d08b6a1eaf2b 82
HenryWTriff 2:d08b6a1eaf2b 83
HenryWTriff 2:d08b6a1eaf2b 84 //*******************
HenryWTriff 2:d08b6a1eaf2b 85 // SCREEN SETTINGS
HenryWTriff 2:d08b6a1eaf2b 86 //*******************
HenryWTriff 2:d08b6a1eaf2b 87
HenryWTriff 2:d08b6a1eaf2b 88 void Graphics::Change_Contrast(N5110 &LCD, Gamepad &Device)
HenryWTriff 2:d08b6a1eaf2b 89 {
HenryWTriff 2:d08b6a1eaf2b 90 LCD.setContrast((0.35 + 0.2 * Device.read_pot1()));
HenryWTriff 2:d08b6a1eaf2b 91 }
HenryWTriff 2:d08b6a1eaf2b 92
HenryWTriff 2:d08b6a1eaf2b 93
HenryWTriff 2:d08b6a1eaf2b 94 //**************
HenryWTriff 2:d08b6a1eaf2b 95 // TRANSFORM
HenryWTriff 2:d08b6a1eaf2b 96 //**************
HenryWTriff 2:d08b6a1eaf2b 97
HenryWTriff 2:d08b6a1eaf2b 98 //ROTATE
HenryWTriff 2:d08b6a1eaf2b 99 Point_2D Graphics::Rotate_Point(Point_2D point, float angle)
HenryWTriff 2:d08b6a1eaf2b 100 {
HenryWTriff 2:d08b6a1eaf2b 101 angle = (angle * PI)/180;
HenryWTriff 2:d08b6a1eaf2b 102 float x_rotated = point.x * cos(angle) - point.y * sin(angle);
HenryWTriff 2:d08b6a1eaf2b 103 float y_rotated = point.y * cos(angle) + point.x * sin(angle);
HenryWTriff 2:d08b6a1eaf2b 104 return {x_rotated, y_rotated};
HenryWTriff 2:d08b6a1eaf2b 105 }
HenryWTriff 2:d08b6a1eaf2b 106 //TRANSLATE
HenryWTriff 2:d08b6a1eaf2b 107 Point_2D Graphics::Translate_Point(Point_2D point, int translate_x, int translate_y)
HenryWTriff 2:d08b6a1eaf2b 108 {
HenryWTriff 2:d08b6a1eaf2b 109 float x_translated = point.x - translate_x;
HenryWTriff 2:d08b6a1eaf2b 110 float y_translated = point.y - translate_y;
HenryWTriff 2:d08b6a1eaf2b 111 return {x_translated, y_translated};
HenryWTriff 2:d08b6a1eaf2b 112 }
HenryWTriff 2:d08b6a1eaf2b 113 //SQUISH
HenryWTriff 2:d08b6a1eaf2b 114 Point_2D Graphics::Squish_Point(Point_2D point, float squish)
HenryWTriff 2:d08b6a1eaf2b 115 {
HenryWTriff 2:d08b6a1eaf2b 116 float x_squish = point.x;
HenryWTriff 2:d08b6a1eaf2b 117 float y_squish = point.y * squish;
HenryWTriff 2:d08b6a1eaf2b 118 return {x_squish, y_squish};
HenryWTriff 2:d08b6a1eaf2b 119 }
HenryWTriff 2:d08b6a1eaf2b 120
HenryWTriff 2:d08b6a1eaf2b 121 //********
HenryWTriff 2:d08b6a1eaf2b 122 // MATH
HenryWTriff 2:d08b6a1eaf2b 123 //********
HenryWTriff 2:d08b6a1eaf2b 124
HenryWTriff 2:d08b6a1eaf2b 125 int Graphics::Round(float number)
HenryWTriff 2:d08b6a1eaf2b 126 {
HenryWTriff 2:d08b6a1eaf2b 127 int number_int = (number * 10);
HenryWTriff 2:d08b6a1eaf2b 128 int remainder = number_int % 10;
HenryWTriff 2:d08b6a1eaf2b 129 if(remainder < 5) {
HenryWTriff 2:d08b6a1eaf2b 130 return ((number_int - remainder) / 10);
HenryWTriff 2:d08b6a1eaf2b 131 } else {
HenryWTriff 2:d08b6a1eaf2b 132 return ((number_int + (10 - remainder)) / 10);
HenryWTriff 2:d08b6a1eaf2b 133 }
HenryWTriff 2:d08b6a1eaf2b 134 }
HenryWTriff 2:d08b6a1eaf2b 135
HenryWTriff 2:d08b6a1eaf2b 136 float Graphics::Gradient(Point_2D from, Point_2D to)
HenryWTriff 2:d08b6a1eaf2b 137 {
HenryWTriff 2:d08b6a1eaf2b 138 float change_in_y = to.y - from.y;
HenryWTriff 2:d08b6a1eaf2b 139 float change_in_x = to.x - from.x;
HenryWTriff 2:d08b6a1eaf2b 140 float gradient = change_in_y / change_in_x;
HenryWTriff 2:d08b6a1eaf2b 141 if(gradient < 0.001 && gradient > -0.001) {
HenryWTriff 2:d08b6a1eaf2b 142 return 0;
HenryWTriff 2:d08b6a1eaf2b 143 } else {
HenryWTriff 2:d08b6a1eaf2b 144 return gradient;
HenryWTriff 2:d08b6a1eaf2b 145 }
HenryWTriff 2:d08b6a1eaf2b 146 }
HenryWTriff 2:d08b6a1eaf2b 147
HenryWTriff 2:d08b6a1eaf2b 148 bool Graphics::Gradient_Check_Infinate(Point_2D from, Point_2D to)
HenryWTriff 2:d08b6a1eaf2b 149 {
HenryWTriff 2:d08b6a1eaf2b 150 float change_in_x = to.x - from.x;
HenryWTriff 2:d08b6a1eaf2b 151 if(change_in_x < 0.001 && change_in_x > -0.001) {
HenryWTriff 2:d08b6a1eaf2b 152 return true;
HenryWTriff 2:d08b6a1eaf2b 153 } else {
HenryWTriff 2:d08b6a1eaf2b 154 return false;
HenryWTriff 2:d08b6a1eaf2b 155 }
HenryWTriff 2:d08b6a1eaf2b 156 }
HenryWTriff 2:d08b6a1eaf2b 157
HenryWTriff 3:ceed6d026b8b 158 //*************
HenryWTriff 3:ceed6d026b8b 159 // DRAW LINE
HenryWTriff 3:ceed6d026b8b 160 //*************
HenryWTriff 2:d08b6a1eaf2b 161
HenryWTriff 2:d08b6a1eaf2b 162 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 163 {
HenryWTriff 2:d08b6a1eaf2b 164
HenryWTriff 2:d08b6a1eaf2b 165 if( Gradient_Check_Infinate(from, to) == false ) { //Checking to see if the line is vertical
HenryWTriff 2:d08b6a1eaf2b 166 Point_2D plot_x_from = {0,0};
HenryWTriff 2:d08b6a1eaf2b 167 Point_2D plot_x_to = {0,0};
HenryWTriff 2:d08b6a1eaf2b 168 Point_2D plot_y_from = {0,0};
HenryWTriff 2:d08b6a1eaf2b 169 Point_2D plot_y_to = {0,0};
HenryWTriff 2:d08b6a1eaf2b 170
HenryWTriff 2:d08b6a1eaf2b 171 float gradient = Gradient(from, to); // Calculating the gradient
HenryWTriff 2:d08b6a1eaf2b 172 float y_intercept = (from.y - gradient * from.x); // Calulating the y intercept y - mx = c
HenryWTriff 2:d08b6a1eaf2b 173 float x_intercept = (from.x - from.y / gradient); // Calculating the x intercept x - y/m = d
HenryWTriff 2:d08b6a1eaf2b 174
HenryWTriff 2:d08b6a1eaf2b 175 if(gradient <= 1 && gradient >= -1) {
HenryWTriff 2:d08b6a1eaf2b 176 //Reordering from and to so that the for loops below can use ++
HenryWTriff 2:d08b6a1eaf2b 177 if(to.x < from.x) {
HenryWTriff 2:d08b6a1eaf2b 178 plot_x_from = to;
HenryWTriff 2:d08b6a1eaf2b 179 plot_x_to = from;
HenryWTriff 2:d08b6a1eaf2b 180 } else {
HenryWTriff 2:d08b6a1eaf2b 181 plot_x_from = from;
HenryWTriff 2:d08b6a1eaf2b 182 plot_x_to = to;
HenryWTriff 2:d08b6a1eaf2b 183 }
HenryWTriff 2:d08b6a1eaf2b 184 if(solid == true) {
HenryWTriff 2:d08b6a1eaf2b 185 for(int x = Round(plot_x_from.x); x <= Round(plot_x_to.x); x++) { //Iterating through the x points
HenryWTriff 2:d08b6a1eaf2b 186 int y = -(Round((gradient * x) + y_intercept)); //Calculating the value of y for each x point
HenryWTriff 2:d08b6a1eaf2b 187 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 188 if(plot_x.x <= 84 && plot_x.x >= 0 && plot_x.y <=48 && plot_x.y >= 0) {
HenryWTriff 2:d08b6a1eaf2b 189 LCD.setPixel(plot_x.x, plot_x.y, true); //Plotting the points
HenryWTriff 2:d08b6a1eaf2b 190 }
HenryWTriff 2:d08b6a1eaf2b 191 }
HenryWTriff 2:d08b6a1eaf2b 192 } else {
HenryWTriff 2:d08b6a1eaf2b 193 for(int x = Round(plot_x_from.x); x <= Round(plot_x_to.x); x+=2) { //Iterating through the x points
HenryWTriff 2:d08b6a1eaf2b 194 int y = -(Round((gradient * x) + y_intercept)); //Calculating the value of y for each x point
HenryWTriff 2:d08b6a1eaf2b 195 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 196 if(plot_x.x <= 84 && plot_x.x >= 0 && plot_x.y <=48 && plot_x.y >= 0) {
HenryWTriff 2:d08b6a1eaf2b 197 LCD.setPixel(plot_x.x, plot_x.y, true); //Plotting the points
HenryWTriff 2:d08b6a1eaf2b 198 }
HenryWTriff 2:d08b6a1eaf2b 199 }
HenryWTriff 2:d08b6a1eaf2b 200 }
HenryWTriff 2:d08b6a1eaf2b 201 } else {
HenryWTriff 2:d08b6a1eaf2b 202 if(to.y < from.y) {
HenryWTriff 2:d08b6a1eaf2b 203 plot_y_from = to;
HenryWTriff 2:d08b6a1eaf2b 204 plot_y_to = from;
HenryWTriff 2:d08b6a1eaf2b 205 } else {
HenryWTriff 2:d08b6a1eaf2b 206 plot_y_from = from;
HenryWTriff 2:d08b6a1eaf2b 207 plot_y_to = to;
HenryWTriff 2:d08b6a1eaf2b 208 }
HenryWTriff 2:d08b6a1eaf2b 209 if(solid == true) {
HenryWTriff 2:d08b6a1eaf2b 210 for(int y = Round(plot_y_from.y); y <= Round(plot_y_to.y); y++) { //Iterating through the Y points
HenryWTriff 2:d08b6a1eaf2b 211 int x = Round((y / gradient) + x_intercept); //Calculating the value of x for every y point
HenryWTriff 2:d08b6a1eaf2b 212 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 213 if(plot_y.x <= 84 && plot_y.x >= 0 && plot_y.y <=48 && plot_y.y >= 0) {
HenryWTriff 2:d08b6a1eaf2b 214 LCD.setPixel(plot_y.x, plot_y.y, true); //Plotting the points
HenryWTriff 2:d08b6a1eaf2b 215 }
HenryWTriff 2:d08b6a1eaf2b 216 }
HenryWTriff 2:d08b6a1eaf2b 217 } else {
HenryWTriff 2:d08b6a1eaf2b 218 for(int y = Round(plot_y_from.y); y <= Round(plot_y_to.y); y+=2) { //Iterating through the Y points
HenryWTriff 2:d08b6a1eaf2b 219 int x = Round((y / gradient) + x_intercept); //Calculating the value of x for every y point
HenryWTriff 2:d08b6a1eaf2b 220 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 221 if(plot_y.x <= 84 && plot_y.x >= 0 && plot_y.y <=48 && plot_y.y >= 0) {
HenryWTriff 2:d08b6a1eaf2b 222 LCD.setPixel(plot_y.x, plot_y.y, true); //Plotting the points
HenryWTriff 2:d08b6a1eaf2b 223 }
HenryWTriff 2:d08b6a1eaf2b 224 }
HenryWTriff 2:d08b6a1eaf2b 225 }
HenryWTriff 2:d08b6a1eaf2b 226 }
HenryWTriff 2:d08b6a1eaf2b 227
HenryWTriff 2:d08b6a1eaf2b 228 } else {
HenryWTriff 2:d08b6a1eaf2b 229 Point_2D plot_y_from = {0,0};
HenryWTriff 2:d08b6a1eaf2b 230 Point_2D plot_y_to = {0,0};
HenryWTriff 2:d08b6a1eaf2b 231 //Reordering from and to so that the for loops below can use ++
HenryWTriff 2:d08b6a1eaf2b 232 if(to.y < from.y) {
HenryWTriff 2:d08b6a1eaf2b 233 plot_y_from = to;
HenryWTriff 2:d08b6a1eaf2b 234 plot_y_to = from;
HenryWTriff 2:d08b6a1eaf2b 235 } else {
HenryWTriff 2:d08b6a1eaf2b 236 plot_y_from = from;
HenryWTriff 2:d08b6a1eaf2b 237 plot_y_to = to;
HenryWTriff 2:d08b6a1eaf2b 238 }
HenryWTriff 2:d08b6a1eaf2b 239 float x_intercept = from.x; //Calculating the x_intercept
HenryWTriff 2:d08b6a1eaf2b 240 if(solid == true) {
HenryWTriff 2:d08b6a1eaf2b 241 for(int y = plot_y_from.y; y <= plot_y_to.y; y++) {
HenryWTriff 2:d08b6a1eaf2b 242 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 243 LCD.setPixel(plot_y.x, plot_y.y, true); //Plotting the points
HenryWTriff 2:d08b6a1eaf2b 244 }
HenryWTriff 2:d08b6a1eaf2b 245 } else {
HenryWTriff 2:d08b6a1eaf2b 246 for(int y = plot_y_from.y; y <= plot_y_to.y; y+=2) {
HenryWTriff 2:d08b6a1eaf2b 247 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 248 LCD.setPixel(plot_y.x, plot_y.y, true); //Plotting the points
HenryWTriff 2:d08b6a1eaf2b 249 }
HenryWTriff 2:d08b6a1eaf2b 250 }
HenryWTriff 2:d08b6a1eaf2b 251 }
HenryWTriff 3:ceed6d026b8b 252 }
HenryWTriff 3:ceed6d026b8b 253
HenryWTriff 3:ceed6d026b8b 254 //***************
HenryWTriff 3:ceed6d026b8b 255 // DRAW SPRITE
HenryWTriff 3:ceed6d026b8b 256 //***************
HenryWTriff 3:ceed6d026b8b 257
HenryWTriff 3:ceed6d026b8b 258 void Graphics::Graphics_Draw_Sprite(Point_2D point, int x_size, int y_size, int *sprite, N5110 &LCD)
HenryWTriff 3:ceed6d026b8b 259 {
HenryWTriff 3:ceed6d026b8b 260 Point_2D zeroed_point = {Round(point.x) + 42 - x_size, Round(-point.y) + 36 - y_size};
HenryWTriff 3:ceed6d026b8b 261 if(zeroed_point.x <= 84 && zeroed_point.x >= 0 && zeroed_point.y <= 48 && zeroed_point.y >= 0) {
HenryWTriff 3:ceed6d026b8b 262 for(int y = 0; y < y_size; y++) {
HenryWTriff 3:ceed6d026b8b 263 for(int x = 0; x < x_size; x++) {
HenryWTriff 3:ceed6d026b8b 264 if(*((sprite + y*y_size)+x) == 1) {
HenryWTriff 3:ceed6d026b8b 265 LCD.setPixel((zeroed_point.x + x), (zeroed_point.y + y), true);
HenryWTriff 3:ceed6d026b8b 266 } else if(*((sprite + y*y_size)+x) == 0) {
HenryWTriff 3:ceed6d026b8b 267 LCD.setPixel((zeroed_point.x + x), (zeroed_point.y + y), false);
HenryWTriff 3:ceed6d026b8b 268 }
HenryWTriff 3:ceed6d026b8b 269 }
HenryWTriff 3:ceed6d026b8b 270 }
HenryWTriff 3:ceed6d026b8b 271 }
HenryWTriff 2:d08b6a1eaf2b 272 }