Dependencies:   mbed FATFileSystem

Committer:
rottenegg
Date:
Thu May 09 06:22:53 2019 +0000
Revision:
21:f3b0ce18b44f
Parent:
20:01efa2bce75d
Child:
26:716bcd47f3ca
Game_Manager: 20 lines per Function Achevied; Documentation Updated along with Inline Comments

Who changed what in which revision?

UserRevisionLine numberNew contents of line
rottenegg 8:e3a76a808a4c 1 #include "SceneCreator.h"
rottenegg 8:e3a76a808a4c 2 #include "ScenePaths.h"
rottenegg 8:e3a76a808a4c 3
rottenegg 13:95323e0f2fcb 4 //Timer for dynamic wait times to reduce notice-able lagging between scenes
rottenegg 12:ff8d26124c38 5 Timer dynatime;
rottenegg 12:ff8d26124c38 6
rottenegg 8:e3a76a808a4c 7 DigitalOut led(LED_BLUE);
rottenegg 8:e3a76a808a4c 8 Serial pc(USBTX,USBRX);
rottenegg 12:ff8d26124c38 9
rottenegg 13:95323e0f2fcb 10 //Constructor
rottenegg 9:ac396c818874 11 SceneCreator::SceneCreator(PinName Button) {
rottenegg 9:ac396c818874 12 this->set_buttonPin(Button);
rottenegg 21:f3b0ce18b44f 13 dead = false;
rottenegg 8:e3a76a808a4c 14 }
rottenegg 8:e3a76a808a4c 15
rottenegg 13:95323e0f2fcb 16 //Destructor
rottenegg 8:e3a76a808a4c 17 SceneCreator::~SceneCreator() {
rottenegg 9:ac396c818874 18 this->deletebutton();
rottenegg 8:e3a76a808a4c 19 }
rottenegg 8:e3a76a808a4c 20
rottenegg 13:95323e0f2fcb 21 //Primary Function
rottenegg 17:7d4d8905b608 22 void SceneCreator::Scenesp(Bitmap &lcd, CaMove &CM,short int spl,short int spx,short int spy, Direction spd, int rng,WDplayer &wav) {
rottenegg 19:065207c07c3c 23 this->setup(lcd,CM,spl,spx,spy,spd,wav);
rottenegg 20:01efa2bce75d 24 while(!dead && CM.in_screen()) { //Main Loop exit if charater dead or leaves screen
rottenegg 19:065207c07c3c 25 dynatime.start();
rottenegg 19:065207c07c3c 26 lcd.clear();
rottenegg 19:065207c07c3c 27 wav.ISRpreload();
rottenegg 21:f3b0ce18b44f 28 lcd.renderBMP(SCN[spl],0,0); //Map Made
rottenegg 21:f3b0ce18b44f 29 this->Core_1(lcd, CM,spl,rng,p); //Pre - Events
rottenegg 19:065207c07c3c 30 this->update_charaters(lcd,CM,spl,wav);
rottenegg 21:f3b0ce18b44f 31 this->Core_2(lcd, CM,spl,rng,p,wav); //Pos - Events
rottenegg 19:065207c07c3c 32 if (CM.is_caught()) {
rottenegg 19:065207c07c3c 33 dead = true;
rottenegg 19:065207c07c3c 34 }
rottenegg 19:065207c07c3c 35 lcd.refresh();
rottenegg 19:065207c07c3c 36 this->dynamic_wait();
rottenegg 19:065207c07c3c 37 };
rottenegg 21:f3b0ce18b44f 38 wav.ISRreset(); //Clear Scene data
rottenegg 19:065207c07c3c 39 CM.delete_regions();
rottenegg 19:065207c07c3c 40 };
rottenegg 19:065207c07c3c 41
rottenegg 19:065207c07c3c 42
rottenegg 21:f3b0ce18b44f 43 //Internal Functions for Scenesp
rottenegg 19:065207c07c3c 44
rottenegg 20:01efa2bce75d 45 void SceneCreator::setup(Bitmap &lcd, CaMove &CM,short int spl,short int spx,short int spy, Direction spd, WDplayer &wav) {
rottenegg 13:95323e0f2fcb 46 //Setting up WDplayer, CaMove and Scene interative regions
rottenegg 12:ff8d26124c38 47 wav.ISRset();
rottenegg 8:e3a76a808a4c 48 CM.init(spx,spy,spd);
rottenegg 18:14e5391beccf 49 CM.AIinit(spl);
rottenegg 10:4fda7b01484a 50 lcd.normalMode();
rottenegg 8:e3a76a808a4c 51 this->set_sreg(CM,spl);
rottenegg 21:f3b0ce18b44f 52 this->reset_variables();
rottenegg 21:f3b0ce18b44f 53 //Array to allow Pos Events to disable or enable Pre Events (Resetting)
rottenegg 20:01efa2bce75d 54 p[0] = true;
rottenegg 20:01efa2bce75d 55 p[1] = true;
rottenegg 20:01efa2bce75d 56 p[2] = true;
rottenegg 20:01efa2bce75d 57 p[3] = true;
rottenegg 20:01efa2bce75d 58 p[4] = true;
rottenegg 19:065207c07c3c 59 }
rottenegg 19:065207c07c3c 60
rottenegg 21:f3b0ce18b44f 61
rottenegg 21:f3b0ce18b44f 62 //CORE_1 (Pre EVENTS)
rottenegg 20:01efa2bce75d 63 void SceneCreator::Core_1(Bitmap &lcd, CaMove &CM,short int spl,int rng,bool p[5]) {
rottenegg 12:ff8d26124c38 64 if (p[0]) {
rottenegg 10:4fda7b01484a 65 this->pre_func0(spl,lcd,CM,rng);
rottenegg 8:e3a76a808a4c 66 }
rottenegg 8:e3a76a808a4c 67 if (p[1]) {
rottenegg 10:4fda7b01484a 68 this->pre_func1(spl,lcd,CM,rng);
rottenegg 8:e3a76a808a4c 69 }
rottenegg 8:e3a76a808a4c 70 if (p[2]) {
rottenegg 10:4fda7b01484a 71 this->pre_func2(spl,lcd,CM,rng);
rottenegg 8:e3a76a808a4c 72 }
rottenegg 8:e3a76a808a4c 73 if (p[3]) {
rottenegg 10:4fda7b01484a 74 this->pre_func3(spl,lcd,CM,rng);
rottenegg 8:e3a76a808a4c 75 }
rottenegg 8:e3a76a808a4c 76 if (p[4]) {
rottenegg 10:4fda7b01484a 77 this->pre_func4(spl,lcd,CM,rng);
rottenegg 8:e3a76a808a4c 78 }
rottenegg 12:ff8d26124c38 79 }
rottenegg 12:ff8d26124c38 80
rottenegg 13:95323e0f2fcb 81 //CORE_2 (Pos EVENTs)
rottenegg 20:01efa2bce75d 82 void SceneCreator::Core_2(Bitmap &lcd, CaMove &CM,short int spl,int rng,bool (&p)[5],WDplayer &wav) {
rottenegg 20:01efa2bce75d 83 switch(CM.get_treg()) { //Checks which region triggered
rottenegg 8:e3a76a808a4c 84 case 0:
rottenegg 20:01efa2bce75d 85 this->task_completed(p[0] ,lcd ,wav);
rottenegg 21:f3b0ce18b44f 86 this->pos_func0(spl,lcd,CM,rng,wav);
rottenegg 20:01efa2bce75d 87 break;
rottenegg 8:e3a76a808a4c 88 case 1:
rottenegg 20:01efa2bce75d 89 this->task_completed(p[1] ,lcd ,wav);
rottenegg 10:4fda7b01484a 90 this->pos_func1(spl,lcd,CM,rng);
rottenegg 8:e3a76a808a4c 91 break;
rottenegg 8:e3a76a808a4c 92 case 2:
rottenegg 20:01efa2bce75d 93 this->task_completed(p[2] ,lcd ,wav);
rottenegg 10:4fda7b01484a 94 this->pos_func2(spl,lcd,CM,rng);
rottenegg 8:e3a76a808a4c 95 break;
rottenegg 8:e3a76a808a4c 96 case 3:
rottenegg 20:01efa2bce75d 97 this->task_completed(p[3] ,lcd ,wav);
rottenegg 10:4fda7b01484a 98 this->pos_func3(spl,lcd,CM,rng);
rottenegg 8:e3a76a808a4c 99 break;
rottenegg 8:e3a76a808a4c 100 case 4:
rottenegg 20:01efa2bce75d 101 this->task_completed(p[4] ,lcd ,wav);
rottenegg 10:4fda7b01484a 102 this->pos_func4(spl,lcd,CM,rng);
rottenegg 20:01efa2bce75d 103 break;
rottenegg 8:e3a76a808a4c 104 };
rottenegg 19:065207c07c3c 105 wav.ISRresume();
rottenegg 19:065207c07c3c 106 }
rottenegg 19:065207c07c3c 107
rottenegg 21:f3b0ce18b44f 108 void SceneCreator::update_charaters(Bitmap &lcd, CaMove &CM,short int spl, WDplayer &wav) {
rottenegg 21:f3b0ce18b44f 109 //Charater and Chaser Model Update
rottenegg 21:f3b0ce18b44f 110 CM.move(lcd);
rottenegg 21:f3b0ce18b44f 111 CM.chase(lcd,spl);
rottenegg 21:f3b0ce18b44f 112 wav.ISRpreload();
rottenegg 21:f3b0ce18b44f 113 }
rottenegg 21:f3b0ce18b44f 114
rottenegg 21:f3b0ce18b44f 115 void SceneCreator::dynamic_wait() {
rottenegg 21:f3b0ce18b44f 116 dynatime.stop();
rottenegg 21:f3b0ce18b44f 117 float waittime = 0.15f - dynatime.read();
rottenegg 21:f3b0ce18b44f 118 if (waittime > 0.00000f) {
rottenegg 21:f3b0ce18b44f 119 wait(waittime);
rottenegg 21:f3b0ce18b44f 120 }
rottenegg 21:f3b0ce18b44f 121 dynatime.reset();
rottenegg 21:f3b0ce18b44f 122 //Will aim for 7 frames per second if too heavy of performance impacting frame rate will drop
rottenegg 21:f3b0ce18b44f 123 }
rottenegg 21:f3b0ce18b44f 124
rottenegg 21:f3b0ce18b44f 125 //Aiding Functions - used in Core 2
rottenegg 21:f3b0ce18b44f 126
rottenegg 20:01efa2bce75d 127 void SceneCreator::task_completed(bool &uno, Bitmap &lcd, WDplayer &wav) {
rottenegg 19:065207c07c3c 128 wav.ISRpause();
rottenegg 19:065207c07c3c 129 if(uno) {
rottenegg 19:065207c07c3c 130 uno *= false;
rottenegg 19:065207c07c3c 131 this->flash(lcd);
rottenegg 19:065207c07c3c 132 }
rottenegg 12:ff8d26124c38 133 }
rottenegg 8:e3a76a808a4c 134
rottenegg 21:f3b0ce18b44f 135
rottenegg 9:ac396c818874 136 //settings
rottenegg 13:95323e0f2fcb 137 //All below Functions Check which scene is operating and then fetches the required Function from SceneFunctions
rottenegg 13:95323e0f2fcb 138 //They all are they same...
rottenegg 8:e3a76a808a4c 139 void SceneCreator::set_sreg(CaMove &CM,int sce) {
rottenegg 8:e3a76a808a4c 140 switch(sce) {
rottenegg 8:e3a76a808a4c 141 case 0:
rottenegg 9:ac396c818874 142 this->set_scene0(CM);
rottenegg 8:e3a76a808a4c 143 break;
rottenegg 8:e3a76a808a4c 144 case 1:
rottenegg 9:ac396c818874 145 this->set_scene1(CM);
rottenegg 8:e3a76a808a4c 146 break;
rottenegg 8:e3a76a808a4c 147 case 2:
rottenegg 10:4fda7b01484a 148 this->set_scene2(CM);
rottenegg 8:e3a76a808a4c 149 break;
rottenegg 8:e3a76a808a4c 150 case 3:
rottenegg 10:4fda7b01484a 151 this->set_scene3(CM);
rottenegg 8:e3a76a808a4c 152 break;
rottenegg 8:e3a76a808a4c 153 case 4:
rottenegg 15:3d29fb195958 154 this->set_scene4(CM);
rottenegg 8:e3a76a808a4c 155 break;
rottenegg 8:e3a76a808a4c 156 }
rottenegg 8:e3a76a808a4c 157 }
rottenegg 8:e3a76a808a4c 158
rottenegg 8:e3a76a808a4c 159 //pre-func
rottenegg 17:7d4d8905b608 160 void SceneCreator::pre_func0(int sce,Bitmap &lcd,CaMove &CM,int rng) {
rottenegg 8:e3a76a808a4c 161 switch(sce) {
rottenegg 8:e3a76a808a4c 162 case 0:
rottenegg 9:ac396c818874 163 this->obj0_scene0(lcd);
rottenegg 8:e3a76a808a4c 164 break;
rottenegg 8:e3a76a808a4c 165 case 1:
rottenegg 9:ac396c818874 166 this->obj0_scene1(lcd);
rottenegg 8:e3a76a808a4c 167 break;
rottenegg 8:e3a76a808a4c 168 case 2:
rottenegg 10:4fda7b01484a 169 this->obj0_scene2(lcd);
rottenegg 8:e3a76a808a4c 170 break;
rottenegg 8:e3a76a808a4c 171 case 3:
rottenegg 10:4fda7b01484a 172 this->obj0_scene3(lcd);
rottenegg 8:e3a76a808a4c 173 break;
rottenegg 8:e3a76a808a4c 174 case 4:
rottenegg 8:e3a76a808a4c 175 break;
rottenegg 8:e3a76a808a4c 176 }
rottenegg 8:e3a76a808a4c 177 }
rottenegg 8:e3a76a808a4c 178
rottenegg 17:7d4d8905b608 179 void SceneCreator::pre_func1(int sce,Bitmap &lcd,CaMove &CM,int rng) {
rottenegg 8:e3a76a808a4c 180 switch(sce) {
rottenegg 8:e3a76a808a4c 181 case 0:
rottenegg 8:e3a76a808a4c 182 break;
rottenegg 8:e3a76a808a4c 183 case 1:
rottenegg 9:ac396c818874 184 this->obj1_scene1(lcd);
rottenegg 8:e3a76a808a4c 185 break;
rottenegg 8:e3a76a808a4c 186 case 2:
rottenegg 10:4fda7b01484a 187 this->obj1_scene2(lcd,rng);
rottenegg 8:e3a76a808a4c 188 break;
rottenegg 8:e3a76a808a4c 189 case 3:
rottenegg 10:4fda7b01484a 190 this->obj1_scene3(lcd);
rottenegg 8:e3a76a808a4c 191 break;
rottenegg 8:e3a76a808a4c 192 case 4:
rottenegg 15:3d29fb195958 193 this->obj1_scene4(lcd);
rottenegg 8:e3a76a808a4c 194 break;
rottenegg 8:e3a76a808a4c 195 }
rottenegg 8:e3a76a808a4c 196 }
rottenegg 8:e3a76a808a4c 197
rottenegg 17:7d4d8905b608 198 void SceneCreator::pre_func2(int sce,Bitmap &lcd,CaMove &CM,int rng) {
rottenegg 8:e3a76a808a4c 199 switch(sce) {
rottenegg 8:e3a76a808a4c 200 case 0:
rottenegg 8:e3a76a808a4c 201 break;
rottenegg 8:e3a76a808a4c 202 case 1:
rottenegg 8:e3a76a808a4c 203 break;
rottenegg 8:e3a76a808a4c 204 case 2:
rottenegg 8:e3a76a808a4c 205 break;
rottenegg 8:e3a76a808a4c 206 case 3:
rottenegg 8:e3a76a808a4c 207 break;
rottenegg 8:e3a76a808a4c 208 case 4:
rottenegg 15:3d29fb195958 209 this->obj2_scene4(lcd);
rottenegg 8:e3a76a808a4c 210 break;
rottenegg 8:e3a76a808a4c 211 }
rottenegg 8:e3a76a808a4c 212 }
rottenegg 8:e3a76a808a4c 213
rottenegg 17:7d4d8905b608 214 void SceneCreator::pre_func3(int sce,Bitmap &lcd,CaMove &CM,int rng) {
rottenegg 8:e3a76a808a4c 215 switch(sce) {
rottenegg 8:e3a76a808a4c 216 case 0:
rottenegg 8:e3a76a808a4c 217 break;
rottenegg 8:e3a76a808a4c 218 case 1:
rottenegg 8:e3a76a808a4c 219 break;
rottenegg 8:e3a76a808a4c 220 case 2:
rottenegg 8:e3a76a808a4c 221 break;
rottenegg 8:e3a76a808a4c 222 case 3:
rottenegg 10:4fda7b01484a 223 this->obj3_scene3(lcd);
rottenegg 8:e3a76a808a4c 224 break;
rottenegg 8:e3a76a808a4c 225 case 4:
rottenegg 15:3d29fb195958 226 this->obj3_scene4(lcd);
rottenegg 8:e3a76a808a4c 227 break;
rottenegg 8:e3a76a808a4c 228 }
rottenegg 8:e3a76a808a4c 229 }
rottenegg 8:e3a76a808a4c 230
rottenegg 17:7d4d8905b608 231 void SceneCreator::pre_func4(int sce,Bitmap &lcd,CaMove &CM,int rng) {
rottenegg 8:e3a76a808a4c 232 switch(sce) {
rottenegg 8:e3a76a808a4c 233 case 0:
rottenegg 8:e3a76a808a4c 234 break;
rottenegg 8:e3a76a808a4c 235 case 1:
rottenegg 8:e3a76a808a4c 236 break;
rottenegg 8:e3a76a808a4c 237 case 2:
rottenegg 8:e3a76a808a4c 238 break;
rottenegg 8:e3a76a808a4c 239 case 3:
rottenegg 10:4fda7b01484a 240 this->obj4_scene3(lcd);
rottenegg 8:e3a76a808a4c 241 break;
rottenegg 8:e3a76a808a4c 242 case 4:
rottenegg 8:e3a76a808a4c 243 break;
rottenegg 8:e3a76a808a4c 244 }
rottenegg 8:e3a76a808a4c 245 }
rottenegg 8:e3a76a808a4c 246
rottenegg 8:e3a76a808a4c 247 //pos func
rottenegg 8:e3a76a808a4c 248
rottenegg 21:f3b0ce18b44f 249 void SceneCreator::pos_func0(int sce,Bitmap &lcd,CaMove &CM,int rng,WDplayer &wav) {
rottenegg 8:e3a76a808a4c 250 switch(sce) {
rottenegg 8:e3a76a808a4c 251 case 0:
rottenegg 9:ac396c818874 252 this->event0_scene0(lcd);
rottenegg 8:e3a76a808a4c 253 break;
rottenegg 8:e3a76a808a4c 254 case 1:
rottenegg 9:ac396c818874 255 this->event0_scene1(lcd);
rottenegg 8:e3a76a808a4c 256 break;
rottenegg 8:e3a76a808a4c 257 case 2:
rottenegg 21:f3b0ce18b44f 258 this->event0_scene2(lcd,CM,wav);
rottenegg 8:e3a76a808a4c 259 break;
rottenegg 8:e3a76a808a4c 260 case 3:
rottenegg 10:4fda7b01484a 261 this->event0_scene3(lcd);
rottenegg 8:e3a76a808a4c 262 break;
rottenegg 8:e3a76a808a4c 263 case 4:
rottenegg 21:f3b0ce18b44f 264 this->event0_scene4(lcd,CM,wav);
rottenegg 8:e3a76a808a4c 265 break;
rottenegg 8:e3a76a808a4c 266 }
rottenegg 8:e3a76a808a4c 267 }
rottenegg 8:e3a76a808a4c 268
rottenegg 17:7d4d8905b608 269 void SceneCreator::pos_func1(int sce,Bitmap &lcd,CaMove &CM,int rng) {
rottenegg 8:e3a76a808a4c 270 switch(sce) {
rottenegg 8:e3a76a808a4c 271 case 0:
rottenegg 9:ac396c818874 272 this->event1_scene0(lcd);
rottenegg 8:e3a76a808a4c 273 break;
rottenegg 8:e3a76a808a4c 274 case 1:
rottenegg 14:165fff6d1854 275 this->event1_scene1(lcd,CM);
rottenegg 8:e3a76a808a4c 276 break;
rottenegg 8:e3a76a808a4c 277 case 2:
rottenegg 8:e3a76a808a4c 278 break;
rottenegg 8:e3a76a808a4c 279 case 3:
rottenegg 10:4fda7b01484a 280 this->event1_scene3(lcd);
rottenegg 8:e3a76a808a4c 281 break;
rottenegg 8:e3a76a808a4c 282 case 4:
rottenegg 8:e3a76a808a4c 283 break;
rottenegg 8:e3a76a808a4c 284 }
rottenegg 8:e3a76a808a4c 285 }
rottenegg 8:e3a76a808a4c 286
rottenegg 17:7d4d8905b608 287 void SceneCreator::pos_func2(int sce,Bitmap &lcd,CaMove &CM,int rng) {
rottenegg 10:4fda7b01484a 288 switch(sce) {
rottenegg 10:4fda7b01484a 289 case 0:
rottenegg 10:4fda7b01484a 290 break;
rottenegg 10:4fda7b01484a 291 case 1:
rottenegg 10:4fda7b01484a 292 break;
rottenegg 10:4fda7b01484a 293 case 2:
rottenegg 10:4fda7b01484a 294 break;
rottenegg 10:4fda7b01484a 295 case 3:
rottenegg 10:4fda7b01484a 296 this->event2_scene3(lcd);
rottenegg 10:4fda7b01484a 297 break;
rottenegg 10:4fda7b01484a 298 case 4:
rottenegg 10:4fda7b01484a 299 break;
rottenegg 10:4fda7b01484a 300 }
rottenegg 10:4fda7b01484a 301 }
rottenegg 10:4fda7b01484a 302
rottenegg 10:4fda7b01484a 303
rottenegg 17:7d4d8905b608 304 void SceneCreator::pos_func3(int sce,Bitmap &lcd,CaMove &CM,int rng) {
rottenegg 10:4fda7b01484a 305 switch(sce) {
rottenegg 10:4fda7b01484a 306 case 0:
rottenegg 10:4fda7b01484a 307 break;
rottenegg 10:4fda7b01484a 308 case 1:
rottenegg 10:4fda7b01484a 309 break;
rottenegg 10:4fda7b01484a 310 case 2:
rottenegg 10:4fda7b01484a 311 break;
rottenegg 10:4fda7b01484a 312 case 3:
rottenegg 10:4fda7b01484a 313 this->event3_scene3(lcd,CM);
rottenegg 10:4fda7b01484a 314 break;
rottenegg 10:4fda7b01484a 315 case 4:
rottenegg 10:4fda7b01484a 316 break;
rottenegg 10:4fda7b01484a 317 }
rottenegg 10:4fda7b01484a 318 }
rottenegg 10:4fda7b01484a 319
rottenegg 17:7d4d8905b608 320 void SceneCreator::pos_func4(int sce,Bitmap &lcd,CaMove &CM,int rng) {
rottenegg 8:e3a76a808a4c 321 switch(sce) {
rottenegg 8:e3a76a808a4c 322 case 0:
rottenegg 8:e3a76a808a4c 323 break;
rottenegg 8:e3a76a808a4c 324 case 1:
rottenegg 8:e3a76a808a4c 325 break;
rottenegg 8:e3a76a808a4c 326 case 2:
rottenegg 8:e3a76a808a4c 327 break;
rottenegg 8:e3a76a808a4c 328 case 3:
rottenegg 8:e3a76a808a4c 329 break;
rottenegg 8:e3a76a808a4c 330 case 4:
rottenegg 8:e3a76a808a4c 331 break;
rottenegg 8:e3a76a808a4c 332 }
rottenegg 8:e3a76a808a4c 333 }
rottenegg 8:e3a76a808a4c 334
rottenegg 21:f3b0ce18b44f 335 //Accessors and Mutators and other Small Functions
rottenegg 20:01efa2bce75d 336
rottenegg 15:3d29fb195958 337 bool SceneCreator::get_dead() {
rottenegg 15:3d29fb195958 338 return dead;
rottenegg 15:3d29fb195958 339 }
rottenegg 15:3d29fb195958 340
rottenegg 15:3d29fb195958 341 void SceneCreator::set_dead(bool opt) {
rottenegg 15:3d29fb195958 342 dead = opt;
rottenegg 15:3d29fb195958 343 }
rottenegg 21:f3b0ce18b44f 344
rottenegg 21:f3b0ce18b44f 345
rottenegg 21:f3b0ce18b44f 346 void SceneCreator::flashy(Bitmap &lcd) {
rottenegg 21:f3b0ce18b44f 347 this->flash(lcd);
rottenegg 21:f3b0ce18b44f 348 }