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
Frogger/Frogger.h@57:a6eb3a0e92bc, 2020-05-26 (annotated)
- Committer:
- el19tb
- Date:
- Tue May 26 21:09:40 2020 +0000
- Revision:
- 57:a6eb3a0e92bc
- Parent:
- 56:2797166656e0
- Child:
- 58:35560ce5eca3
started on commments
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
el19tb | 29:2151cd327a36 | 1 | #ifndef FROGGER_H |
el19tb | 29:2151cd327a36 | 2 | #define FROGGER_H |
el19tb | 3:648c9d5001be | 3 | |
el19tb | 2:86cef2afa648 | 4 | #include "mbed.h" |
el19tb | 2:86cef2afa648 | 5 | #include "N5110.h" |
el19tb | 2:86cef2afa648 | 6 | #include "Gamepad.h" |
el19tb | 44:f02510eeb165 | 7 | |
el19tb | 29:2151cd327a36 | 8 | #include "Frog.h" |
el19tb | 44:f02510eeb165 | 9 | #include "GraphicEngine.h" |
el19tb | 44:f02510eeb165 | 10 | #include "WaterSprites.h" |
el19tb | 44:f02510eeb165 | 11 | #include "Vehicle.h" |
el19tb | 44:f02510eeb165 | 12 | #include "Background.h" |
el19tb | 50:9ffeb4a10c0a | 13 | #include "IntroScreen.h" |
el19tb | 13:cd6d2f999057 | 14 | |
el19tb | 4:aae7f8d4ab78 | 15 | #include <vector> |
el19tb | 44:f02510eeb165 | 16 | #include <stdio.h> |
el19tb | 44:f02510eeb165 | 17 | #include <cstddef> |
el19tb | 44:f02510eeb165 | 18 | #include <vector> |
el19tb | 2:86cef2afa648 | 19 | |
el19tb | 56:2797166656e0 | 20 | /** Frogger Class |
el19tb | 56:2797166656e0 | 21 | * |
el19tb | 56:2797166656e0 | 22 | * @brief Frogger class that runs the entire game, in charge of lcd calls |
el19tb | 56:2797166656e0 | 23 | * @brief moving objects, checking for collision etc. |
el19tb | 56:2797166656e0 | 24 | * @author Tarek Bessalah |
el19tb | 56:2797166656e0 | 25 | * @date May, 2020 |
el19tb | 56:2797166656e0 | 26 | */ |
el19tb | 29:2151cd327a36 | 27 | class Frogger |
el19tb | 29:2151cd327a36 | 28 | { |
el19tb | 11:cc5861abfca5 | 29 | public: |
el19tb | 57:a6eb3a0e92bc | 30 | /** @param frog object that frogger class keeps track of |
el19tb | 57:a6eb3a0e92bc | 31 | */ |
el19tb | 44:f02510eeb165 | 32 | Frog *frog; // one frog object |
el19tb | 44:f02510eeb165 | 33 | |
el19tb | 57:a6eb3a0e92bc | 34 | /** Constructor */ |
el19tb | 57:a6eb3a0e92bc | 35 | Frogger(); |
el19tb | 50:9ffeb4a10c0a | 36 | |
el19tb | 57:a6eb3a0e92bc | 37 | /** Constructor |
el19tb | 57:a6eb3a0e92bc | 38 | * @brief This constructor is the main engine of the frogger class |
el19tb | 57:a6eb3a0e92bc | 39 | * @param frog - actual frog object that user controls |
el19tb | 57:a6eb3a0e92bc | 40 | * @param w - the size of the lcd width |
el19tb | 57:a6eb3a0e92bc | 41 | * @param h - the size of the lcd height |
el19tb | 57:a6eb3a0e92bc | 42 | */ |
el19tb | 44:f02510eeb165 | 43 | Frogger(Frog *frog, int grid, int w, int h); // constructor |
el19tb | 37:65c9e5a65738 | 44 | |
el19tb | 37:65c9e5a65738 | 45 | public: |
el19tb | 57:a6eb3a0e92bc | 46 | |
el19tb | 57:a6eb3a0e92bc | 47 | /** @param current level of the game (starts from 1) |
el19tb | 57:a6eb3a0e92bc | 48 | */ |
el19tb | 37:65c9e5a65738 | 49 | int current_level; |
el19tb | 57:a6eb3a0e92bc | 50 | |
el19tb | 57:a6eb3a0e92bc | 51 | /** @param current state of the frog, used to draw the animation of the frog |
el19tb | 57:a6eb3a0e92bc | 52 | */ |
el19tb | 47:29c4796a49e5 | 53 | int state_frog; |
el19tb | 57:a6eb3a0e92bc | 54 | |
el19tb | 57:a6eb3a0e92bc | 55 | /** @param if the frog is in the water level, it can die now if it is |
el19tb | 57:a6eb3a0e92bc | 56 | * not on the log |
el19tb | 57:a6eb3a0e92bc | 57 | */ |
el19tb | 48:8ccfc74b60a5 | 58 | bool frogDie; |
el19tb | 57:a6eb3a0e92bc | 59 | |
el19tb | 57:a6eb3a0e92bc | 60 | /** @param store the x position of the goal post |
el19tb | 57:a6eb3a0e92bc | 61 | */ |
el19tb | 50:9ffeb4a10c0a | 62 | int goal_post_xpos; |
el19tb | 57:a6eb3a0e92bc | 63 | |
el19tb | 57:a6eb3a0e92bc | 64 | /** @param user is playing the game right now |
el19tb | 57:a6eb3a0e92bc | 65 | */ |
el19tb | 50:9ffeb4a10c0a | 66 | bool play_game; |
el19tb | 57:a6eb3a0e92bc | 67 | |
el19tb | 57:a6eb3a0e92bc | 68 | /** @param user is currently in the main menu |
el19tb | 57:a6eb3a0e92bc | 69 | */ |
el19tb | 50:9ffeb4a10c0a | 70 | bool introScreen; |
el19tb | 57:a6eb3a0e92bc | 71 | |
el19tb | 57:a6eb3a0e92bc | 72 | /** @param user is currently reading the tutorial manual |
el19tb | 57:a6eb3a0e92bc | 73 | */ |
el19tb | 50:9ffeb4a10c0a | 74 | bool tutorial; |
el19tb | 57:a6eb3a0e92bc | 75 | |
el19tb | 57:a6eb3a0e92bc | 76 | /** @param user is currently reading the settings |
el19tb | 57:a6eb3a0e92bc | 77 | */ |
el19tb | 50:9ffeb4a10c0a | 78 | bool settings; |
el19tb | 57:a6eb3a0e92bc | 79 | |
el19tb | 57:a6eb3a0e92bc | 80 | /** @param if this on, then there exists an end post |
el19tb | 57:a6eb3a0e92bc | 81 | */ |
el19tb | 50:9ffeb4a10c0a | 82 | bool end_post; |
el19tb | 57:a6eb3a0e92bc | 83 | |
el19tb | 57:a6eb3a0e92bc | 84 | /** @param frog is successful in current level |
el19tb | 57:a6eb3a0e92bc | 85 | */ |
el19tb | 50:9ffeb4a10c0a | 86 | bool nextLevel; |
el19tb | 57:a6eb3a0e92bc | 87 | |
el19tb | 57:a6eb3a0e92bc | 88 | /** @param informs if the frog reached end post |
el19tb | 57:a6eb3a0e92bc | 89 | */ |
el19tb | 50:9ffeb4a10c0a | 90 | bool next_goal; |
el19tb | 57:a6eb3a0e92bc | 91 | |
el19tb | 57:a6eb3a0e92bc | 92 | /** @param this means that bonus round is screen is on |
el19tb | 57:a6eb3a0e92bc | 93 | */ |
el19tb | 53:b6bb4dab7823 | 94 | bool bonus_round; |
el19tb | 50:9ffeb4a10c0a | 95 | |
el19tb | 57:a6eb3a0e92bc | 96 | /** @param y coord (in rows) value of the water level |
el19tb | 57:a6eb3a0e92bc | 97 | */ |
el19tb | 57:a6eb3a0e92bc | 98 | float water_level; |
el19tb | 57:a6eb3a0e92bc | 99 | |
el19tb | 57:a6eb3a0e92bc | 100 | /** @param if the frog collides with log object and is above second |
el19tb | 57:a6eb3a0e92bc | 101 | * safety lane, it is attached to the object (going same speed) |
el19tb | 57:a6eb3a0e92bc | 102 | */ |
el19tb | 57:a6eb3a0e92bc | 103 | bool frogOnLog; |
el19tb | 57:a6eb3a0e92bc | 104 | |
el19tb | 57:a6eb3a0e92bc | 105 | /** @param current state of the turtles, this is used to draw the animation |
el19tb | 57:a6eb3a0e92bc | 106 | * of the turtle in level 2 |
el19tb | 57:a6eb3a0e92bc | 107 | */ |
el19tb | 51:4c1f49729d88 | 108 | int turtle_state; |
el19tb | 29:2151cd327a36 | 109 | |
el19tb | 29:2151cd327a36 | 110 | public: |
el19tb | 57:a6eb3a0e92bc | 111 | /** @param local hardware object, used for sounds, LED, and button controls etc. |
el19tb | 57:a6eb3a0e92bc | 112 | */ |
el19tb | 57:a6eb3a0e92bc | 113 | Gamepad gamepad; |
el19tb | 57:a6eb3a0e92bc | 114 | |
el19tb | 57:a6eb3a0e92bc | 115 | /** @param class object that keeps track of the current pointer position, current page |
el19tb | 57:a6eb3a0e92bc | 116 | */ |
el19tb | 57:a6eb3a0e92bc | 117 | IntroScreen intro; |
el19tb | 57:a6eb3a0e92bc | 118 | |
el19tb | 57:a6eb3a0e92bc | 119 | /** @param size of the game grid |
el19tb | 57:a6eb3a0e92bc | 120 | */ |
el19tb | 57:a6eb3a0e92bc | 121 | int grid; // size of one game unit |
el19tb | 15:b15bf9357cd9 | 122 | int row_number; |
el19tb | 18:6be4c3c94a3d | 123 | int grid_width; // screen width in grid units |
el19tb | 37:65c9e5a65738 | 124 | int lcd_w; |
el19tb | 37:65c9e5a65738 | 125 | int lcd_h; |
el19tb | 44:f02510eeb165 | 126 | |
el19tb | 44:f02510eeb165 | 127 | public: |
el19tb | 44:f02510eeb165 | 128 | |
el19tb | 44:f02510eeb165 | 129 | // Level One Car objects |
el19tb | 44:f02510eeb165 | 130 | Object car_row_one_one[3]; |
el19tb | 44:f02510eeb165 | 131 | Object car_row_two_one[2]; |
el19tb | 44:f02510eeb165 | 132 | Object car_row_three_one[3]; |
el19tb | 44:f02510eeb165 | 133 | Object car_row_four_one[4]; |
el19tb | 44:f02510eeb165 | 134 | |
el19tb | 44:f02510eeb165 | 135 | // Level One Log objects |
el19tb | 44:f02510eeb165 | 136 | Object row_one_log[3]; // large sized |
el19tb | 44:f02510eeb165 | 137 | Object row_two_log[2]; // medium sized |
el19tb | 44:f02510eeb165 | 138 | Object row_three_log[3]; // large sized |
el19tb | 44:f02510eeb165 | 139 | |
el19tb | 44:f02510eeb165 | 140 | // Level two Car Objects |
el19tb | 44:f02510eeb165 | 141 | Object car_row_one_two[4]; |
el19tb | 44:f02510eeb165 | 142 | Object car_row_two_two[3]; |
el19tb | 44:f02510eeb165 | 143 | Object car_row_three_two[4]; |
el19tb | 44:f02510eeb165 | 144 | Object car_row_four_two[3]; |
el19tb | 44:f02510eeb165 | 145 | |
el19tb | 44:f02510eeb165 | 146 | // level two log objects |
el19tb | 44:f02510eeb165 | 147 | Object level_row_one[2]; |
el19tb | 44:f02510eeb165 | 148 | Object level_row_two[2]; |
el19tb | 44:f02510eeb165 | 149 | Object level_row_three[3]; |
el19tb | 53:b6bb4dab7823 | 150 | |
el19tb | 53:b6bb4dab7823 | 151 | //BONUS ROUND |
el19tb | 53:b6bb4dab7823 | 152 | Object bonus_row_one[4]; |
el19tb | 53:b6bb4dab7823 | 153 | Object bonus_row_two[3]; |
el19tb | 53:b6bb4dab7823 | 154 | Object bonus_row_three[4]; |
el19tb | 53:b6bb4dab7823 | 155 | Object bonus_row_four[3]; |
el19tb | 53:b6bb4dab7823 | 156 | Object bonus_row_six[2]; |
el19tb | 53:b6bb4dab7823 | 157 | Object bonus_row_seven[2]; |
el19tb | 53:b6bb4dab7823 | 158 | Object bonus_row_eight[3]; |
el19tb | 50:9ffeb4a10c0a | 159 | |
el19tb | 44:f02510eeb165 | 160 | public: |
el19tb | 50:9ffeb4a10c0a | 161 | void run(); |
el19tb | 53:b6bb4dab7823 | 162 | void run_bonus(); |
el19tb | 53:b6bb4dab7823 | 163 | void actOnFrogBonus(); |
el19tb | 53:b6bb4dab7823 | 164 | void checkBonusProgress(); |
el19tb | 52:1145e99264ea | 165 | void updateTurtleState(); |
el19tb | 50:9ffeb4a10c0a | 166 | void actOnFrogPos(); |
el19tb | 50:9ffeb4a10c0a | 167 | void home(); |
el19tb | 50:9ffeb4a10c0a | 168 | void determineSelection(); |
el19tb | 50:9ffeb4a10c0a | 169 | void gotoPage(); |
el19tb | 50:9ffeb4a10c0a | 170 | void selectOption(); |
el19tb | 50:9ffeb4a10c0a | 171 | void checkLevelProgression(); |
el19tb | 50:9ffeb4a10c0a | 172 | int randEndPost(); |
el19tb | 44:f02510eeb165 | 173 | void checkFrogOnWater(); |
el19tb | 48:8ccfc74b60a5 | 174 | void drownedFrog(); |
el19tb | 46:e39abe665271 | 175 | void checkFrogAction(Object log); |
el19tb | 44:f02510eeb165 | 176 | void setupLevelTwoRows(); |
el19tb | 53:b6bb4dab7823 | 177 | |
el19tb | 53:b6bb4dab7823 | 178 | void runBonusRound(); |
el19tb | 53:b6bb4dab7823 | 179 | void setupBonusRows(); |
el19tb | 53:b6bb4dab7823 | 180 | void setupBonusXpos(); |
el19tb | 53:b6bb4dab7823 | 181 | void setupBonusTwoDir(); |
el19tb | 53:b6bb4dab7823 | 182 | void setupBonusSprites(); |
el19tb | 53:b6bb4dab7823 | 183 | void moveBonusObjects(); |
el19tb | 53:b6bb4dab7823 | 184 | |
el19tb | 48:8ccfc74b60a5 | 185 | void moveFrogWithLog(Object log); |
el19tb | 52:1145e99264ea | 186 | void checkTurtleDrown(); |
el19tb | 50:9ffeb4a10c0a | 187 | |
el19tb | 50:9ffeb4a10c0a | 188 | void drawBackGround(); |
el19tb | 50:9ffeb4a10c0a | 189 | void generateLevelOneGoalPost(); |
el19tb | 50:9ffeb4a10c0a | 190 | void setUpGoalPost(); |
el19tb | 50:9ffeb4a10c0a | 191 | |
el19tb | 44:f02510eeb165 | 192 | void levelOneCollision(); |
el19tb | 44:f02510eeb165 | 193 | void levelTwoCollision(); |
el19tb | 46:e39abe665271 | 194 | void checkCollison(Object object); |
el19tb | 44:f02510eeb165 | 195 | |
el19tb | 44:f02510eeb165 | 196 | void setupRowDistance(Object *objects, int dis, int array_size); |
el19tb | 44:f02510eeb165 | 197 | void setDistance(Object *object, int dis); |
el19tb | 44:f02510eeb165 | 198 | |
el19tb | 44:f02510eeb165 | 199 | void setRowObjects(Object *objecs, int row, int array_size); |
el19tb | 44:f02510eeb165 | 200 | void createRow(Object *object, int row); |
el19tb | 44:f02510eeb165 | 201 | |
el19tb | 44:f02510eeb165 | 202 | void setSpriteObjects(Object *objects, char c, int array_size); |
el19tb | 44:f02510eeb165 | 203 | void setSprite(Object *object, char c); |
el19tb | 44:f02510eeb165 | 204 | |
el19tb | 44:f02510eeb165 | 205 | void setDirObjects(Object *objecs, int dir, int array_size); |
el19tb | 44:f02510eeb165 | 206 | void setDir(Object *objecs, int dir); |
el19tb | 44:f02510eeb165 | 207 | |
el19tb | 44:f02510eeb165 | 208 | //void moveLogLevelTwo(); |
el19tb | 44:f02510eeb165 | 209 | |
el19tb | 44:f02510eeb165 | 210 | void moveLogsLevelOne(); |
el19tb | 48:8ccfc74b60a5 | 211 | void checkFrogReachedRiver(); |
el19tb | 57:a6eb3a0e92bc | 212 | void gotoNextTutorialSlide(); |
el19tb | 57:a6eb3a0e92bc | 213 | void displayTutorial(); |
el19tb | 57:a6eb3a0e92bc | 214 | void goalReached(); |
el19tb | 57:a6eb3a0e92bc | 215 | void checkProgression(); |
el19tb | 44:f02510eeb165 | 216 | void moveLogsLevelTwo(); |
el19tb | 47:29c4796a49e5 | 217 | void drawFrogStates(); |
el19tb | 44:f02510eeb165 | 218 | |
el19tb | 44:f02510eeb165 | 219 | void speedSlow(); |
el19tb | 44:f02510eeb165 | 220 | void speedMedium(); |
el19tb | 44:f02510eeb165 | 221 | void speedFast(); |
el19tb | 51:4c1f49729d88 | 222 | |
el19tb | 51:4c1f49729d88 | 223 | // BONUS ROUND |
el19tb | 51:4c1f49729d88 | 224 | void setupBonusRound(); |
el19tb | 51:4c1f49729d88 | 225 | |
el19tb | 44:f02510eeb165 | 226 | // LEVEL ONE FUNCTIONS |
el19tb | 44:f02510eeb165 | 227 | void setupLevelOne(); |
el19tb | 44:f02510eeb165 | 228 | |
el19tb | 44:f02510eeb165 | 229 | // set up vehicles |
el19tb | 44:f02510eeb165 | 230 | void setupLevelOneRow(); |
el19tb | 44:f02510eeb165 | 231 | void setupLevelOneXPos(); |
el19tb | 44:f02510eeb165 | 232 | void setupLevelOneSprites(); |
el19tb | 44:f02510eeb165 | 233 | void setupLevelOneDir(); |
el19tb | 44:f02510eeb165 | 234 | |
el19tb | 44:f02510eeb165 | 235 | // set up logs |
el19tb | 44:f02510eeb165 | 236 | void setupLogsLevelOne(); |
el19tb | 44:f02510eeb165 | 237 | |
el19tb | 44:f02510eeb165 | 238 | void setLogLevelOneXPos(); |
el19tb | 44:f02510eeb165 | 239 | void setLogLevelOneRow(); |
el19tb | 44:f02510eeb165 | 240 | void setLogLevelOneDir(); |
el19tb | 44:f02510eeb165 | 241 | void setLogLevelOneSprites(); |
el19tb | 44:f02510eeb165 | 242 | |
el19tb | 44:f02510eeb165 | 243 | // LEVEL TWO FUNCTIONS |
el19tb | 44:f02510eeb165 | 244 | void setupLevelTwo(); |
el19tb | 44:f02510eeb165 | 245 | int randCars(); |
el19tb | 44:f02510eeb165 | 246 | |
el19tb | 44:f02510eeb165 | 247 | // setup vehicles |
el19tb | 44:f02510eeb165 | 248 | void setupLevelTwoXPos(); |
el19tb | 44:f02510eeb165 | 249 | void setupLevelTwoSprites(); |
el19tb | 44:f02510eeb165 | 250 | void setupLevelTwoDir(); |
el19tb | 44:f02510eeb165 | 251 | |
el19tb | 44:f02510eeb165 | 252 | //log objects |
el19tb | 44:f02510eeb165 | 253 | void setupLogLevelTwo(); |
el19tb | 44:f02510eeb165 | 254 | |
el19tb | 44:f02510eeb165 | 255 | void setLogLevelTwoXPos(); |
el19tb | 44:f02510eeb165 | 256 | void setLogLevelTwoRow(); |
el19tb | 44:f02510eeb165 | 257 | void setLogLevelTwoSprite(); |
el19tb | 44:f02510eeb165 | 258 | void setLogLevelTwoDir(); |
el19tb | 44:f02510eeb165 | 259 | void initializeLevelTwo(); |
el19tb | 44:f02510eeb165 | 260 | |
el19tb | 44:f02510eeb165 | 261 | void displayObject(Object &temp_object); |
el19tb | 11:cc5861abfca5 | 262 | |
el19tb | 2:86cef2afa648 | 263 | public: |
el19tb | 44:f02510eeb165 | 264 | |
el19tb | 2:86cef2afa648 | 265 | void start(); |
el19tb | 2:86cef2afa648 | 266 | void input(); |
el19tb | 2:86cef2afa648 | 267 | void process_input(); |
el19tb | 2:86cef2afa648 | 268 | void clear(); |
el19tb | 44:f02510eeb165 | 269 | void runLevelOne(); |
el19tb | 44:f02510eeb165 | 270 | void runLevelTwo(); |
el19tb | 44:f02510eeb165 | 271 | void moveVehiclesLevelOne(); |
el19tb | 44:f02510eeb165 | 272 | void moveVehiclesLevelTwo(); |
el19tb | 44:f02510eeb165 | 273 | void moveVehicle(Object *row, char c, int array_size); |
el19tb | 44:f02510eeb165 | 274 | void moveIndividualObject(Object *vehicle, char c); |
el19tb | 44:f02510eeb165 | 275 | void checkOutOfBounds(Object *vehicle); |
el19tb | 50:9ffeb4a10c0a | 276 | void displayLevelIntro(); |
el19tb | 42:04e326dcf09b | 277 | void runCurrentLevel(); |
el19tb | 42:04e326dcf09b | 278 | void initializeParams(int w, int h, int grid); |
el19tb | 42:04e326dcf09b | 279 | void initializeEmbeddedSystem(); |
el19tb | 42:04e326dcf09b | 280 | void checkCurrentLevelCollision(); |
el19tb | 42:04e326dcf09b | 281 | void checkIfFrogIsInWater(); |
el19tb | 42:04e326dcf09b | 282 | void moveFrog(int xWay, int yWay); |
el19tb | 2:86cef2afa648 | 283 | void game(); |
el19tb | 2:86cef2afa648 | 284 | void refresh(); |
el19tb | 42:04e326dcf09b | 285 | void createWaterLane(); |
el19tb | 42:04e326dcf09b | 286 | void createMultipleLanesWater(); |
el19tb | 42:04e326dcf09b | 287 | void drawRoadObjects(); |
el19tb | 42:04e326dcf09b | 288 | void createRoadLane(); |
el19tb | 42:04e326dcf09b | 289 | void createMultipleRoadLane(); |
el19tb | 42:04e326dcf09b | 290 | void drawSafety(); |
el19tb | 42:04e326dcf09b | 291 | void createSafetyObject(); |
el19tb | 42:04e326dcf09b | 292 | void createMultipleSafetyLane(); |
el19tb | 42:04e326dcf09b | 293 | |
el19tb | 42:04e326dcf09b | 294 | void drawEndPost(); |
el19tb | 42:04e326dcf09b | 295 | void drawWater(); |
el19tb | 42:04e326dcf09b | 296 | void loopWater(); |
el19tb | 42:04e326dcf09b | 297 | void moveWater(); |
el19tb | 3:648c9d5001be | 298 | |
el19tb | 56:2797166656e0 | 299 | void checkFrogInDeathZone(); |
el19tb | 3:648c9d5001be | 300 | void move(); |
el19tb | 44:f02510eeb165 | 301 | void checkFrogOutOfBounds(); |
el19tb | 56:2797166656e0 | 302 | void displayIntro(); |
el19tb | 3:648c9d5001be | 303 | void setup(); |
el19tb | 42:04e326dcf09b | 304 | void createGoalPost(); |
el19tb | 2:86cef2afa648 | 305 | }; |
el19tb | 2:86cef2afa648 | 306 | |
el19tb | 44:f02510eeb165 | 307 | #endif |
el19tb | 2:86cef2afa648 | 308 | |
el19tb | 44:f02510eeb165 | 309 | |
el19tb | 44:f02510eeb165 | 310 | |
el19tb | 50:9ffeb4a10c0a | 311 |