ELEC2645 (2019/20) / Mbed 2 deprecated ELEC2645_Project_el19tb

Dependencies:   mbed

Committer:
el19tb
Date:
Sun May 17 21:14:39 2020 +0000
Revision:
35:db257b7bdefc
Parent:
33:011f0f7cf3ce
Child:
42:04e326dcf09b
added levels, object class

Who changed what in which revision?

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