Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed
Diff: GraphicEngine/GraphicEngine.cpp
- Revision:
- 35:db257b7bdefc
- Parent:
- 33:011f0f7cf3ce
- Child:
- 42:04e326dcf09b
--- a/GraphicEngine/GraphicEngine.cpp Sat May 16 06:28:48 2020 +0000
+++ b/GraphicEngine/GraphicEngine.cpp Sun May 17 21:14:39 2020 +0000
@@ -0,0 +1,229 @@
+#include "GraphicEngine.h"
+
+N5110 lcd;
+
+GraphicEngine::GraphicEngine(Chicken *chicken){
+ this->chick = chicken;
+}
+
+void GraphicEngine::init(){
+ lcd.init();
+}
+
+void GraphicEngine::showChicken(){
+ //fill the chicken with black color
+ lcd.drawRect(chick->x, chick->y, chick->width, chick->width, FILL_BLACK);
+}
+
+void GraphicEngine::createSafetyLanes(const std::vector<Safety>& safety_lane)
+{
+ Safety temp;
+ for(unsigned int i = 0; i < safety_lane.size(); i++){
+ temp.x = safety_lane[i].x;
+ temp.row = safety_lane[i].row;
+ temp.c = safety_lane[i].c;
+
+ drawIndividualSafety(temp);
+ }
+}
+
+void GraphicEngine::drawIndividualSafety(&Safety lane_obj)
+{
+ switch(lane_obj.c)
+ {
+ case 'K':
+ lcd.drawSprite(lane_obj.x, 48 - 4*lane_obj.row, 4, 4, (int *)safety_lanes_one);
+ break;
+ case 'K':
+ lcd.drawSprite(lane_obj.x, 48 - 4*lane_obj.row, 4, 4, (int *)safety_lanes_two);
+ break;
+ }
+}
+
+void GraphicEngine::drawFirstSafetyBackground(int x, int row)
+{
+ lcd.drawSprite(x, 48 - 4*row, 4, 4, (int *)safety_lanes_one);
+}
+
+void GraphicEngine::drawSecondSafetyBackground(int x, int row)
+{
+ lcd.drawSprite(x, 48 - 4*row, 4, 4, (int *)safety_lane_two);
+)
+
+void GraphicEngine::drawGoal(int x, int row)
+{
+ lcd.drawSprite(x, row, 8, 8, (int *)end_post);
+}
+
+// this is just going to be white blocks
+// road == '.'
+void GraphhicEngine::drawRoads(int row)
+{
+ // draw across the screen width
+ for(int a = 0; a < 22; a++){
+ showEachRoad(a, row); // x pos is the value of a
+ }
+}
+
+void GraphicEngine::showEachRoad(int x, int row)
+{
+ lcd.drawSprite(x, 48 - 4*row,4, 4, (int *)road);
+}
+
+void GraphicEngine::showCar(Car *car){
+ // safety lane
+ lcd.drawRect(0, 48 - 4, 84, 4, FILL_TRANSPARENT);
+ lcd.drawRect(0, 48 - 4*6, 84, 4, FILL_TRANSPARENT);
+
+ // draw to screen0
+ // create an enum to determine the vehicle type
+ for(int y = 0; y < 4; y++){
+ showIndividualCar(&car[y]);
+ }
+}
+
+void GraphicEngine::displayVehicle(int x, int row, char c)
+{
+ switch(obj)
+ {
+ case 'L': lcd.drawSprite(x, 48 - 4y, 4, 4, (int *)left_racer);
+ break;
+ case 'R' : lcd.drawSprite(x, 48 - 4*y, 4, 4, (int *)right_racer);
+ break;
+ case 'B': lcd.drawSprite(x, 48 - 4*y, 4, 6, (int *)bus);
+ break;
+ case 'N': lcd.drawSprite(x, 48 - 4*y, 4, 4, (int *)right_normal);
+ break;
+ case 'X': lcd.drawSprite(x, 48 - 4*y, 4, 4, (int *)left_normal);
+ break;
+ case '-': lcd.drawSprite(x, 48 - 4*y, 4, 4, FILL_WHITE);
+ break;
+ }
+}
+
+void GraphicEngine::showIndividualCar(Car *car){
+ DrawCar temp_car;
+
+ temp_car.x = car->vehicle.x;
+ temp_car.y = car->vehicle.y;
+ temp_car.width = car->vehicle.width;
+ temp_car.height = car->vehicle.height;
+
+ displayCar(temp_car);
+}
+
+void GraphicEngine::showWater(Water *water)
+{
+ for(int i = 0; i < 22; i++)
+ {
+ showIndividualWater(&water[i]);
+ }
+}
+
+void GraphicEngine::showIndividualWater(Water *water)
+{
+ // POTENTIAL BUG, add break later
+ switch(water->sprite){
+ case 'F':
+ displayFirstWater(water);
+ case 'S':
+ displaySecondWater(water);
+ case 'T':
+ displayThirdWater(water);
+ }
+}
+
+void GraphicEngine::drawWater(std::vector<Water> &water_lane)
+{
+ Water temp;
+ for(unsigned int i = 0; i < water_lane.size(); i++)
+ {
+ temp.x = water_lane[i].x;
+ temp.row = water_lane[i].row;
+ temp.char = water_lane[i].c;
+
+ drawIndividualWater(&temp);
+ }
+}
+
+void GraphicEngine::showIndividualWater(Water &temp)
+{
+ switch(temp.c)
+ {
+ case 'F':
+ lcd.drawSprite(temp.x,48 - 4*temp.y, 4, 4, (int *)first_water);
+ break;
+ case 'S':
+ lcd.drawSprite(temp.x,48 - 4*temp.y, 4, 4, (int *)second_water);
+ break;
+ case 'T':
+ lcd.drawSprite(temp.x, 48 - 4*temp.y, 4, 4, (int *)third_water);
+ break;
+ }
+}
+
+// water = ','
+void GraphicEngine::drawWater(char water, int x, int y, int row, in col)
+{
+ int rand_water = 0;
+ rand_water = (rand() % 3) + 1;
+
+ // for design purposes the water will have different sprites
+ switch(rand_water)
+ {
+ case 1:
+ lcd.drawSprite(x, y, rows, cols, (int *)first_water);
+
+ case 2:
+ lcd.drawSprite(x, y, rows, cols, (int *)second_water);
+
+ case 3:
+ lcd.drawSprite(x, y, rows, cols, (int *)third_water);
+ }
+}
+
+void GraphicEngine::displayCar(DrawCar &size)
+{
+ lcd.drawRect(size.x, size.y, size.width, size.height, FILL_TRANSPARENT);
+}
+
+void GraphicEngine::getRoadObjects(const std::vector<Background>& road_lanes)
+{
+ DrawRoad road;
+
+ for(unsigned int i = 0; i < road_lanes.size(); i++)
+ {
+ road.x = road_lanes[i].x;
+ road.row = road_lanes[i].row;
+ drawIndividualRoadObj(road);
+ }
+}
+
+void GraphicEngine::drawIndividualRoadObj(DrawRoad &obj)
+{
+ lcd.drawSprite(obj.x, 48 - 4*obj.y, 4, 4, (int *) road);
+}
+
+void GraphicEngine::printTest(){
+ lcd.printString("SQUISHED", 1, 1);
+}
+
+void GraphicEngine::print(){
+ lcd.printString("DROWNED",1,1);
+}
+
+void GraphicEngine::contrast(){
+ lcd.setContrast(0.4);
+}
+
+void GraphicEngine::clear(){
+ lcd.clear();
+}
+
+void GraphicEngine::refresh(){
+ lcd.refresh();
+}
+
+void GraphicEngine::backLightOn(){
+ lcd.backLightOn();
+}
\ No newline at end of file