ELEC2645 (2019/20) / Mbed 2 deprecated ELEC2645_Project_el19tb

Dependencies:   mbed

Committer:
el19tb
Date:
Fri May 15 04:02:03 2020 +0000
Revision:
22:17ea297c19b5
Parent:
19:6d9721ffc078
Child:
27:e2af196bd9ab
Child:
28:ab1ad440eff7
Created the first level of cars vehicles, cleaned up a bit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
el19tb 3:648c9d5001be 1 #include "GraphicEngine.h"
el19tb 3:648c9d5001be 2
el19tb 3:648c9d5001be 3 N5110 lcd;
el19tb 3:648c9d5001be 4
el19tb 5:6e3afee7eac3 5 GraphicEngine::GraphicEngine(Chicken *chicken){
el19tb 5:6e3afee7eac3 6 this->chick = chicken;
el19tb 5:6e3afee7eac3 7 }
el19tb 5:6e3afee7eac3 8
el19tb 5:6e3afee7eac3 9 void GraphicEngine::init(){
el19tb 5:6e3afee7eac3 10 lcd.init();
el19tb 5:6e3afee7eac3 11 }
el19tb 5:6e3afee7eac3 12
el19tb 5:6e3afee7eac3 13 void GraphicEngine::showChicken(){
el19tb 5:6e3afee7eac3 14 //fill the chicken with black color
el19tb 5:6e3afee7eac3 15 lcd.drawRect(chick->x, chick->y, chick->width, chick->width, FILL_BLACK);
el19tb 5:6e3afee7eac3 16 }
el19tb 4:aae7f8d4ab78 17
el19tb 19:6d9721ffc078 18 void GraphicEngine::createSafetyLanes(const std::vector<Safety>& safety_lane)
el19tb 19:6d9721ffc078 19 {
el19tb 19:6d9721ffc078 20 Safety temp;
el19tb 19:6d9721ffc078 21 for(unsigned int i = 0; i < safety_lane.size(); i++){
el19tb 19:6d9721ffc078 22 temp.x = safety_lane[i].x;
el19tb 19:6d9721ffc078 23 temp.row = safety_lane[i].row;
el19tb 19:6d9721ffc078 24 temp.c = safety_lane[i].c;
el19tb 19:6d9721ffc078 25
el19tb 19:6d9721ffc078 26 drawIndividualSafety(temp);
el19tb 19:6d9721ffc078 27 }
el19tb 19:6d9721ffc078 28 }
el19tb 19:6d9721ffc078 29
el19tb 19:6d9721ffc078 30 void GraphicEngine::drawIndividualSafety(&Safety lane_obj)
el19tb 19:6d9721ffc078 31 {
el19tb 19:6d9721ffc078 32 switch(lane_obj.c)
el19tb 19:6d9721ffc078 33 {
el19tb 19:6d9721ffc078 34 case 'K':
el19tb 19:6d9721ffc078 35 lcd.drawSprite(lane_obj.x, 48 - 4*lane_obj.row, 4, 4, (int *)safety_lanes_one);
el19tb 19:6d9721ffc078 36 break;
el19tb 19:6d9721ffc078 37 case 'K':
el19tb 19:6d9721ffc078 38 lcd.drawSprite(lane_obj.x, 48 - 4*lane_obj.row, 4, 4, (int *)safety_lanes_two);
el19tb 19:6d9721ffc078 39 break;
el19tb 19:6d9721ffc078 40 }
el19tb 19:6d9721ffc078 41 }
el19tb 19:6d9721ffc078 42
el19tb 16:8a65cccd9685 43 void GraphicEngine::drawFirstSafetyBackground(int x, int row)
el19tb 16:8a65cccd9685 44 {
el19tb 16:8a65cccd9685 45 lcd.drawSprite(x, 48 - 4*row, 4, 4, (int *)safety_lanes_one);
el19tb 16:8a65cccd9685 46 }
el19tb 16:8a65cccd9685 47
el19tb 16:8a65cccd9685 48 void GraphicEngine::drawSecondSafetyBackground(int x, int row)
el19tb 16:8a65cccd9685 49 {
el19tb 16:8a65cccd9685 50 lcd.drawSprite(x, 48 - 4*row, 4, 4, (int *)safety_lane_two);
el19tb 16:8a65cccd9685 51 )
el19tb 16:8a65cccd9685 52
el19tb 15:b15bf9357cd9 53 // this is just going to be white blocks
el19tb 15:b15bf9357cd9 54 // road == '.'
el19tb 15:b15bf9357cd9 55 void GraphhicEngine::drawRoads(int row)
el19tb 15:b15bf9357cd9 56 {
el19tb 15:b15bf9357cd9 57 // draw across the screen width
el19tb 15:b15bf9357cd9 58 for(int a = 0; a < 22; a++){
el19tb 15:b15bf9357cd9 59 showEachRoad(a, row); // x pos is the value of a
el19tb 15:b15bf9357cd9 60 }
el19tb 15:b15bf9357cd9 61 }
el19tb 15:b15bf9357cd9 62
el19tb 15:b15bf9357cd9 63 void GraphicEngine::showEachRoad(int x, int row)
el19tb 15:b15bf9357cd9 64 {
el19tb 15:b15bf9357cd9 65 lcd.drawSprite(x, 48 - 4*row,4, 4, (int *)road);
el19tb 15:b15bf9357cd9 66 }
el19tb 15:b15bf9357cd9 67
el19tb 4:aae7f8d4ab78 68 void GraphicEngine::showCar(Car *car){
el19tb 5:6e3afee7eac3 69 // safety lane
el19tb 5:6e3afee7eac3 70 lcd.drawRect(0, 48 - 4, 84, 4, FILL_TRANSPARENT);
el19tb 5:6e3afee7eac3 71 lcd.drawRect(0, 48 - 4*6, 84, 4, FILL_TRANSPARENT);
el19tb 5:6e3afee7eac3 72
el19tb 15:b15bf9357cd9 73 // draw to screen0
el19tb 5:6e3afee7eac3 74 // create an enum to determine the vehicle type
el19tb 7:1dce07fd0867 75 for(int y = 0; y < 4; y++){
el19tb 5:6e3afee7eac3 76 showIndividualCar(&car[y]);
el19tb 5:6e3afee7eac3 77 }
el19tb 5:6e3afee7eac3 78 }
el19tb 5:6e3afee7eac3 79
el19tb 22:17ea297c19b5 80 void GraphicEngine::displayVehicle(int x, int row, char c)
el19tb 22:17ea297c19b5 81 {
el19tb 22:17ea297c19b5 82 switch(obj)
el19tb 22:17ea297c19b5 83 {
el19tb 22:17ea297c19b5 84 case 'L': lcd.drawSprite(x, 48 - 4y, 4, 4, (int *)left_racer);
el19tb 22:17ea297c19b5 85 break;
el19tb 22:17ea297c19b5 86 case 'R' : lcd.drawSprite(x, 48 - 4*y, 4, 4, (int *)right_racer);
el19tb 22:17ea297c19b5 87 break;
el19tb 22:17ea297c19b5 88 case 'B': lcd.drawSprite(x, 48 - 4*y, 4, 6, (int *)bus);
el19tb 22:17ea297c19b5 89 break;
el19tb 22:17ea297c19b5 90 case 'N': lcd.drawSprite(x, 48 - 4*y, 4, 4, (int *)right_normal);
el19tb 22:17ea297c19b5 91 break;
el19tb 22:17ea297c19b5 92 case 'X': lcd.drawSprite(x, 48 - 4*y, 4, 4, (int *)left_normal);
el19tb 22:17ea297c19b5 93 break;
el19tb 22:17ea297c19b5 94 case '-': lcd.drawSprite(x, 48 - 4*y, 4, 4, FILL_WHITE);
el19tb 22:17ea297c19b5 95 break;
el19tb 22:17ea297c19b5 96 }
el19tb 22:17ea297c19b5 97 }
el19tb 22:17ea297c19b5 98
el19tb 5:6e3afee7eac3 99 void GraphicEngine::showIndividualCar(Car *car){
el19tb 5:6e3afee7eac3 100 DrawCar temp_car;
el19tb 5:6e3afee7eac3 101
el19tb 5:6e3afee7eac3 102 temp_car.x = car->vehicle.x;
el19tb 5:6e3afee7eac3 103 temp_car.y = car->vehicle.y;
el19tb 5:6e3afee7eac3 104 temp_car.width = car->vehicle.width;
el19tb 5:6e3afee7eac3 105 temp_car.height = car->vehicle.height;
el19tb 5:6e3afee7eac3 106
el19tb 5:6e3afee7eac3 107 displayCar(temp_car);
el19tb 5:6e3afee7eac3 108 }
el19tb 5:6e3afee7eac3 109
el19tb 17:67dbdfcdcec2 110 void GraphicEngine::showWater(Water *water)
el19tb 17:67dbdfcdcec2 111 {
el19tb 17:67dbdfcdcec2 112 for(int i = 0; i < 22; i++)
el19tb 17:67dbdfcdcec2 113 {
el19tb 17:67dbdfcdcec2 114 showIndividualWater(&water[i]);
el19tb 17:67dbdfcdcec2 115 }
el19tb 17:67dbdfcdcec2 116 }
el19tb 17:67dbdfcdcec2 117
el19tb 17:67dbdfcdcec2 118 void GraphicEngine::showIndividualWater(Water *water)
el19tb 17:67dbdfcdcec2 119 {
el19tb 17:67dbdfcdcec2 120 // POTENTIAL BUG, add break later
el19tb 17:67dbdfcdcec2 121 switch(water->sprite){
el19tb 17:67dbdfcdcec2 122 case 'F':
el19tb 17:67dbdfcdcec2 123 displayFirstWater(water);
el19tb 17:67dbdfcdcec2 124 case 'S':
el19tb 17:67dbdfcdcec2 125 displaySecondWater(water);
el19tb 17:67dbdfcdcec2 126 case 'T':
el19tb 17:67dbdfcdcec2 127 displayThirdWater(water);
el19tb 17:67dbdfcdcec2 128 }
el19tb 17:67dbdfcdcec2 129 }
el19tb 17:67dbdfcdcec2 130
el19tb 19:6d9721ffc078 131 void GraphicEngine::drawWater(std::vector<Water> &water_lane)
el19tb 17:67dbdfcdcec2 132 {
el19tb 19:6d9721ffc078 133 Water temp;
el19tb 19:6d9721ffc078 134 for(unsigned int i = 0; i < water_lane.size(); i++)
el19tb 19:6d9721ffc078 135 {
el19tb 19:6d9721ffc078 136 temp.x = water_lane[i].x;
el19tb 19:6d9721ffc078 137 temp.row = water_lane[i].row;
el19tb 19:6d9721ffc078 138 temp.char = water_lane[i].c;
el19tb 19:6d9721ffc078 139
el19tb 19:6d9721ffc078 140 drawIndividualWater(&temp);
el19tb 19:6d9721ffc078 141 }
el19tb 17:67dbdfcdcec2 142 }
el19tb 17:67dbdfcdcec2 143
el19tb 19:6d9721ffc078 144 void GraphicEngine::showIndividualWater(Water &temp)
el19tb 17:67dbdfcdcec2 145 {
el19tb 19:6d9721ffc078 146 switch(temp.c)
el19tb 19:6d9721ffc078 147 {
el19tb 19:6d9721ffc078 148 case 'F':
el19tb 19:6d9721ffc078 149 lcd.drawSprite(temp.x,48 - 4*temp.y, 4, 4, (int *)first_water);
el19tb 19:6d9721ffc078 150 break;
el19tb 19:6d9721ffc078 151 case 'S':
el19tb 19:6d9721ffc078 152 lcd.drawSprite(temp.x,48 - 4*temp.y, 4, 4, (int *)second_water);
el19tb 19:6d9721ffc078 153 break;
el19tb 19:6d9721ffc078 154 case 'T':
el19tb 19:6d9721ffc078 155 lcd.drawSprite(temp.x, 48 - 4*temp.y, 4, 4, (int *)third_water);
el19tb 19:6d9721ffc078 156 break;
el19tb 19:6d9721ffc078 157 }
el19tb 17:67dbdfcdcec2 158 }
el19tb 13:cd6d2f999057 159
el19tb 14:6fe667ec957e 160 // water = ','
el19tb 14:6fe667ec957e 161 void GraphicEngine::drawWater(char water, int x, int y, int row, in col)
el19tb 14:6fe667ec957e 162 {
el19tb 14:6fe667ec957e 163 int rand_water = 0;
el19tb 14:6fe667ec957e 164 rand_water = (rand() % 3) + 1;
el19tb 14:6fe667ec957e 165
el19tb 15:b15bf9357cd9 166 // for design purposes the water will have different sprites
el19tb 14:6fe667ec957e 167 switch(rand_water)
el19tb 14:6fe667ec957e 168 {
el19tb 15:b15bf9357cd9 169 case 1:
el19tb 15:b15bf9357cd9 170 lcd.drawSprite(x, y, rows, cols, (int *)first_water);
el19tb 15:b15bf9357cd9 171
el19tb 15:b15bf9357cd9 172 case 2:
el19tb 15:b15bf9357cd9 173 lcd.drawSprite(x, y, rows, cols, (int *)second_water);
el19tb 15:b15bf9357cd9 174
el19tb 15:b15bf9357cd9 175 case 3:
el19tb 15:b15bf9357cd9 176 lcd.drawSprite(x, y, rows, cols, (int *)third_water);
el19tb 15:b15bf9357cd9 177 }
el19tb 14:6fe667ec957e 178 }
el19tb 13:cd6d2f999057 179
el19tb 15:b15bf9357cd9 180 void GraphicEngine::displayCar(DrawCar &size)
el19tb 15:b15bf9357cd9 181 {
el19tb 8:52794de935b2 182 lcd.drawRect(size.x, size.y, size.width, size.height, FILL_TRANSPARENT);
el19tb 5:6e3afee7eac3 183 }
el19tb 5:6e3afee7eac3 184
el19tb 18:6be4c3c94a3d 185 void GraphicEngine::getRoadObjects(const std::vector<Background>& road_lanes)
el19tb 18:6be4c3c94a3d 186 {
el19tb 18:6be4c3c94a3d 187 DrawRoad road;
el19tb 18:6be4c3c94a3d 188
el19tb 18:6be4c3c94a3d 189 for(unsigned int i = 0; i < road_lanes.size(); i++)
el19tb 18:6be4c3c94a3d 190 {
el19tb 18:6be4c3c94a3d 191 road.x = road_lanes[i].x;
el19tb 18:6be4c3c94a3d 192 road.row = road_lanes[i].row;
el19tb 18:6be4c3c94a3d 193 drawIndividualRoadObj(road);
el19tb 18:6be4c3c94a3d 194 }
el19tb 18:6be4c3c94a3d 195 }
el19tb 18:6be4c3c94a3d 196
el19tb 18:6be4c3c94a3d 197 void GraphicEngine::drawIndividualRoadObj(DrawRoad &obj)
el19tb 18:6be4c3c94a3d 198 {
el19tb 18:6be4c3c94a3d 199 lcd.drawSprite(obj.x, 48 - 4*obj.y, 4, 4, (int *) road);
el19tb 18:6be4c3c94a3d 200 }
el19tb 18:6be4c3c94a3d 201
el19tb 5:6e3afee7eac3 202 void GraphicEngine::printTest(){
el19tb 8:52794de935b2 203 lcd.printString("SQUISHED", 1, 1);
el19tb 8:52794de935b2 204 }
el19tb 8:52794de935b2 205
el19tb 8:52794de935b2 206 void GraphicEngine::print(){
el19tb 8:52794de935b2 207 lcd.printString("DROWNED",1,1);
el19tb 3:648c9d5001be 208 }
el19tb 3:648c9d5001be 209
el19tb 3:648c9d5001be 210 void GraphicEngine::contrast(){
el19tb 3:648c9d5001be 211 lcd.setContrast(0.4);
el19tb 3:648c9d5001be 212 }
el19tb 3:648c9d5001be 213
el19tb 3:648c9d5001be 214 void GraphicEngine::clear(){
el19tb 3:648c9d5001be 215 lcd.clear();
el19tb 3:648c9d5001be 216 }
el19tb 3:648c9d5001be 217
el19tb 3:648c9d5001be 218 void GraphicEngine::refresh(){
el19tb 3:648c9d5001be 219 lcd.refresh();
el19tb 3:648c9d5001be 220 }
el19tb 3:648c9d5001be 221
el19tb 3:648c9d5001be 222 void GraphicEngine::backLightOn(){
el19tb 3:648c9d5001be 223 lcd.backLightOn();
el19tb 3:648c9d5001be 224 }