JianWei Lee
/
project_game
Meteor defense project
GUI/GUI.cpp@50:082feedcdd22, 2017-05-04 (annotated)
- Committer:
- jasper0712
- Date:
- Thu May 04 16:55:26 2017 +0000
- Revision:
- 50:082feedcdd22
converted library to folder
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
jasper0712 | 50:082feedcdd22 | 1 | #include "GUI.h" |
jasper0712 | 50:082feedcdd22 | 2 | |
jasper0712 | 50:082feedcdd22 | 3 | |
jasper0712 | 50:082feedcdd22 | 4 | GUI::GUI() |
jasper0712 | 50:082feedcdd22 | 5 | { |
jasper0712 | 50:082feedcdd22 | 6 | |
jasper0712 | 50:082feedcdd22 | 7 | } |
jasper0712 | 50:082feedcdd22 | 8 | |
jasper0712 | 50:082feedcdd22 | 9 | GUI::~GUI() |
jasper0712 | 50:082feedcdd22 | 10 | { |
jasper0712 | 50:082feedcdd22 | 11 | |
jasper0712 | 50:082feedcdd22 | 12 | } |
jasper0712 | 50:082feedcdd22 | 13 | void GUI::startingMenu(N5110 &lcd) { |
jasper0712 | 50:082feedcdd22 | 14 | lcd.printString("Meteor defense",0,0); |
jasper0712 | 50:082feedcdd22 | 15 | lcd.printString("Press start",10,2); |
jasper0712 | 50:082feedcdd22 | 16 | lcd.printString("to play",10,3); |
jasper0712 | 50:082feedcdd22 | 17 | lcd.printString("by Lee.",48,5); |
jasper0712 | 50:082feedcdd22 | 18 | } |
jasper0712 | 50:082feedcdd22 | 19 | void GUI::upgrades(int a, int b, int c, int d, int e, int f, int g, int h, int i, int j, int k, Gamepad &pad, N5110 &lcd) { |
jasper0712 | 50:082feedcdd22 | 20 | printf("test struct passing %d %d %d %d %d %d %d %d \n",a,b,c,d,e,f,g,h); |
jasper0712 | 50:082feedcdd22 | 21 | Cursors _cursor = cursor(pad); |
jasper0712 | 50:082feedcdd22 | 22 | if (pointsGiven == 0){ //if upgrade points are not yet given |
jasper0712 | 50:082feedcdd22 | 23 | pointsUpgrade += 2; //give the points |
jasper0712 | 50:082feedcdd22 | 24 | pointsGiven = 1; |
jasper0712 | 50:082feedcdd22 | 25 | } |
jasper0712 | 50:082feedcdd22 | 26 | if (upgrading1_flag == 0) { //main upgrades page |
jasper0712 | 50:082feedcdd22 | 27 | main_UpgradesPage(lcd); |
jasper0712 | 50:082feedcdd22 | 28 | cursor_y = _cursor.number_y; |
jasper0712 | 50:082feedcdd22 | 29 | drawCursor(cursor_y, lcd); |
jasper0712 | 50:082feedcdd22 | 30 | printf("cursor_y = %d \n",cursor_y); |
jasper0712 | 50:082feedcdd22 | 31 | } else { //weapon picked |
jasper0712 | 50:082feedcdd22 | 32 | cursor_y1 = _cursor.number_y; |
jasper0712 | 50:082feedcdd22 | 33 | drawCursor(cursor_y1, lcd); |
jasper0712 | 50:082feedcdd22 | 34 | //picking weapon's variables |
jasper0712 | 50:082feedcdd22 | 35 | if (cursor_y == 0){ |
jasper0712 | 50:082feedcdd22 | 36 | //printf("laser selected \n"); |
jasper0712 | 50:082feedcdd22 | 37 | laser_UpgradesPage(a, lcd); |
jasper0712 | 50:082feedcdd22 | 38 | } else if (cursor_y == 1){ |
jasper0712 | 50:082feedcdd22 | 39 | //printf("bomb selected \n"); |
jasper0712 | 50:082feedcdd22 | 40 | bomb_UpgradesPage(b, c, d, lcd); |
jasper0712 | 50:082feedcdd22 | 41 | cursor_y = 1; |
jasper0712 | 50:082feedcdd22 | 42 | } else if (cursor_y == 2){ |
jasper0712 | 50:082feedcdd22 | 43 | //printf("drone selected \n"); |
jasper0712 | 50:082feedcdd22 | 44 | drone_UpgradesPage(e, f, lcd); |
jasper0712 | 50:082feedcdd22 | 45 | } else if (cursor_y == 3){ |
jasper0712 | 50:082feedcdd22 | 46 | //printf("shield selected \n"); |
jasper0712 | 50:082feedcdd22 | 47 | shield_UpgradesPage(g, h, lcd); |
jasper0712 | 50:082feedcdd22 | 48 | } else if (cursor_y == 4) { |
jasper0712 | 50:082feedcdd22 | 49 | cannon_UpgradesPage(i, j, k, lcd); |
jasper0712 | 50:082feedcdd22 | 50 | cursor_y = 4; |
jasper0712 | 50:082feedcdd22 | 51 | } |
jasper0712 | 50:082feedcdd22 | 52 | if (pad.check_event(Gamepad::BACK_PRESSED)) { //if back button is pressed |
jasper0712 | 50:082feedcdd22 | 53 | upgrading1_flag = 0; //back to the main_upgrades. |
jasper0712 | 50:082feedcdd22 | 54 | cc = 0; // reset the cursor |
jasper0712 | 50:082feedcdd22 | 55 | } |
jasper0712 | 50:082feedcdd22 | 56 | upgradesData(pad); |
jasper0712 | 50:082feedcdd22 | 57 | } |
jasper0712 | 50:082feedcdd22 | 58 | pad_events(pad); |
jasper0712 | 50:082feedcdd22 | 59 | } |
jasper0712 | 50:082feedcdd22 | 60 | void GUI::pad_events(Gamepad &pad) { |
jasper0712 | 50:082feedcdd22 | 61 | if (pad.check_event(Gamepad::A_PRESSED)) { //if A button is pressed |
jasper0712 | 50:082feedcdd22 | 62 | upgrading1_flag = 1; //go into the weapons picked. |
jasper0712 | 50:082feedcdd22 | 63 | cc = 0; //reset the cursor |
jasper0712 | 50:082feedcdd22 | 64 | pad.tone(750.0,0.1); |
jasper0712 | 50:082feedcdd22 | 65 | preventDoubleClick(pad); |
jasper0712 | 50:082feedcdd22 | 66 | } |
jasper0712 | 50:082feedcdd22 | 67 | if (pointsUpgrade == 0) { // when no more points available |
jasper0712 | 50:082feedcdd22 | 68 | if (pad.check_event(Gamepad::START_PRESSED)) { //pressing start will complete the upgrades |
jasper0712 | 50:082feedcdd22 | 69 | pointsGiven = 0; |
jasper0712 | 50:082feedcdd22 | 70 | saveTheData_flag = 1; |
jasper0712 | 50:082feedcdd22 | 71 | preventDoubleClick(pad); |
jasper0712 | 50:082feedcdd22 | 72 | } |
jasper0712 | 50:082feedcdd22 | 73 | } |
jasper0712 | 50:082feedcdd22 | 74 | } |
jasper0712 | 50:082feedcdd22 | 75 | void GUI::upgradesData(Gamepad &pad) { |
jasper0712 | 50:082feedcdd22 | 76 | //printf("p = %d \n",pointsUpgrade); |
jasper0712 | 50:082feedcdd22 | 77 | if (pointsUpgrade == 2) { //if there are 2 points remaining |
jasper0712 | 50:082feedcdd22 | 78 | if (pad.check_event(Gamepad::A_PRESSED)) { //if A button is pressed inside the weapons picked. |
jasper0712 | 50:082feedcdd22 | 79 | pointsUpgrade -= 1; // minus an upgrade point |
jasper0712 | 50:082feedcdd22 | 80 | upgradePicked = cursor_y; //saving upgrades data |
jasper0712 | 50:082feedcdd22 | 81 | upgradePicked1 = cursor_y1; |
jasper0712 | 50:082feedcdd22 | 82 | pad.tone(750.0,0.1); |
jasper0712 | 50:082feedcdd22 | 83 | preventDoubleClick(pad); |
jasper0712 | 50:082feedcdd22 | 84 | //printf("p = %d, upgradePicked = %d, upgradePicked1 = %d \n",pointsUpgrade,upgradePicked,upgradePicked1); |
jasper0712 | 50:082feedcdd22 | 85 | } |
jasper0712 | 50:082feedcdd22 | 86 | } else if (pointsUpgrade == 1) { |
jasper0712 | 50:082feedcdd22 | 87 | if (pad.check_event(Gamepad::A_PRESSED)) { //if A button is pressed inside the weapons picked. |
jasper0712 | 50:082feedcdd22 | 88 | pointsUpgrade -= 1; // minus an upgrade point |
jasper0712 | 50:082feedcdd22 | 89 | upgrade1Picked = cursor_y; //saving upgrades data |
jasper0712 | 50:082feedcdd22 | 90 | upgrade1Picked1 = cursor_y1; |
jasper0712 | 50:082feedcdd22 | 91 | pad.tone(750.0,0.1); |
jasper0712 | 50:082feedcdd22 | 92 | preventDoubleClick(pad); |
jasper0712 | 50:082feedcdd22 | 93 | //printf("p = %d, upgrade1Picked = %d, upgrade1Picked1 = %d \n",pointsUpgrade,upgrade1Picked,upgrade1Picked1); |
jasper0712 | 50:082feedcdd22 | 94 | } |
jasper0712 | 50:082feedcdd22 | 95 | } else if (pointsUpgrade == 0) {//if no more points left, bring the player back to main upgrade page |
jasper0712 | 50:082feedcdd22 | 96 | upgrading1_flag = 0; |
jasper0712 | 50:082feedcdd22 | 97 | } |
jasper0712 | 50:082feedcdd22 | 98 | } |
jasper0712 | 50:082feedcdd22 | 99 | void GUI::main_UpgradesPage(N5110 &lcd) { |
jasper0712 | 50:082feedcdd22 | 100 | options = 4; // 0, 1, 2, 3 |
jasper0712 | 50:082feedcdd22 | 101 | sprintf(pointsRemaining, "Points : %d",pointsUpgrade); |
jasper0712 | 50:082feedcdd22 | 102 | lcd.printString(pointsRemaining,1,0); |
jasper0712 | 50:082feedcdd22 | 103 | lcd.printString("Laser",10,1); //option 0 |
jasper0712 | 50:082feedcdd22 | 104 | lcd.printString("Bomb",10,2); //option 1 |
jasper0712 | 50:082feedcdd22 | 105 | lcd.printString("Drone",10,3); //option 2 |
jasper0712 | 50:082feedcdd22 | 106 | lcd.printString("Shield",10,4); //option 3 |
jasper0712 | 50:082feedcdd22 | 107 | lcd.printString("Cannon",10,5); //option 4 |
jasper0712 | 50:082feedcdd22 | 108 | if (pointsUpgrade == 0) { //if no more points left. |
jasper0712 | 50:082feedcdd22 | 109 | lcd.printString("Done",57,5); |
jasper0712 | 50:082feedcdd22 | 110 | } |
jasper0712 | 50:082feedcdd22 | 111 | } |
jasper0712 | 50:082feedcdd22 | 112 | void GUI::laser_UpgradesPage(int laserDamage, N5110 &lcd) { |
jasper0712 | 50:082feedcdd22 | 113 | options = 0; |
jasper0712 | 50:082feedcdd22 | 114 | sprintf(upgrade1, "Damage %d", laserDamage); |
jasper0712 | 50:082feedcdd22 | 115 | lcd.printString("Laser",1,0); |
jasper0712 | 50:082feedcdd22 | 116 | lcd.printString(upgrade1,10,1); |
jasper0712 | 50:082feedcdd22 | 117 | } |
jasper0712 | 50:082feedcdd22 | 118 | void GUI::bomb_UpgradesPage(int bombDamage, int bombR, int bombCooldown, N5110 &lcd) { |
jasper0712 | 50:082feedcdd22 | 119 | options = 2; |
jasper0712 | 50:082feedcdd22 | 120 | sprintf(upgrade1, "Damage %d", bombDamage); |
jasper0712 | 50:082feedcdd22 | 121 | sprintf(upgrade2, "Radius %d", bombR); |
jasper0712 | 50:082feedcdd22 | 122 | sprintf(upgrade3, "Cooldown %d", bombCooldown); |
jasper0712 | 50:082feedcdd22 | 123 | lcd.printString("Bomb",1,0); |
jasper0712 | 50:082feedcdd22 | 124 | lcd.printString(upgrade1,10,1); |
jasper0712 | 50:082feedcdd22 | 125 | lcd.printString(upgrade2,10,2); |
jasper0712 | 50:082feedcdd22 | 126 | lcd.printString(upgrade3,10,3); |
jasper0712 | 50:082feedcdd22 | 127 | } |
jasper0712 | 50:082feedcdd22 | 128 | void GUI::drone_UpgradesPage(int droneDamage, int droneRange, N5110 &lcd) { |
jasper0712 | 50:082feedcdd22 | 129 | options = 1; |
jasper0712 | 50:082feedcdd22 | 130 | sprintf(upgrade1, "Damage %d", droneDamage); |
jasper0712 | 50:082feedcdd22 | 131 | sprintf(upgrade2, "Atk Range %d", droneRange); |
jasper0712 | 50:082feedcdd22 | 132 | lcd.printString("Drone",1,0); |
jasper0712 | 50:082feedcdd22 | 133 | lcd.printString(upgrade1,10,1); |
jasper0712 | 50:082feedcdd22 | 134 | lcd.printString(upgrade2,10,2); |
jasper0712 | 50:082feedcdd22 | 135 | } |
jasper0712 | 50:082feedcdd22 | 136 | void GUI::shield_UpgradesPage(int shieldCapacity, int shieldRegenRate, N5110 &lcd) { |
jasper0712 | 50:082feedcdd22 | 137 | options = 1; |
jasper0712 | 50:082feedcdd22 | 138 | sprintf(upgrade1, "Cpcty %d", shieldCapacity); |
jasper0712 | 50:082feedcdd22 | 139 | sprintf(upgrade2, "RegenRate %d", shieldRegenRate); |
jasper0712 | 50:082feedcdd22 | 140 | lcd.printString("Shield",1,0); |
jasper0712 | 50:082feedcdd22 | 141 | lcd.printString(upgrade1,10,1); |
jasper0712 | 50:082feedcdd22 | 142 | lcd.printString(upgrade2,10,2); |
jasper0712 | 50:082feedcdd22 | 143 | } |
jasper0712 | 50:082feedcdd22 | 144 | void GUI::cannon_UpgradesPage(int cannonDamage, int cannonCapacity, int cannonRegenRate, N5110 &lcd) { |
jasper0712 | 50:082feedcdd22 | 145 | options = 2; |
jasper0712 | 50:082feedcdd22 | 146 | sprintf(upgrade1, "Damage %d", cannonDamage); |
jasper0712 | 50:082feedcdd22 | 147 | sprintf(upgrade2, "Cpcty %d", cannonCapacity); |
jasper0712 | 50:082feedcdd22 | 148 | sprintf(upgrade3, "RegenRate %d", cannonRegenRate); |
jasper0712 | 50:082feedcdd22 | 149 | lcd.printString("Cannon",1,0); |
jasper0712 | 50:082feedcdd22 | 150 | lcd.printString(upgrade1,10,1); |
jasper0712 | 50:082feedcdd22 | 151 | lcd.printString(upgrade2,10,2); |
jasper0712 | 50:082feedcdd22 | 152 | lcd.printString(upgrade3,10,3); |
jasper0712 | 50:082feedcdd22 | 153 | } |
jasper0712 | 50:082feedcdd22 | 154 | Data GUI::get_data() { |
jasper0712 | 50:082feedcdd22 | 155 | Data sd = {upgradePicked, |
jasper0712 | 50:082feedcdd22 | 156 | upgradePicked1, |
jasper0712 | 50:082feedcdd22 | 157 | upgrade1Picked, |
jasper0712 | 50:082feedcdd22 | 158 | upgrade1Picked1, |
jasper0712 | 50:082feedcdd22 | 159 | }; |
jasper0712 | 50:082feedcdd22 | 160 | return sd; |
jasper0712 | 50:082feedcdd22 | 161 | } |
jasper0712 | 50:082feedcdd22 | 162 | Cursors GUI::cursor(Gamepad &pad) { |
jasper0712 | 50:082feedcdd22 | 163 | Vector2D coordinate = pad.get_coord(); |
jasper0712 | 50:082feedcdd22 | 164 | float y = coordinate.y; |
jasper0712 | 50:082feedcdd22 | 165 | //printf(" y = %f \n",y); |
jasper0712 | 50:082feedcdd22 | 166 | if (y < -0.8f) { |
jasper0712 | 50:082feedcdd22 | 167 | printf("going down \n"); |
jasper0712 | 50:082feedcdd22 | 168 | if (cc < options) { |
jasper0712 | 50:082feedcdd22 | 169 | cc += 1; |
jasper0712 | 50:082feedcdd22 | 170 | //printf("cc = %d \n",cc); |
jasper0712 | 50:082feedcdd22 | 171 | while (1) { |
jasper0712 | 50:082feedcdd22 | 172 | //printf("release joystick pls."); |
jasper0712 | 50:082feedcdd22 | 173 | //printf("cc = %d \n",cc); |
jasper0712 | 50:082feedcdd22 | 174 | wait(0.1); |
jasper0712 | 50:082feedcdd22 | 175 | Vector2D coordinate = pad.get_coord(); |
jasper0712 | 50:082feedcdd22 | 176 | float y = coordinate.y; |
jasper0712 | 50:082feedcdd22 | 177 | if (y > -0.1f) { |
jasper0712 | 50:082feedcdd22 | 178 | break; // when joystick released. break out of this while loop. |
jasper0712 | 50:082feedcdd22 | 179 | } |
jasper0712 | 50:082feedcdd22 | 180 | } |
jasper0712 | 50:082feedcdd22 | 181 | } |
jasper0712 | 50:082feedcdd22 | 182 | } |
jasper0712 | 50:082feedcdd22 | 183 | if (y > 0.8f) { |
jasper0712 | 50:082feedcdd22 | 184 | printf("going up \n"); |
jasper0712 | 50:082feedcdd22 | 185 | if (cc > 0) { |
jasper0712 | 50:082feedcdd22 | 186 | cc -= 1; |
jasper0712 | 50:082feedcdd22 | 187 | //("cc = %d /n",cc); |
jasper0712 | 50:082feedcdd22 | 188 | while (1) { |
jasper0712 | 50:082feedcdd22 | 189 | //printf("release joystick pls. "); |
jasper0712 | 50:082feedcdd22 | 190 | //printf("cc = %d /n",cc); |
jasper0712 | 50:082feedcdd22 | 191 | wait(0.1); |
jasper0712 | 50:082feedcdd22 | 192 | Vector2D coordinate = pad.get_coord(); |
jasper0712 | 50:082feedcdd22 | 193 | float y = coordinate.y; |
jasper0712 | 50:082feedcdd22 | 194 | if (y < 0.1f) { |
jasper0712 | 50:082feedcdd22 | 195 | break; //when joystick released. break out of this while loop. |
jasper0712 | 50:082feedcdd22 | 196 | } |
jasper0712 | 50:082feedcdd22 | 197 | } |
jasper0712 | 50:082feedcdd22 | 198 | } |
jasper0712 | 50:082feedcdd22 | 199 | } |
jasper0712 | 50:082feedcdd22 | 200 | Cursors _cursor = {cc}; |
jasper0712 | 50:082feedcdd22 | 201 | return _cursor; |
jasper0712 | 50:082feedcdd22 | 202 | } |
jasper0712 | 50:082feedcdd22 | 203 | void GUI::drawCursor(int Cy, N5110 &lcd){ //simple square cursor |
jasper0712 | 50:082feedcdd22 | 204 | lcd.setPixel(4,11 + Cy * 8); |
jasper0712 | 50:082feedcdd22 | 205 | lcd.setPixel(5,11 + Cy * 8); |
jasper0712 | 50:082feedcdd22 | 206 | lcd.setPixel(4,12 + Cy * 8); |
jasper0712 | 50:082feedcdd22 | 207 | lcd.setPixel(5,12 + Cy * 8); |
jasper0712 | 50:082feedcdd22 | 208 | } |
jasper0712 | 50:082feedcdd22 | 209 | void GUI::preventDoubleClick(Gamepad &pad) { //use this to prevent unintended double clicking that always happens with the gamepad |
jasper0712 | 50:082feedcdd22 | 210 | wait(0.1); //yes, the gamepad is that bad. |
jasper0712 | 50:082feedcdd22 | 211 | if (pad.check_event(Gamepad::A_PRESSED)) { |
jasper0712 | 50:082feedcdd22 | 212 | printf("A double click prevented!!! \n"); |
jasper0712 | 50:082feedcdd22 | 213 | } |
jasper0712 | 50:082feedcdd22 | 214 | if (pad.check_event(Gamepad::START_PRESSED)) { |
jasper0712 | 50:082feedcdd22 | 215 | printf("START double click prevented!!! \n"); |
jasper0712 | 50:082feedcdd22 | 216 | } |
jasper0712 | 50:082feedcdd22 | 217 | if (pad.check_event(Gamepad::BACK_PRESSED)) { |
jasper0712 | 50:082feedcdd22 | 218 | printf("BACK double click prevented!!! \n"); |
jasper0712 | 50:082feedcdd22 | 219 | } |
jasper0712 | 50:082feedcdd22 | 220 | } |