1 /*
2 * DESCRIPCION DEL JUEGO
3 * Copyright (C) 2007 Javier P�rez Pacheco
4 *
5 * Este juego tienen licencia Creative Commons y se permite
6 * su modificacion y utilizacion libremente siempre y cuando se
7 * cite al autor original y se comparta con la misma licencia.
8 * No se permite su uso comercial.
9 *
10 * Para mas informacion visite la web:
11 * http://creativecommons.org/licenses/by-nc-sa/2.0/es/
12 *
13 * PROGRAMADOR
14 * Javier P�rez Pacheco
15 * Cadiz (Spain)
16 * javielinux@gmail.com
17 *
18 * GRAFISMO Y 3D
19 * Jesus Carrasco
20 * Cadiz (Spain)
21 * carrasco.carrasco@gmail.com
22 *
23 * MUSICA Y GRAFISMO
24 * Shano Lores
25 * Cadiz (Spain)
26 * shanakla@gmail.com
27 *
28 */
29
30 #include "scene_game.h"
31
32 class SceneGame;
33
bNext_SceneGame_OnClick(Scene * s,Button * b)34 void bNext_SceneGame_OnClick (Scene *s, Button *b) {
35 //SceneGame* se = (SceneGame*)s;
36 Board::GetInstance()->nextHistory();
37 }
38
bPrevious_SceneGame_OnClick(Scene * s,Button * b)39 void bPrevious_SceneGame_OnClick (Scene *s, Button *b) {
40 //SceneGame* se = (SceneGame*)s;
41 Board::GetInstance()->previousHistory();
42 }
43
bOption_SceneGame_OnClick(Scene * s,Button * b)44 void bOption_SceneGame_OnClick (Scene *s, Button *b) {
45 SceneGame* se = (SceneGame*)s;
46 se->typeMusic->setFrame(se->getTypeMusic());
47 se->setSaveImage(true);
48 se->setStatusScene(SCENE_GAME_OPTIONS);
49 }
50
bReset_SceneGame_OnClick(Scene * s,Button * b)51 void bReset_SceneGame_OnClick (Scene *s, Button *b) {
52 SceneGame* se = (SceneGame*)s;
53 se->clear();
54 Board::GetInstance()->loadLevel();
55 se->setStatusScene(SCENE_GAME_MAIN);
56 }
57
bQuit_SceneGame_OnClick(Scene * s,Button * b)58 void bQuit_SceneGame_OnClick (Scene *s, Button *b) {
59 SceneGame* se = (SceneGame*)s;
60 se->getMusicGame()->stop(2000);
61 se->goToScene("menu", 2000, SCENE_TRANSITION_FADEOUT);
62 }
63
bAcceptInfo_SceneGame_OnClick(Scene * s,Button * b)64 void bAcceptInfo_SceneGame_OnClick (Scene *s, Button *b) {
65 SceneGame* se = (SceneGame*)s;
66 if (se->getStatusScene()==SCENE_GAME_TRAY) {
67 Sounds::GetInstance()->getSound("eating")->play(9, -1);
68 }
69 se->setStatusScene(SCENE_GAME_MAIN);
70 }
71
bAccept_SceneGame_OnClick(Scene * s,Button * b)72 void bAccept_SceneGame_OnClick (Scene *s, Button *b) {
73 SceneGame* se = (SceneGame*)s;
74
75 char tmp[8];
76 sprintf (tmp, "%d", se->volumeMusics->getIndex());
77 Options::GetInstance()->setValue("music", tmp);
78 sprintf (tmp, "%d", se->volumeEffects->getIndex());
79 Options::GetInstance()->setValue("effects", tmp);
80 if (se->cbHelpActived->getActive()) {
81 Options::GetInstance()->setValue("helpactived", "true");
82 } else {
83 Options::GetInstance()->setValue("helpactived", "false");
84 }
85 Options::GetInstance()->save();
86
87 Sound::setPorcentVolumeByCategory("music", 20*(Options::GetInstance()->getValueToInt("music")));
88 Sound::setPorcentVolumeByCategory("high_music", 20*(Options::GetInstance()->getValueToInt("music")+1));
89 Sound::setPorcentVolumeByCategory("low_music", 20*(Options::GetInstance()->getValueToInt("music")-1));
90 Sound::setPorcentVolumeByCategory("musicgame", (20*(Options::GetInstance()->getValueToInt("music")))/3);
91 Sound::setPorcentVolumeByCategory("effect", 20*(Options::GetInstance()->getValueToInt("effects")));
92
93 se->loadMusic(se->typeMusic->getIndex());
94 se->getMusicGame()->play(1,-1);
95
96 se->setStatusScene(SCENE_GAME_MAIN);
97 }
98
bCancel_SceneGame_OnClick(Scene * s,Button * b)99 void bCancel_SceneGame_OnClick (Scene *s, Button *b) {
100 SceneGame* se = (SceneGame*)s;
101 se->setStatusScene(SCENE_GAME_MAIN);
102 }
103
bRetry_SceneGame_OnClick(Scene * s,Button * b)104 void bRetry_SceneGame_OnClick (Scene *s, Button *b) {
105 SceneGame* se = (SceneGame*)s;
106 se->clear();
107 Board::GetInstance()->loadLevel();
108 se->setStatusScene(SCENE_GAME_MAIN);
109 }
110
bLeave_SceneGame_OnClick(Scene * s,Button * b)111 void bLeave_SceneGame_OnClick (Scene *s, Button *b) {
112 SceneGame* se = (SceneGame*)s;
113 se->getMusicGame()->stop(2000);
114 se->goToScene("menu", 2000, SCENE_TRANSITION_FADEOUT);
115 }
116
bContinue_SceneGame_OnClick(Scene * s,Button * b)117 void bContinue_SceneGame_OnClick (Scene *s, Button *b) {
118 SceneGame* se = (SceneGame*)s;
119 se->goToNextLevel();
120 }
121
bBack_SceneGame_OnClick(Scene * s,Button * b)122 void bBack_SceneGame_OnClick (Scene *s, Button *b) {
123 SceneGame* se = (SceneGame*)s;
124 se->getMusicGame()->stop(2000);
125 se->goToScene("menu", 2000, SCENE_TRANSITION_FADEOUT);
126 }
127
128
129
SceneGame()130 SceneGame::SceneGame() : Scene () {
131 statusScene = SCENE_GAME_MAIN;
132 active = false;
133 hasEyeInformation = false;
134 hasHelp = false;
135 indexMusicActive = 0;
136 animationEnd = false;
137 hasHelpFirstLevel = false;
138 showedHelpFirstLevel = false;
139 }
140
goToNextLevel()141 void SceneGame::goToNextLevel() {
142 if (Users::GetInstance()->getCurrentUser()->getLevelInCurrentMission() > Missions::GetInstance()->currentMission->getNLevels()-1) {
143 if (Missions::GetInstance()->currentMission->getDirectory()=="andalucia") {
144 setDrawCursor(false);
145 setStatusScene(SCENE_GAME_ENDANIMATION);
146 } else {
147 setStatusScene(SCENE_GAME_FINISH);
148 }
149 } else {
150 if (Missions::GetInstance()->setCurrentLevel()) {
151 if (!animationEnd) {
152 goToScene("infotown", 1000, SCENE_TRANSITION_FADEOUT_SCALEx0);
153 } else {
154 setDrawCursor(false);
155 setStatusScene(SCENE_GAME_ENDANIMATION);
156 }
157 } else {
158 if (Missions::GetInstance()->currentMission->getDirectory()=="andalucia") {
159 setDrawCursor(false);
160 setStatusScene(SCENE_GAME_ENDANIMATION);
161 } else {
162 setStatusScene(SCENE_GAME_FINISH);
163 }
164 }
165 }
166 }
167
setAnimationEnd(string a)168 void SceneGame::setAnimationEnd (string a) {
169 animationEnd = true;
170 s_animend = new SceneAnimation();
171 s_animend->setId(5);
172 s_animend->setWorld((World*)this);
173 s_animend->setDirectory(a);
174 s_animend->setNameSceneWhenScape("infotown");
175 s_animend->setDrawCursor(false);
176 }
177
~SceneGame()178 SceneGame::~SceneGame() {
179 unLoad();
180 }
181
setStatusScene(int s)182 void SceneGame::setStatusScene(int s) {
183 statusScene = s;
184 Board::GetInstance()->beginAnimationWaiting();
185 switch(statusScene) {
186 case SCENE_GAME_MAIN:
187 if (!getMusicGame()->playing()) {
188 getMusicGame()->play(1, -1, 2000);
189 }
190 break;
191 case SCENE_GAME_CAPTURED:
192 case SCENE_GAME_WINNING:
193 getMusicGame()->stop(2000);
194 Sounds::GetInstance()->getSound("eating")->stop();
195 break;
196 case SCENE_GAME_WIN:
197 windowWin->setCurrentScale(0);
198 windowWin->setScaleFlexible(windowWin->getWidthOriginal(), windowWin->getHeightOriginal());
199 textInWindows->setCurrentFrame(0);
200 textInWindows->setFadeIn(1000);
201 frameUp->setY(-150);
202 frameUp->setMovementSmoothY(0);
203 frameDown->setY(800);
204 frameDown->setMovementSmoothY(600);
205 Sounds::GetInstance()->getSound("windows_win")->play(8, 0);
206 break;
207 case SCENE_GAME_LOST:
208 windowLost->setCurrentScale(0);
209 windowLost->setScaleFlexible(windowLost->getWidthOriginal(), windowLost->getHeightOriginal());
210 textInWindows->setCurrentFrame(1);
211 textInWindows->setFadeIn(1000);
212 frameUp->setY(-150);
213 frameUp->setMovementSmoothY(0);
214 frameDown->setY(800);
215 frameDown->setMovementSmoothY(600);
216 Sounds::GetInstance()->getSound("windows_captured")->play(8, 0);
217 break;
218 case SCENE_GAME_TRAY:
219 bAcceptInfo->setY(421);
220 bgInfo->setCurrentScale(0);
221 bgInfo->setScaleFlexible(bgInfo->getWidthOriginal(), bgInfo->getHeightOriginal());
222 frameUp->setY(-150);
223 frameUp->setMovementSmoothY(0);
224 frameDown->setY(800);
225 frameDown->setMovementSmoothY(600);
226 break;
227 case SCENE_GAME_HELP:
228 bAcceptInfo->setY(421);
229 bgInfo->setCurrentScale(0);
230 bgInfo->setScaleFlexible(bgInfo->getWidthOriginal(), bgInfo->getHeightOriginal());
231 frameUp->setY(-150);
232 frameUp->setMovementSmoothY(0);
233 frameDown->setY(800);
234 frameDown->setMovementSmoothY(600);
235 break;
236 case SCENE_GAME_FINISH:
237 windowFinish->setCurrentScale(0);
238 windowFinish->setScaleFlexible(windowFinish->getWidthOriginal(), windowFinish->getHeightOriginal());
239 textInWindowsFinal->setFadeIn(1000);
240 break;
241 case SCENE_GAME_HELPFIRSTLEVEL:
242 bAcceptInfo->setY(490);
243 break;
244 }
245 }
246
loadMusic(int t)247 void SceneGame::loadMusic(int t) {
248 if (Sounds::GetInstance()->existSound("musicgame")) {
249 Sounds::GetInstance()->getSound("musicgame")->stop();
250 Sounds::GetInstance()->getSound("musicgame")->unLoad();
251 Sounds::GetInstance()->removeSound("musicgame");
252 }
253
254 bool todo = true;
255
256 if ( Missions::GetInstance()->currentLevel->existFile("music.ogg") ) {
257 todo = false;
258 Sounds::GetInstance()->addSound("musicgame", "musicgame", Missions::GetInstance()->currentLevel->getPath() + "/music.ogg");
259 Board::GetInstance()->musicOfLevel = true;
260 if (!Sounds::GetInstance()->existSound("musicgame")) {
261 todo = true;
262 }
263 }
264
265 if (todo) {
266 setTypeMusic(t);
267 char tmp[8];
268 sprintf (tmp, "%d", t);
269 Options::GetInstance()->setValue("musicgame", tmp);
270 Options::GetInstance()->save();
271
272 sprintf(tmp, "game%d", t);
273 Sounds::GetInstance()->addSoundFromData("musicgame", "musicgame", "sound/"+(string)tmp+".ogg");
274 Board::GetInstance()->musicOfLevel = false;
275 }
276 }
277
verifyEyeInformation()278 void SceneGame::verifyEyeInformation() {
279 string dirL = Missions::GetInstance()->currentLevel->getPath() + "/eyeleft";
280 string dirR = Missions::GetInstance()->currentLevel->getPath() + "/eyeright";
281
282 DIR *pdir;
283 struct dirent *pent;
284
285 if ( WorkingData::GetInstance()->existFile(dirL) && WorkingData::GetInstance()->existFile(dirR) ) {
286
287 hasEyeInformation = true;
288
289 pdir=opendir(dirR.c_str());
290
291 if (pdir) {
292 while ((pent=readdir(pdir))) {
293 string ext = WorkingData::GetInstance()->getExtension(pent->d_name);
294 if ( ext == "PNG" ) {
295 imageEyeRight->addFrameFile(dirR+"/"+pent->d_name);
296 }
297 }
298 closedir(pdir);
299 }
300
301 pdir=opendir(dirL.c_str());
302
303 if (pdir) {
304 while ((pent=readdir(pdir))) {
305 string ext = WorkingData::GetInstance()->getExtension(pent->d_name);
306 if ( ext == "PNG" ) {
307 imageEyeLeft->addFrameFile(dirL+"/"+pent->d_name);
308 }
309 }
310 closedir(pdir);
311 }
312
313
314 }
315
316 }
317
createHelpFirstLevel()318 void SceneGame::createHelpFirstLevel() {
319
320 hasHelpFirstLevel = true;
321 helpFirstLevel = new Slide();
322 helpFirstLevel->setTypeSlide(TYPESLIDE_ROTATE);
323 helpFirstLevel->setX(400);
324 helpFirstLevel->setY(280);
325
326 helpFirstLevel->addFrameFileFromData(Language::GetInstance()->getFilename("/help/sol_level1_0", "jpg"));
327 helpFirstLevel->addFrameFileFromData(Language::GetInstance()->getFilename("/help/sol_level1_1", "jpg"));
328 helpFirstLevel->addFrameFileFromData(Language::GetInstance()->getFilename("/help/sol_level1_2", "jpg"));
329 helpFirstLevel->addFrameFileFromData(Language::GetInstance()->getFilename("/help/sol_level1_3", "jpg"));
330 helpFirstLevel->addFrameFileFromData(Language::GetInstance()->getFilename("/help/sol_level1_4", "jpg"));
331
332 bRightFirstLevel = new Button();
333 bRightFirstLevel->setXY(670, 260);
334 bRightFirstLevel->setSoundClick("beep1");
335 bRightFirstLevel->setFlip(true);
336 bRightFirstLevel->setScales(1.0, 1.05);
337 bRightFirstLevel->setVAlign(VALIGN_CENTER);
338
339 bRightFirstLevel->imageOut(WorkingSurfaces::GetInstance()->surfaceFromImage((string)DATA_DIR + "/createmissions/bleft_on.png"));
340 bRightFirstLevel->imageOff(WorkingSurfaces::GetInstance()->surfaceFromImage((string)DATA_DIR + "/createmissions/bleft_off.png"));
341 bRightFirstLevel->setAnimation("out");
342
343 bLeftFirstLevel = new Button();
344 bLeftFirstLevel->setXY(130, 260);
345 bLeftFirstLevel->setSoundClick("beep1");
346 bLeftFirstLevel->setScales(1.0, 1.05);
347 bLeftFirstLevel->setVAlign(VALIGN_CENTER);
348 bLeftFirstLevel->setAlign(ALIGN_RIGHT);
349
350 bLeftFirstLevel->imageOut(WorkingSurfaces::GetInstance()->surfaceFromImage((string)DATA_DIR + "/createmissions/bleft_on.png"));
351 bLeftFirstLevel->imageOff(WorkingSurfaces::GetInstance()->surfaceFromImage((string)DATA_DIR + "/createmissions/bleft_off.png"));
352 bLeftFirstLevel->setAnimation("out");
353
354 }
355
load()356 void SceneGame::load() {
357
358 initialize();
359
360 hasEyeInformation = false;
361 hasHelp = false;
362
363 char tmp[128];
364
365 ProgressBar *pb = new ProgressBar(5, 200, 16, 255, 255, 255);
366
367 pb->setBg((string)DATA_DIR + "/title.png");
368 pb->setBgBar((string)DATA_DIR + "/bg_barprogress.png");
369 pb->setPositionBar(World::width/2, 300);
370 pb->setText("font-texts", Language::GetInstance()->getText("loading_sounds"));
371 pb->draw();
372
373 Sounds::GetInstance()->addSoundFromData("steps_nimuh", "effect", "sound/steps_nimuh.ogg");
374 Sounds::GetInstance()->addSoundFromData("steps_enemy1", "effect", "sound/steps_enemy1.ogg");
375 Sounds::GetInstance()->addSoundFromData("steps_enemy2", "effect", "sound/steps_enemy2.ogg");
376 Sounds::GetInstance()->addSoundFromData("steps_enemy3", "effect", "sound/steps_enemy3.ogg");
377 Sounds::GetInstance()->addSoundFromData("teletransport", "effect", "sound/teletransport.ogg");
378 Sounds::GetInstance()->addSoundFromData("blackhole_in", "effect", "sound/blackhole_in.ogg");
379 Sounds::GetInstance()->addSoundFromData("blackhole_out", "effect", "sound/blackhole_out.ogg");
380 Sounds::GetInstance()->addSoundFromData("doorkey", "effect", "sound/doorkey.ogg");
381 Sounds::GetInstance()->addSoundFromData("pop", "effect", "sound/pop.ogg");
382 Sounds::GetInstance()->addSoundFromData("colision", "effect", "sound/colision.ogg");
383 Sounds::GetInstance()->addSoundFromData("eating", "low_effect", "sound/eating.ogg");
384 Sounds::GetInstance()->addSoundFromData("out_door", "effect", "sound/out_door.ogg");
385 Sounds::GetInstance()->addSoundFromData("windows_captured", "music", "sound/windows_captured.ogg");
386 Sounds::GetInstance()->addSoundFromData("windows_win", "music", "sound/windows_win.ogg");
387 Sounds::GetInstance()->addSoundFromData("open_tray", "music", "sound/open_tray.ogg");
388 Sounds::GetInstance()->addSoundFromData("menubar", "effect", "sound/menubar.ogg");
389 Sounds::GetInstance()->addSoundFromData("open_eye", "effect", "sound/open_eye.ogg");
390 Sounds::GetInstance()->addSoundFromData("nimuh_scratch", "effect", "sound/nimuh_scratch.ogg");
391 Sounds::GetInstance()->addSoundFromData("nimuh_clean", "effect", "sound/nimuh_clean.ogg");
392 Sounds::GetInstance()->addSoundFromData("enemy1_impatient", "effect", "sound/enemy1_impatient.ogg");
393 Sounds::GetInstance()->addSoundFromData("enemy1_proud", "effect", "sound/enemy1_proud.ogg");
394 Sounds::GetInstance()->addSoundFromData("enemy2_cazzo", "effect", "sound/enemy2_cazzo.ogg");
395 Sounds::GetInstance()->addSoundFromData("enemy2_peeing", "effect", "sound/enemy2_peeing.ogg");
396 Sounds::GetInstance()->addSoundFromData("gun", "effect", "sound/gun.ogg");
397 Sounds::GetInstance()->addSoundFromData("jail", "effect", "sound/jail.ogg");
398 Sounds::GetInstance()->addSoundFromData("crying", "low_effect", "sound/crying.ogg");
399
400 pb->setText("font-texts", Language::GetInstance()->getText("loading_menu"));
401 pb->draw();
402
403 menu = new Group();
404 menu->setY(379);
405
406 bgMenu = new Element();
407 bgMenu->addFrameFileFromData("/menu/bg.png");
408
409 menu->addElement(bgMenu);
410 getGroupScene()->addElement(bgMenu);
411
412 bNext = new Button();
413 bNext->setSoundOn("click0");
414 bNext->setAlign(ALIGN_CENTER);
415 bNext->setVAlign(VALIGN_CENTER);
416 bNext->setX(472);
417 bNext->setY(175);
418
419 bNext->imageOut(WorkingSurfaces::GetInstance()->surfaceFromImage((string)DATA_DIR + "/menu/b_next_off.png"));
420 bNext->imageOn(WorkingSurfaces::GetInstance()->surfaceFromImage((string)DATA_DIR + "/menu/b_next_on.png"));
421 bNext->setAnimation("out");
422
423 bNext->OnClick = bNext_SceneGame_OnClick;
424
425 menu->addElement((Element*)bNext);
426
427 getGroupScene()->addElement(bNext);
428
429 bPrevious = new Button();
430 bPrevious->setSoundOn("click0");
431 bPrevious->setAlign(ALIGN_CENTER);
432 bPrevious->setVAlign(VALIGN_CENTER);
433 bPrevious->setX(321);
434 bPrevious->setY(176);
435
436 bPrevious->imageOut(WorkingSurfaces::GetInstance()->surfaceFromImage((string)DATA_DIR + "/menu/b_previous_off.png"));
437 bPrevious->imageOn(WorkingSurfaces::GetInstance()->surfaceFromImage((string)DATA_DIR + "/menu/b_previous_on.png"));
438 bPrevious->setAnimation("out");
439
440 bPrevious->OnClick = bPrevious_SceneGame_OnClick;
441
442 menu->addElement((Element*)bPrevious);
443
444 getGroupScene()->addElement(bPrevious);
445
446 bReset = new Button();
447 bReset->setSoundOn("click0");
448 bReset->setAlign(ALIGN_CENTER);
449 bReset->setVAlign(VALIGN_CENTER);
450 bReset->setX(369);
451 bReset->setY(199);
452
453 bReset->imageOut(WorkingSurfaces::GetInstance()->surfaceFromImage((string)DATA_DIR + "/menu/" + Language::GetInstance()->getFilename("b_reset_off", "png")));
454 bReset->imageOn(WorkingSurfaces::GetInstance()->surfaceFromImage((string)DATA_DIR + "/menu/" + Language::GetInstance()->getFilename("b_reset_on", "png")));
455 bReset->setAnimation("out");
456
457 bReset->OnClick = bReset_SceneGame_OnClick;
458
459 menu->addElement((Element*)bReset);
460
461 getGroupScene()->addElement(bReset);
462
463 bOption = new Button();
464 bOption->setSoundOn("click0");
465 bOption->setAlign(ALIGN_CENTER);
466 bOption->setVAlign(VALIGN_CENTER);
467 bOption->setX(397);
468 bOption->setY(171);
469
470 bOption->imageOut(WorkingSurfaces::GetInstance()->surfaceFromImage((string)DATA_DIR + "/menu/" + Language::GetInstance()->getFilename("b_options_off", "png")));
471 bOption->imageOn(WorkingSurfaces::GetInstance()->surfaceFromImage((string)DATA_DIR + "/menu/" + Language::GetInstance()->getFilename("b_options_on", "png")));
472 bOption->setAnimation("out");
473
474 bOption->OnClick = bOption_SceneGame_OnClick;
475
476 menu->addElement((Element*)bOption);
477
478 getGroupScene()->addElement(bOption);
479
480 bQuit = new Button();
481 bQuit->setSoundOn("click0");
482 bQuit->setAlign(ALIGN_CENTER);
483 bQuit->setVAlign(VALIGN_CENTER);
484 bQuit->setX(423);
485 bQuit->setY(196);
486
487 bQuit->imageOut(WorkingSurfaces::GetInstance()->surfaceFromImage((string)DATA_DIR + "/menu/" + Language::GetInstance()->getFilename("b_quit_off", "png")));
488 bQuit->imageOn(WorkingSurfaces::GetInstance()->surfaceFromImage((string)DATA_DIR + "/menu/" + Language::GetInstance()->getFilename("b_quit_on", "png")));
489 bQuit->setAnimation("out");
490
491 bQuit->OnClick = bQuit_SceneGame_OnClick;
492
493 menu->addElement((Element*)bQuit);
494
495 getGroupScene()->addElement(bQuit);
496
497 eyeLeft = new AnimatedElement();
498 eyeLeft->setAlign(ALIGN_CENTER);
499 eyeLeft->setVAlign(VALIGN_CENTER);
500 eyeLeft->addRangeFramesFromData("menu/eye_left", "png", 0, 4);
501 eyeLeft->setXY(75, 86);
502 menu->addElement((Element*)eyeLeft);
503
504 imageEyeLeft = new Slide();
505 imageEyeLeft->setXY(75, 86);
506 imageEyeLeft->setAlign(ALIGN_CENTER);
507 imageEyeLeft->setVAlign(VALIGN_CENTER);
508 imageEyeLeft->setTimeNextFrame(15000);
509 menu->addElement((Element*)imageEyeLeft);
510
511 eyeRight = new AnimatedElement();
512 eyeRight->setAlign(ALIGN_CENTER);
513 eyeRight->setVAlign(VALIGN_CENTER);
514 eyeRight->addRangeFramesFromData("menu/eye_right", "png", 0, 4);
515 eyeRight->setXY(724, 88);
516 menu->addElement((Element*)eyeRight);
517
518 imageEyeRight = new Slide();
519 imageEyeRight->setXY(724, 88);
520 imageEyeRight->setAlign(ALIGN_CENTER);
521 imageEyeRight->setVAlign(VALIGN_CENTER);
522 imageEyeRight->setTimeNextFrame(15000);
523 menu->addElement((Element*)imageEyeRight);
524
525 verifyEyeInformation();
526
527 levelStatus = new Element();
528 //levelStatus->setCurrentScale(0.5);
529 levelStatus->setAlign(ALIGN_CENTER);
530 levelStatus->setVAlign(VALIGN_CENTER);
531 sprintf(tmp, "%d/%d", Users::GetInstance()->getCurrentUser()->getLevelInCurrentMission()+1, Missions::GetInstance()->currentMission->getNLevels());
532 levelStatus->addFrameText("font-texts", tmp, ALIGN_CENTER);
533 levelStatus->setXY(215, 140);
534 menu->addElement(levelStatus);
535
536 chronometer = new ChronometerElement("game", "font-texts");
537 //chronometer->setCurrentScale(0.4);
538 chronometer->setXY(564, 139);
539 chronometer->setSeconds(0);
540 menu->addGroup(chronometer);
541
542 Animation a;
543 a.setName("open");
544 a.setCyclesBetweenFrames(6);
545 a.addRangeFrame(0, 4, 1);
546 eyeRight->addAnimation(a);
547 eyeLeft->addAnimation(a);
548
549 Animation b;
550 b.setName("close");
551 b.setCyclesBetweenFrames(6);
552 b.addRangeFrame(4, 0, -1);
553 eyeRight->addAnimation(b);
554 eyeLeft->addAnimation(b);
555
556 Animation c;
557 c.setName("closed");
558 c.addFrame(0);
559 eyeRight->addAnimation(c);
560 eyeLeft->addAnimation(c);
561
562 Animation d;
563 d.setName("opened");
564 d.addFrame(4);
565 eyeRight->addAnimation(d);
566 eyeLeft->addAnimation(d);
567
568 //eyeLeft->setForceAnimation("open", 1);
569 //eyeRight->setForceAnimation("open", 1);
570 eyeRight->setForceAnimation("closed");
571 eyeLeft->setForceAnimation("closed");
572
573 pb->setText("font-texts", Language::GetInstance()->getText("loading_titles"));
574 pb->draw();
575
576 windowFinish = new Element();
577 windowFinish->setAlign(ALIGN_CENTER);
578 windowFinish->setVAlign(VALIGN_CENTER);
579 windowFinish->setXY(World::width/2, 250);
580 windowFinish->addFrameSurface(WorkingSurfaces::GetInstance()->surfaceFromImage((string)DATA_DIR + "/windows/" + Language::GetInstance()->getFilename("congratulations", "png")));
581
582 windowLost = new Element();
583 windowLost->setAlign(ALIGN_CENTER);
584 windowLost->setVAlign(VALIGN_CENTER);
585 windowLost->setXY(World::width/2, 250);
586 windowLost->addFrameSurface(WorkingSurfaces::GetInstance()->surfaceFromImage((string)DATA_DIR + "/windows/" + Language::GetInstance()->getFilename("captured", "png")));
587
588 windowWin = new Element();
589 windowWin->setAlign(ALIGN_CENTER);
590 windowWin->setVAlign(VALIGN_CENTER);
591 windowWin->setXY(World::width/2, 250);
592 windowWin->addFrameSurface(WorkingSurfaces::GetInstance()->surfaceFromImage((string)DATA_DIR + "/windows/" + Language::GetInstance()->getFilename("completed", "png")));
593
594 textInWindows = new Element();
595 textInWindows->setCurrentScale(0.37);
596 textInWindows->setXY(360, 240);
597
598 textInWindows->addFrameLanguage("font-computer", "txt_win", ALIGN_LEFT);
599 textInWindows->addFrameLanguage("font-computer", "txt_lost", ALIGN_LEFT);
600
601 textInWindowsFinal = new Element();
602 textInWindowsFinal->setAlign(ALIGN_CENTER);
603 textInWindowsFinal->setCurrentScale(0.41);
604 textInWindowsFinal->setRGB(190, 195, 53);
605 textInWindowsFinal->setXY(399, 265);
606
607 textInWindowsFinal->addFrameLanguage("font-computer", "txt_final", ALIGN_CENTER);
608
609 bRetry = new Button();
610 bRetry->setScales(0.40, 0.42);
611 bRetry->setAlign(ALIGN_CENTER);
612 bRetry->setVAlign(VALIGN_CENTER);
613 bRetry->setX(265);
614 bRetry->setY(375);
615 bRetry->setRGB(0,255,0);
616
617 bRetry->imageOut(Fonts::GetInstance()->getSurface_TextBitMap("font-computer", ALIGN_CENTER, Language::GetInstance()->getText("retry")));
618 bRetry->setAnimation("out");
619
620 bRetry->OnClick = bRetry_SceneGame_OnClick;
621
622 getGroupScene()->addElement((Element*)bRetry);
623
624 bContinue = new Button();
625 bContinue->setScales(0.40, 0.42);
626 bContinue->setAlign(ALIGN_CENTER);
627 bContinue->setVAlign(VALIGN_CENTER);
628 bContinue->setX(265);
629 bContinue->setY(375);
630 bContinue->setRGB(0,255,0);
631
632 bContinue->imageOut(Fonts::GetInstance()->getSurface_TextBitMap("font-computer", ALIGN_CENTER, Language::GetInstance()->getText("continue")));
633 bContinue->setAnimation("out");
634
635 bContinue->OnClick = bContinue_SceneGame_OnClick;
636
637 getGroupScene()->addElement((Element*)bContinue);
638
639 bLeave = new Button();
640 bLeave->setScales(0.40, 0.42);
641 bLeave->setAlign(ALIGN_CENTER);
642 bLeave->setVAlign(VALIGN_CENTER);
643 bLeave->setX(540);
644 bLeave->setY(375);
645 bLeave->setRGB(255,0,0);
646
647 bLeave->imageOut(Fonts::GetInstance()->getSurface_TextBitMap("font-computer", ALIGN_CENTER, Language::GetInstance()->getText("leave")));
648 bLeave->setAnimation("out");
649
650 bLeave->OnClick = bLeave_SceneGame_OnClick;
651
652 getGroupScene()->addElement((Element*)bLeave);
653
654 bBack = new Button();
655 bBack->setScales(0.37, 0.40);
656 bBack->setAlign(ALIGN_CENTER);
657 bBack->setVAlign(VALIGN_CENTER);
658 bBack->setX(399);
659 bBack->setY(387);
660 bBack->setRGB(0,255,0);
661
662 bBack->imageOut(Fonts::GetInstance()->getSurface_TextBitMap("font-computer", ALIGN_CENTER, Language::GetInstance()->getText("backmenu")));
663 bBack->setAnimation("out");
664
665 bBack->OnClick = bBack_SceneGame_OnClick;
666
667 getGroupScene()->addElement((Element*)bBack);
668
669 frameUp = new Element();
670 frameUp->setAlign(ALIGN_CENTER);
671 frameUp->setVAlign(VALIGN_TOP);
672 frameUp->setXY(World::width/2, 0);
673 frameUp->addFrameSurface(WorkingSurfaces::GetInstance()->surfaceFromImage((string)DATA_DIR + "/windows/frame_up.png"));
674
675 frameDown = new Element();
676 frameDown->setAlign(ALIGN_CENTER);
677 frameDown->setVAlign(VALIGN_BOTTOM);
678 frameDown->setXY(World::width/2, 600);
679 frameDown->addFrameSurface(WorkingSurfaces::GetInstance()->surfaceFromImage((string)DATA_DIR + "/windows/frame_down.png"));
680
681 pb->setText("font-texts", Language::GetInstance()->getText("loading_options"));
682 pb->draw();
683
684 bgOptions = new Element();
685 bgOptions->setAlign(ALIGN_CENTER);
686 bgOptions->setVAlign(VALIGN_CENTER);
687 bgOptions->setXY(World::width/2, 250);
688 bgOptions->addFrameFileFromData("/windows/" + Language::GetInstance()->getFilename("options", "png"));
689
690 titleVolumeMusics = new Element();
691 titleVolumeMusics->setAlign(ALIGN_CENTER);
692 titleVolumeMusics->setVAlign(VALIGN_CENTER);
693 titleVolumeMusics->setX(270);
694 titleVolumeMusics->setY(230);
695
696 titleVolumeMusics->addFrameLanguage("font-texts", "volumemusic", ALIGN_CENTER);
697
698 getGroupScene()->addElement(titleVolumeMusics);
699
700 titleVolumeEffects = new Element();
701 titleVolumeEffects->setAlign(ALIGN_CENTER);
702 titleVolumeEffects->setVAlign(VALIGN_CENTER);
703 titleVolumeEffects->setX(270);
704 titleVolumeEffects->setY(300);
705
706 titleVolumeEffects->addFrameLanguage("font-texts", "volumeeffects", ALIGN_CENTER);
707
708 getGroupScene()->addElement(titleVolumeEffects);
709
710 titleTypeMusic = new Element();
711 titleTypeMusic->setVAlign(VALIGN_CENTER);
712 titleTypeMusic->setAlign(ALIGN_CENTER);
713 titleTypeMusic->setX(530);
714 titleTypeMusic->setY(300);
715
716 titleTypeMusic->addFrameLanguage("font-texts", "typemusic", ALIGN_CENTER);
717
718 getGroupScene()->addElement(titleTypeMusic);
719
720 volumeMusics = new SelectButton();
721 volumeMusics->setX(175);
722 volumeMusics->setY(260);
723 //volumeMusics->OnClick = volumeMusics_SceneEditGame_OnClick;
724
725 volumeEffects = new SelectButton();
726 volumeEffects->setX(175);
727 volumeEffects->setY(330);
728 //volumeMusics->OnClick = volumeMusics_SceneEditGame_OnClick;
729
730 int i;
731
732 for (i=0; i<NVOLUMES; i++) {
733 sprintf(tmp, "%s/interface/sound%d.png", DATA_DIR, i);
734 volumeMusics->addObject(WorkingSurfaces::GetInstance()->surfaceFromImage(tmp));
735 sprintf(tmp, "%s/interface/fx%d.png", DATA_DIR, i);
736 volumeEffects->addObject(WorkingSurfaces::GetInstance()->surfaceFromImage(tmp));
737 }
738
739 volumeMusics->setFrame(Options::GetInstance()->getValueToInt("music"));
740 volumeEffects->setFrame(Options::GetInstance()->getValueToInt("effects"));
741
742 cbHelpActived = new CheckButton("font-texts", Language::GetInstance()->getText("activehelp"));
743 cbHelpActived->setX(425);
744 cbHelpActived->setY(230);
745
746 cbHelpActived->imageActive(WorkingSurfaces::GetInstance()->surfaceFromImage((string)DATA_DIR + "/interface/rad_on.png"));
747 cbHelpActived->imageInactive(WorkingSurfaces::GetInstance()->surfaceFromImage((string)DATA_DIR + "/interface/rad_off.png"));
748
749 if (Options::GetInstance()->getValue("helpactived") == "true")
750 cbHelpActived->setActive(true);
751
752 getGroupScene()->addGroup(cbHelpActived);
753
754 typeMusic = new SelectButton();
755 typeMusic->setX(470);
756 typeMusic->setY(330);
757
758 for (i=0; i<BoardInfo::GetInstance()->getValueToInt("NTYPES_MUSICGAME"); i++) {
759 sprintf(tmp, "%s %d", Language::GetInstance()->getText("type").c_str(), i+1);
760 typeMusic->addObject(Fonts::GetInstance()->getSurface_TextBitMap("font-texts", ALIGN_CENTER, tmp));
761 }
762
763 //typeMusic->setFrame(Options::GetInstance()->getValueToInt("musicgame"));
764
765
766 volumeMusics->setArrows(WorkingSurfaces::GetInstance()->surfaceFromImage((string)DATA_DIR+"/windows/arrow_left.png"), WorkingSurfaces::GetInstance()->surfaceFromImage((string)DATA_DIR+"/windows/arrow_right.png"));
767 volumeEffects->setArrows(WorkingSurfaces::GetInstance()->surfaceFromImage((string)DATA_DIR+"/windows/arrow_left.png"), WorkingSurfaces::GetInstance()->surfaceFromImage((string)DATA_DIR+"/windows/arrow_right.png"));
768 typeMusic->setArrows(WorkingSurfaces::GetInstance()->surfaceFromImage((string)DATA_DIR+"/windows/arrow_left.png"), WorkingSurfaces::GetInstance()->surfaceFromImage((string)DATA_DIR+"/windows/arrow_right.png"));
769
770 getGroupScene()->addGroup(volumeMusics);
771 getGroupScene()->addGroup(volumeEffects);
772
773 bAccept = new Button();
774 bAccept->setScales(0.4, 0.45);
775 bAccept->setAlign(ALIGN_CENTER);
776 bAccept->setVAlign(VALIGN_CENTER);
777 bAccept->setX(265);
778 bAccept->setY(382);
779 bAccept->setRGB(0, 255, 0);
780
781 bAccept->OnClick = bAccept_SceneGame_OnClick;
782
783 sprintf(tmp, Language::GetInstance()->getText("accept").c_str());
784 bAccept->imageOut(Fonts::GetInstance()->getSurface_TextBitMap("font-computer", ALIGN_CENTER, tmp));
785 bAccept->setAnimation("out");
786
787 getGroupScene()->addElement(bAccept);
788
789 bCancel = new Button();
790 bCancel->setScales(0.4, 0.45);
791 bCancel->setAlign(ALIGN_CENTER);
792 bCancel->setVAlign(VALIGN_CENTER);
793 bCancel->setX(540);
794 bCancel->setY(382);
795 bCancel->setRGB(255, 0, 0);
796
797 bCancel->OnClick = bCancel_SceneGame_OnClick;
798
799 sprintf(tmp, Language::GetInstance()->getText("cancel").c_str());
800 bCancel->imageOut(Fonts::GetInstance()->getSurface_TextBitMap("font-computer", ALIGN_CENTER, tmp));
801 bCancel->setAnimation("out");
802
803 getGroupScene()->addElement(bCancel);
804
805 bgInfo = new Element();
806 bgInfo->setAlign(ALIGN_CENTER);
807 bgInfo->setVAlign(VALIGN_CENTER);
808 bgInfo->setXY(World::width/2, 250);
809 bgInfo->addFrameFileFromData("/windows/" + Language::GetInstance()->getFilename("info", "png"));
810
811
812 bAcceptInfo = new Button();
813 bAcceptInfo->setScales(0.4, 0.45);
814 bAcceptInfo->setAlign(ALIGN_CENTER);
815 bAcceptInfo->setVAlign(VALIGN_CENTER);
816 bAcceptInfo->setX(400);
817 bAcceptInfo->setY(421);
818 bAcceptInfo->setRGB(0, 255, 0);
819
820 bAcceptInfo->OnClick = bAcceptInfo_SceneGame_OnClick;
821
822 sprintf(tmp, Language::GetInstance()->getText("accept").c_str());
823 bAcceptInfo->imageOut(Fonts::GetInstance()->getSurface_TextBitMap("font-computer", ALIGN_CENTER, tmp));
824 bAcceptInfo->setAnimation("out");
825
826 getGroupScene()->addElement(bAcceptInfo);
827
828 pb->setText("font-texts", Language::GetInstance()->getText("loading_board"));
829 pb->draw();
830
831 imageHelp = new Element();
832 imageHelp->setXY(200, 300);
833 imageHelp->setAlign(ALIGN_CENTER);
834 imageHelp->setVAlign(VALIGN_CENTER);
835
836 imageHelp->addFrameSurface(Primitives::GetInstance()->rectangle(1, 1, 0, 0, 0));
837
838 titleHelp = new Element();
839 titleHelp->setRGB(234, 238, 53);
840 titleHelp->setXY(480, 218);
841 titleHelp->setCurrentScale(0.40);
842 titleHelp->setAlign(ALIGN_CENTER);
843 titleHelp->setVAlign(VALIGN_CENTER);
844
845 titleHelp->addFrameSurface(Primitives::GetInstance()->rectangle(1, 1, 0, 0, 0));
846
847 textHelp = new Element();
848 textHelp->setXY(310, 255);
849 textHelp->setCurrentScale(0.90);
850
851 textHelp->addFrameSurface(Primitives::GetInstance()->rectangle(1, 1, 0, 0, 0));
852
853 loadMusic(getTypeMusic ());
854
855 Board::GetInstance()->setSceneGame(this);
856 Board::GetInstance()->load();
857 clear();
858 Board::GetInstance()->loadLevel();
859
860 nameProvince = new MarqueeElement();
861 nameProvince->setAlign(ALIGN_CENTER);
862 nameProvince->setVAlign(VALIGN_CENTER);
863 nameProvince->setText("font-computer", Board::GetInstance()->town.province, 10);
864 nameProvince->setXY(101, 192);
865 nameProvince->setCurrentScale(0.45);
866
867 menu->addElement((Element*)nameProvince);
868
869 nameTown = new MarqueeElement();
870 nameTown->setAlign(ALIGN_CENTER);
871 nameTown->setVAlign(VALIGN_CENTER);
872 nameTown->setText("font-computer", Board::GetInstance()->town.name, 10);
873 nameTown->setXY(701, 192);
874 nameTown->setCurrentScale(0.45);
875
876 menu->addElement((Element*)nameTown);
877
878 titleInfoTray = new Element();
879 titleInfoTray->setRGB(234, 238, 53);
880 titleInfoTray->setXY(480, 218);
881 titleInfoTray->setCurrentScale(0.40);
882 titleInfoTray->setAlign(ALIGN_CENTER);
883 titleInfoTray->setVAlign(VALIGN_CENTER);
884 if (Board::GetInstance()->infoTray.title=="") {
885 titleInfoTray->addFrameSurface(Primitives::GetInstance()->rectangle(1, 1, 0, 0, 0));
886 } else {
887 titleInfoTray->addFrameText("font-computer", Board::GetInstance()->infoTray.title, ALIGN_LEFT);
888 }
889
890 textInfoTray = new Element();
891 textInfoTray->setXY(310, 255);
892 textInfoTray->setCurrentScale(0.90);
893 if (Board::GetInstance()->infoTray.text=="") {
894 textInfoTray->addFrameSurface(Primitives::GetInstance()->rectangle(1, 1, 0, 0, 0));
895 } else {
896 textInfoTray->addFrameText("font-texts", Board::GetInstance()->infoTray.text, ALIGN_LEFT, 340);
897 }
898
899 drawFood = new Element();
900 drawFood->setXY(200, 300);
901 drawFood->setAlign(ALIGN_CENTER);
902 drawFood->setVAlign(VALIGN_CENTER);
903 string fileFood = Missions::GetInstance()->currentLevel->getPath() +"/food.png";
904 if (WorkingData::GetInstance()->existFile(fileFood)) {
905 SDL_Surface *sfc = WorkingSurfaces::GetInstance()->surfaceFromImage(fileFood);
906 if ( (sfc->h>200) || (sfc->w>200) ) {
907 drawFood->addFrameSurface(Primitives::GetInstance()->rectangle(1, 1, 0, 0, 0));
908 } else {
909 drawFood->addFrameFile(fileFood);
910 }
911 SDL_FreeSurface(sfc);
912 } else {
913 drawFood->addFrameSurface(Primitives::GetInstance()->rectangle(1, 1, 0, 0, 0));
914 }
915
916 getGroupScene()->addGroup(Board::GetInstance());
917
918 getMusicGame()->play(1, -1, 2000);
919
920 delete pb;
921
922 }
923
clear()924 void SceneGame::clear () {
925
926 active = false;
927
928 animationEnd = false;
929
930 hasHelpFirstLevel = false;
931 showedHelpFirstLevel = false;
932
933 Sounds::GetInstance()->getSound("eating")->stop();
934
935 menu->setY(600);
936
937 eyeLeft->setForceAnimation("closed");
938 eyeRight->setForceAnimation("closed");
939
940 Chronometer::GetInstance()->removeTime("intro_board");
941 Chronometer::GetInstance()->setTime("intro_board");
942
943 chronometer->stop();
944 chronometer->reset();
945
946 //Board::GetInstance()->clear();
947
948 }
949
loadHelp(string name)950 void SceneGame::loadHelp (string name) {
951
952 hasHelp = true;
953
954 if (name=="enemy1") {
955 imageHelp->changeFrameFileFromData(0, "/help/enemy1.png");
956 titleHelp->changeFrameLanguage(0, "font-computer", "helpboardtitle_enemy1", ALIGN_LEFT);
957 textHelp->changeFrameLanguage(0, "font-texts", "helpboardtext_enemy1", ALIGN_LEFT, 340);
958 } else if (name=="enemy2") {
959 imageHelp->changeFrameFileFromData(0, "/help/enemy2.png");
960 titleHelp->changeFrameLanguage(0, "font-computer", "helpboardtitle_enemy2", ALIGN_LEFT);
961 textHelp->changeFrameLanguage(0, "font-texts", "helpboardtext_enemy2", ALIGN_LEFT, 340);
962 } else if (name=="enemy3") {
963 imageHelp->changeFrameFileFromData(0, "/help/enemy3.png");
964 titleHelp->changeFrameLanguage(0, "font-computer", "helpboardtitle_enemy3", ALIGN_LEFT);
965 textHelp->changeFrameLanguage(0, "font-texts", "helpboardtext_enemy3", ALIGN_LEFT, 340);
966 } else if (name=="tray") {
967 imageHelp->changeFrameFileFromData(0, "/help/tray.png");
968 titleHelp->changeFrameLanguage(0, "font-computer", "helpboardtitle_tray", ALIGN_LEFT);
969 textHelp->changeFrameLanguage(0, "font-texts", "helpboardtext_tray", ALIGN_LEFT, 340);
970 } else if (name=="blackhole") {
971 imageHelp->changeFrameFileFromData(0, "/help/blackhole.png");
972 titleHelp->changeFrameLanguage(0, "font-computer", "helpboardtitle_blackhole", ALIGN_LEFT);
973 textHelp->changeFrameLanguage(0, "font-texts", "helpboardtext_blackhole", ALIGN_LEFT, 340);
974 } else if (name=="trap") {
975 imageHelp->changeFrameFileFromData(0, "/help/trap.png");
976 titleHelp->changeFrameLanguage(0, "font-computer", "helpboardtitle_trap", ALIGN_LEFT);
977 textHelp->changeFrameLanguage(0, "font-texts", "helpboardtext_trap", ALIGN_LEFT, 340);
978 } else if (name=="key") {
979 imageHelp->changeFrameFileFromData(0, "/help/grate.png");
980 titleHelp->changeFrameLanguage(0, "font-computer", "helpboardtitle_key", ALIGN_LEFT);
981 textHelp->changeFrameLanguage(0, "font-texts", "helpboardtext_key", ALIGN_LEFT, 340);
982 } else if (name=="helpfirstlevel") {
983 imageHelp->changeFrameFileFromData(0, "/help/help.png");
984 titleHelp->changeFrameLanguage(0, "font-computer", "helpboardtitle_helpfirstlevel", ALIGN_LEFT);
985 textHelp->changeFrameLanguage(0, "font-texts", "helpboardtext_helpfirstlevel", ALIGN_LEFT, 340);
986 }
987
988
989 }
990
991 /**********************
992 DRAWSCENE MAIN
993 **********************/
994
drawSceneMain()995 void SceneGame::drawSceneMain () {
996
997 if (!active) {
998 if ( Chronometer::GetInstance()->verifyTime("intro_board", 3000) ) {
999 menu->setMovementNormalY(379, 700);
1000 Sounds::GetInstance()->getSound("menubar")->play(6, 0);
1001 }
1002 if (hasEyeInformation) {
1003 if ( Chronometer::GetInstance()->verifyTime("intro_board", 4000) ) {
1004 eyeLeft->setForceAnimation("open", 1);
1005 eyeRight->setForceAnimation("open", 1);
1006 Sounds::GetInstance()->getSound("open_eye")->play(5, 0);
1007 }
1008 }
1009 if ( Chronometer::GetInstance()->verifyTime("intro_board", 5000) ) {
1010 if ( (hasHelp) && (Options::GetInstance()->getValue("helpactived")=="true") ) {
1011 setSaveImage(true);
1012 setStatusScene(SCENE_GAME_HELP);
1013 }
1014 chronometer->play();
1015 active = true;
1016 }
1017 }
1018
1019 if ( (chronometer->getSeconds()>120) && hasHelpFirstLevel && !showedHelpFirstLevel) {
1020 showedHelpFirstLevel = true;
1021 loadHelp("helpfirstlevel");
1022 setStatusScene(SCENE_GAME_HELP);
1023 }
1024
1025 if ((statusScene==SCENE_GAME_MAIN || statusScene==SCENE_GAME_STARTTRAY)&& active) {
1026 verifyOverElements_Main();
1027 Board::GetInstance()->stopAnimations();
1028 }
1029
1030 for (int i=0; i<MAX_INDEXZ; i++) {
1031 drawSceneMainByIndexZ(i);
1032 }
1033
1034 if (Board::GetInstance()->todoNextTurn) {
1035 Board::GetInstance()->todoNextTurn = false;
1036 Board::GetInstance()->nextTurn();
1037 }
1038
1039 }
1040
drawSceneMainByIndexZ(int z)1041 void SceneGame::drawSceneMainByIndexZ(int z) {
1042 if (Board::GetInstance()->getIndexZ() == z) {
1043 Board::GetInstance()->draw();
1044 }
1045 if (bgMenu->getIndexZ() == z) {
1046 menu->work();
1047 bgMenu->draw();
1048 }
1049 if (levelStatus->getIndexZ() == z) {
1050 levelStatus->draw();
1051 }
1052 if (chronometer->getIndexZ() == z) {
1053 chronometer->draw();
1054 }
1055 if (hasEyeInformation) {
1056 if (imageEyeRight->getIndexZ() == z) {
1057 imageEyeRight->draw();
1058 }
1059 if (imageEyeLeft->getIndexZ() == z) {
1060 imageEyeLeft->draw();
1061 }
1062 }
1063 if (eyeLeft->getIndexZ() == z) {
1064 eyeLeft->draw();
1065 }
1066 if (eyeRight->getIndexZ() == z) {
1067 eyeRight->draw();
1068 }
1069 if (bOption->getIndexZ() == z) {
1070 bOption->draw();
1071 }
1072 if (bNext->getIndexZ() == z) {
1073 bNext->draw();
1074 }
1075 if (bPrevious->getIndexZ() == z) {
1076 bPrevious->draw();
1077 }
1078 if (bReset->getIndexZ() == z) {
1079 bReset->draw();
1080 }
1081 if (bQuit->getIndexZ() == z) {
1082 bQuit->draw();
1083 }
1084 if (nameProvince->getIndexZ() == z) {
1085 nameProvince->draw();
1086 }
1087 if (nameTown->getIndexZ() == z) {
1088 nameTown->draw();
1089 }
1090 }
1091
verifyClickElements_Main()1092 void SceneGame::verifyClickElements_Main() {
1093 if (bNext->isOnMouseOver()) {
1094 bNext->OnClick(this, bNext);
1095 return;
1096 }
1097 if (bPrevious->isOnMouseOver()) {
1098 bPrevious->OnClick(this, bPrevious);
1099 return;
1100 }
1101 if (bOption->isOnMouseOver()) {
1102 bOption->OnClick(this, bOption);
1103 return;
1104 }
1105 if (bReset->isOnMouseOver()) {
1106 bReset->OnClick(this, bReset);
1107 return;
1108 }
1109 if (bQuit->isOnMouseOver()) {
1110 bQuit->OnClick(this, bQuit);
1111 return;
1112 }
1113 Board::GetInstance()->verifyClickOnBoard();
1114
1115 }
1116
1117
verifyOverElements_Main()1118 void SceneGame::verifyOverElements_Main() {
1119 bReset->onOver();
1120 bQuit->onOver();
1121 bOption->onOver();
1122 bNext->onOver();
1123 bPrevious->onOver();
1124 }
1125
1126 /**********************
1127 DRAWSCENE FINISH
1128 **********************/
1129
drawSceneFinish()1130 void SceneGame::drawSceneFinish () {
1131
1132 verifyOverElements_Finish();
1133 elmImgSave[0]->draw();
1134
1135 for (int i=0; i<MAX_INDEXZ; i++) {
1136 drawSceneFinishByIndexZ(i);
1137 }
1138
1139 }
1140
drawSceneFinishByIndexZ(int z)1141 void SceneGame::drawSceneFinishByIndexZ(int z) {
1142 if (frameUp->getIndexZ() == z) {
1143 frameUp->draw();
1144 }
1145 if (frameDown->getIndexZ() == z) {
1146 frameDown->draw();
1147 }
1148
1149 if (windowFinish->getIndexZ() == z) {
1150 windowFinish->draw();
1151 }
1152
1153 if (textInWindowsFinal->getIndexZ() == z) {
1154 textInWindowsFinal->draw();
1155 }
1156
1157 if (bBack->getIndexZ() == z) {
1158 bBack->draw();
1159 }
1160
1161 }
1162
verifyClickElements_Finish()1163 void SceneGame::verifyClickElements_Finish() {
1164 if (bBack->isOnMouseOver()) {
1165 bBack->OnClick(this, bBack);
1166 }
1167 }
1168
verifyOverElements_Finish()1169 void SceneGame::verifyOverElements_Finish() {
1170 bBack->onOver();
1171 }
1172
1173
1174 /**********************
1175 DRAWSCENE WIN
1176 **********************/
1177
drawSceneWin()1178 void SceneGame::drawSceneWin () {
1179
1180 verifyOverElements_Win();
1181 elmImgSave[0]->draw();
1182
1183 for (int i=0; i<MAX_INDEXZ; i++) {
1184 drawSceneWinByIndexZ(i);
1185 }
1186
1187 }
1188
drawSceneWinByIndexZ(int z)1189 void SceneGame::drawSceneWinByIndexZ(int z) {
1190
1191 if (frameUp->getIndexZ() == z) {
1192 frameUp->draw();
1193 }
1194 if (frameDown->getIndexZ() == z) {
1195 frameDown->draw();
1196 }
1197
1198 if (windowWin->getIndexZ() == z) {
1199 windowWin->draw();
1200 }
1201
1202 if (textInWindows->getIndexZ() == z) {
1203 textInWindows->draw();
1204 }
1205
1206 if (bContinue->getIndexZ() == z) {
1207 bContinue->draw();
1208 }
1209
1210 if (bLeave->getIndexZ() == z) {
1211 bLeave->draw();
1212 }
1213
1214 }
1215
verifyClickElements_Win()1216 void SceneGame::verifyClickElements_Win() {
1217 if (bContinue->isOnMouseOver()) {
1218 bContinue->OnClick(this, bContinue);
1219 }
1220 if (bLeave->isOnMouseOver()) {
1221 bLeave->OnClick(this, bLeave);
1222 }
1223 }
1224
verifyOverElements_Win()1225 void SceneGame::verifyOverElements_Win() {
1226 bLeave->onOver();
1227 bContinue->onOver();
1228 }
1229
1230 /**********************
1231 DRAWSCENE LOST
1232 **********************/
1233
drawSceneLost()1234 void SceneGame::drawSceneLost () {
1235
1236 verifyOverElements_Lost();
1237 elmImgSave[0]->draw();
1238
1239 for (int i=0; i<MAX_INDEXZ; i++) {
1240 drawSceneLostByIndexZ(i);
1241 }
1242
1243 }
1244
drawSceneLostByIndexZ(int z)1245 void SceneGame::drawSceneLostByIndexZ(int z) {
1246 if (frameUp->getIndexZ() == z) {
1247 frameUp->draw();
1248 }
1249 if (frameDown->getIndexZ() == z) {
1250 frameDown->draw();
1251 }
1252
1253 if (windowLost->getIndexZ() == z) {
1254 windowLost->draw();
1255 }
1256
1257 if (textInWindows->getIndexZ() == z) {
1258 textInWindows->draw();
1259 }
1260
1261 if (bRetry->getIndexZ() == z) {
1262 bRetry->draw();
1263 }
1264
1265 if (bLeave->getIndexZ() == z) {
1266 bLeave->draw();
1267 }
1268
1269 }
1270
verifyClickElements_Lost()1271 void SceneGame::verifyClickElements_Lost() {
1272 if (bRetry->isOnMouseOver()) {
1273 bRetry->OnClick(this, bRetry);
1274 }
1275 if (bLeave->isOnMouseOver()) {
1276 bLeave->OnClick(this, bLeave);
1277 }
1278 }
1279
verifyOverElements_Lost()1280 void SceneGame::verifyOverElements_Lost() {
1281 bLeave->onOver();
1282 bRetry->onOver();
1283 }
1284
1285 /**********************
1286 DRAWSCENE OPTIONS
1287 **********************/
1288
drawSceneOptions()1289 void SceneGame::drawSceneOptions () {
1290
1291 verifyOverElements_Options();
1292
1293 elmImgSave[0]->draw();
1294
1295 for (int i=0; i<MAX_INDEXZ; i++) {
1296 drawSceneOptionsByIndexZ(i);
1297 }
1298
1299 }
1300
drawSceneOptionsByIndexZ(int z)1301 void SceneGame::drawSceneOptionsByIndexZ(int z) {
1302 if (frameUp->getIndexZ() == z) {
1303 frameUp->draw();
1304 }
1305 if (frameDown->getIndexZ() == z) {
1306 frameDown->draw();
1307 }
1308 if (bgOptions->getIndexZ() == z) {
1309 bgOptions->draw();
1310 }
1311 if (volumeMusics->getIndexZ() == z) {
1312 volumeMusics->draw();
1313 }
1314 if (volumeEffects->getIndexZ() == z) {
1315 volumeEffects->draw();
1316 }
1317 if (typeMusic->getIndexZ() == z) {
1318 typeMusic->draw();
1319 }
1320 if (titleVolumeMusics->getIndexZ() == z) {
1321 titleVolumeMusics->draw();
1322 }
1323 if (titleVolumeEffects->getIndexZ() == z) {
1324 titleVolumeEffects->draw();
1325 }
1326 if (titleTypeMusic->getIndexZ() == z) {
1327 titleTypeMusic->draw();
1328 }
1329 if (cbHelpActived->getIndexZ() == z) {
1330 cbHelpActived->draw();
1331 }
1332 if (bAccept->getIndexZ() == z) {
1333 bAccept->draw();
1334 }
1335 if (bCancel->getIndexZ() == z) {
1336 bCancel->draw();
1337 }
1338 }
1339
verifyClickElements_Options()1340 void SceneGame::verifyClickElements_Options() {
1341 if (cbHelpActived->isOnMouseOver()) {
1342 cbHelpActived->swapActive();
1343 }
1344 if (bAccept->isOnMouseOver()) {
1345 bAccept->OnClick(this, bAccept);
1346 }
1347 if (bCancel->isOnMouseOver()) {
1348 bCancel->OnClick(this, bCancel);
1349 }
1350 if (volumeMusics->isOnMouseOver()) {
1351 if (volumeMusics->getOverBottom()==LEFT) {
1352 volumeMusics->previousFrame();
1353 }
1354 if (volumeMusics->getOverBottom()==RIGHT) {
1355 volumeMusics->nextFrame();
1356 }
1357 }
1358 if (volumeEffects->isOnMouseOver()) {
1359 if (volumeEffects->getOverBottom()==LEFT) {
1360 volumeEffects->previousFrame();
1361 }
1362 if (volumeEffects->getOverBottom()==RIGHT) {
1363 volumeEffects->nextFrame();
1364 }
1365 }
1366 if (typeMusic->isOnMouseOver()) {
1367 if (typeMusic->getOverBottom()==LEFT) {
1368 typeMusic->previousFrame();
1369 }
1370 if (typeMusic->getOverBottom()==RIGHT) {
1371 typeMusic->nextFrame();
1372 }
1373 }
1374 }
1375
1376
verifyOverElements_Options()1377 void SceneGame::verifyOverElements_Options() {
1378 bAccept->onOver();
1379 bCancel->onOver();
1380 }
1381
1382 /**********************
1383 DRAWSCENE TRAY
1384 **********************/
1385
drawSceneTray()1386 void SceneGame::drawSceneTray () {
1387
1388 verifyOverElements_Tray();
1389
1390 elmImgSave[0]->draw();
1391
1392 for (int i=0; i<MAX_INDEXZ; i++) {
1393 drawSceneTrayByIndexZ(i);
1394 }
1395
1396 }
1397
drawSceneTrayByIndexZ(int z)1398 void SceneGame::drawSceneTrayByIndexZ(int z) {
1399 if (frameUp->getIndexZ() == z) {
1400 frameUp->draw();
1401 }
1402 if (frameDown->getIndexZ() == z) {
1403 frameDown->draw();
1404 }
1405 if (bgInfo->getIndexZ() == z) {
1406 bgInfo->draw();
1407 }
1408 if (drawFood->getIndexZ() == z) {
1409 drawFood->draw();
1410 }
1411 if (titleInfoTray->getIndexZ() == z) {
1412 titleInfoTray->draw();
1413 }
1414 if (textInfoTray->getIndexZ() == z) {
1415 textInfoTray->draw();
1416 }
1417 if (bAcceptInfo->getIndexZ() == z) {
1418 bAcceptInfo->draw();
1419 }
1420 }
1421
verifyClickElements_Tray()1422 void SceneGame::verifyClickElements_Tray() {
1423 if (bAcceptInfo->isOnMouseOver()) {
1424 bAcceptInfo->OnClick(this, bAcceptInfo);
1425 }
1426 }
1427
1428
verifyOverElements_Tray()1429 void SceneGame::verifyOverElements_Tray() {
1430 bAcceptInfo->onOver();
1431 }
1432
1433 /**********************
1434 DRAWSCENE HELP
1435 **********************/
1436
drawSceneHelp()1437 void SceneGame::drawSceneHelp () {
1438
1439 verifyOverElements_Help();
1440
1441 elmImgSave[0]->draw();
1442
1443 for (int i=0; i<MAX_INDEXZ; i++) {
1444 drawSceneHelpByIndexZ(i);
1445 }
1446
1447 }
1448
drawSceneHelpByIndexZ(int z)1449 void SceneGame::drawSceneHelpByIndexZ(int z) {
1450 if (frameUp->getIndexZ() == z) {
1451 frameUp->draw();
1452 }
1453 if (frameDown->getIndexZ() == z) {
1454 frameDown->draw();
1455 }
1456 if (bgInfo->getIndexZ() == z) {
1457 bgInfo->draw();
1458 }
1459 if (imageHelp->getIndexZ() == z) {
1460 imageHelp->draw();
1461 }
1462 if (titleHelp->getIndexZ() == z) {
1463 titleHelp->draw();
1464 }
1465 if (textHelp->getIndexZ() == z) {
1466 textHelp->draw();
1467 }
1468 if (bAcceptInfo->getIndexZ() == z) {
1469 bAcceptInfo->draw();
1470 }
1471 }
1472
verifyClickElements_Help()1473 void SceneGame::verifyClickElements_Help() {
1474 if (bAcceptInfo->isOnMouseOver()) {
1475 bAcceptInfo->OnClick(this, bAcceptInfo);
1476 }
1477 }
1478
1479
verifyOverElements_Help()1480 void SceneGame::verifyOverElements_Help() {
1481 bAcceptInfo->onOver();
1482 }
1483
1484 /**********************
1485 DRAWSCENE HELPFIRSTLEVEL
1486 **********************/
1487
drawSceneHelpFirstLevel()1488 void SceneGame::drawSceneHelpFirstLevel () {
1489
1490 verifyOverElements_Help();
1491
1492 elmImgSave[0]->draw();
1493
1494 for (int i=0; i<MAX_INDEXZ; i++) {
1495 drawSceneHelpFirstLevelByIndexZ(i);
1496 }
1497
1498 }
1499
drawSceneHelpFirstLevelByIndexZ(int z)1500 void SceneGame::drawSceneHelpFirstLevelByIndexZ(int z) {
1501 if (frameUp->getIndexZ() == z) {
1502 frameUp->draw();
1503 }
1504 if (frameDown->getIndexZ() == z) {
1505 frameDown->draw();
1506 }
1507 if (helpFirstLevel->getIndexZ() == z) {
1508 helpFirstLevel->draw();
1509 }
1510 if (bLeftFirstLevel->getIndexZ() == z) {
1511 bLeftFirstLevel->draw();
1512 }
1513 if (bRightFirstLevel->getIndexZ() == z) {
1514 bRightFirstLevel->draw();
1515 }
1516 if (bAcceptInfo->getIndexZ() == z) {
1517 bAcceptInfo->draw();
1518 }
1519 }
1520
verifyClickElements_HelpFirstLevel()1521 void SceneGame::verifyClickElements_HelpFirstLevel() {
1522 if (bAcceptInfo->isOnMouseOver()) {
1523 bAcceptInfo->OnClick(this, bAcceptInfo);
1524 }
1525 if (bLeftFirstLevel->isOnMouseOver()) {
1526 helpFirstLevel->setPreviousFrame();
1527 }
1528 if (bRightFirstLevel->isOnMouseOver()) {
1529 helpFirstLevel->setNextFrame();
1530 }
1531 }
1532
1533
verifyOverElements_HelpFirstLevel()1534 void SceneGame::verifyOverElements_HelpFirstLevel() {
1535 bAcceptInfo->onOver();
1536 }
1537
1538
drawScene()1539 bool SceneGame::drawScene() {
1540
1541 if ( statusScene == SCENE_GAME_ENDANIMATION ) {
1542 if (!s_animend->getIsLoad()) { s_animend->load(); }
1543 if (s_animend->drawScene()) {
1544 string scene=s_animend->getNameSceneWhenScape();
1545 setDrawCursor(true);
1546 delete s_animend;
1547 goToScene(scene, 1000, SCENE_TRANSITION_FADEOUT_SCALEx0);
1548 }
1549 return false;
1550 }
1551
1552 glClear(GL_COLOR_BUFFER_BIT); // | GL_DEPTH_BUFFER_BIT);
1553 glLoadIdentity();
1554
1555 glEnable(GL_BLEND);
1556 glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
1557
1558 drawCommonsScene ();
1559
1560 switch(statusScene) {
1561
1562 case SCENE_GAME_MAIN:
1563 drawSceneMain();
1564
1565 // Comprobando teclas para opciones
1566 { SDL_Event event;
1567 while ( SDL_PollEvent(&event) ) {
1568 if ( event.type == SDL_QUIT ) {
1569 goToScene("quit");
1570 }
1571 if (active) {
1572 if ( event.type == SDL_KEYDOWN ) {
1573 if ( event.key.keysym.sym == SDLK_ESCAPE ) {
1574 goToScene("menu");
1575 }
1576 if (hasHelpFirstLevel) {
1577 if ( event.key.keysym.sym == SDLK_h ) {
1578 setStatusScene(SCENE_GAME_HELPFIRSTLEVEL);
1579 }
1580 }
1581 if ( event.key.keysym.sym == SDLK_s ) {
1582 saveScreenShot();
1583 }
1584 if ( event.key.keysym.sym == SDLK_UP ) {
1585 Board::GetInstance()->movePlayer(TILE_UP);
1586 }
1587 if ( event.key.keysym.sym == SDLK_DOWN ) {
1588 Board::GetInstance()->movePlayer(TILE_DOWN);
1589 }
1590 if ( event.key.keysym.sym == SDLK_LEFT ) {
1591 Board::GetInstance()->movePlayer(TILE_LEFT);
1592 }
1593 if ( event.key.keysym.sym == SDLK_RIGHT ) {
1594 Board::GetInstance()->movePlayer(TILE_RIGHT);
1595 }
1596 if ( event.key.keysym.sym == SDLK_SPACE ) {
1597 Board::GetInstance()->movePlayer(TILE_CENTER);
1598 }
1599 if ( event.key.keysym.sym == SDLK_p ) {
1600 Uint8 *keystate = SDL_GetKeyState(NULL);
1601 if ( keystate[SDLK_RCTRL] && keystate[SDLK_LCTRL] ) {
1602 Chronometer::GetInstance()->setTime("winning");
1603 setStatusScene(SCENE_GAME_WINNING);
1604 }
1605 }
1606 }
1607
1608 if ( event.type == SDL_MOUSEBUTTONDOWN ) {
1609 if ( ( event.button.button == SDL_BUTTON_LEFT ) ) {
1610 verifyClickElements_Main();
1611 }
1612 }
1613 }
1614 }
1615 }
1616
1617 break;
1618
1619 case SCENE_GAME_CAPTURED:
1620 drawSceneMain();
1621
1622 if (Chronometer::GetInstance()->getTime("captured") > 2000) {
1623 setSaveImage(true);
1624 setStatusScene(SCENE_GAME_LOST);
1625 }
1626
1627 // Comprobando teclas para opciones
1628 { SDL_Event event;
1629 while ( SDL_PollEvent(&event) ) {
1630 if ( event.type == SDL_QUIT ) {
1631 setSaveImage(true);
1632 setStatusScene(SCENE_GAME_LOST);
1633 }
1634
1635 if ( event.type == SDL_KEYDOWN ) {
1636 if ( event.key.keysym.sym == SDLK_ESCAPE ) {
1637 setSaveImage(true);
1638 setStatusScene(SCENE_GAME_LOST);
1639 }
1640 }
1641
1642 }
1643 }
1644
1645 break;
1646
1647 case SCENE_GAME_WINNING:
1648 drawSceneMain();
1649
1650 if (Chronometer::GetInstance()->getTime("winning") > 3000) {
1651 Users::GetInstance()->getCurrentUser()->addLevelInCurrentMission();
1652 Users::GetInstance()->save();
1653 setSaveImage(true);
1654 setStatusScene(SCENE_GAME_WIN);
1655 }
1656
1657 // Comprobando teclas para opciones
1658 { SDL_Event event;
1659 while ( SDL_PollEvent(&event) ) {
1660 if ( event.type == SDL_QUIT ) {
1661 setSaveImage(true);
1662 statusScene = SCENE_GAME_WIN;
1663 }
1664
1665 if ( event.type == SDL_KEYDOWN ) {
1666 if ( event.key.keysym.sym == SDLK_ESCAPE ) {
1667 setSaveImage(true);
1668 setStatusScene(SCENE_GAME_WIN);
1669 }
1670 }
1671
1672 }
1673 }
1674
1675 break;
1676
1677 case SCENE_GAME_WIN:
1678 drawSceneWin();
1679 // Comprobando teclas para opciones
1680 { SDL_Event event;
1681 while ( SDL_PollEvent(&event) ) {
1682
1683 if ( event.type == SDL_KEYDOWN ) {
1684 if ( ( event.key.keysym.sym == SDLK_ESCAPE ) ||
1685 ( event.key.keysym.sym == SDLK_RETURN ) ) {
1686 goToNextLevel();
1687 }
1688 }
1689
1690 if ( event.type == SDL_MOUSEBUTTONDOWN ) {
1691 if ( ( event.button.button == SDL_BUTTON_LEFT ) ) {
1692 verifyClickElements_Win();
1693 }
1694 }
1695
1696 }
1697 }
1698
1699 break;
1700
1701 case SCENE_GAME_LOST:
1702 drawSceneLost();
1703 // Comprobando teclas para opciones
1704 { SDL_Event event;
1705 while ( SDL_PollEvent(&event) ) {
1706
1707 if ( event.type == SDL_KEYDOWN ) {
1708 if ( ( event.key.keysym.sym == SDLK_ESCAPE ) ||
1709 ( event.key.keysym.sym == SDLK_RETURN ) ) {
1710 clear();
1711 Board::GetInstance()->loadLevel();
1712 setStatusScene(SCENE_GAME_MAIN);
1713 }
1714 }
1715
1716 if ( event.type == SDL_MOUSEBUTTONDOWN ) {
1717 if ( ( event.button.button == SDL_BUTTON_LEFT ) ) {
1718 verifyClickElements_Lost();
1719 }
1720 }
1721
1722 }
1723 }
1724
1725 break;
1726
1727 case SCENE_GAME_FINISH:
1728 drawSceneFinish();
1729 // Comprobando teclas para opciones
1730 { SDL_Event event;
1731 while ( SDL_PollEvent(&event) ) {
1732
1733 if ( event.type == SDL_KEYDOWN ) {
1734 if ( ( event.key.keysym.sym == SDLK_ESCAPE ) ||
1735 ( event.key.keysym.sym == SDLK_RETURN ) ) {
1736 goToScene("menu", 1000, SCENE_TRANSITION_FADEOUT_SCALEx0);
1737 }
1738 }
1739
1740 if ( event.type == SDL_MOUSEBUTTONDOWN ) {
1741 if ( ( event.button.button == SDL_BUTTON_LEFT ) ) {
1742 verifyClickElements_Finish();
1743 }
1744 }
1745
1746 }
1747 }
1748
1749 break;
1750
1751
1752 case SCENE_GAME_OPTIONS:
1753 drawSceneOptions();
1754 // Comprobando teclas para opciones
1755 { SDL_Event event;
1756 while ( SDL_PollEvent(&event) ) {
1757
1758 if ( event.type == SDL_KEYDOWN ) {
1759 if ( event.key.keysym.sym == SDLK_ESCAPE ) {
1760 setStatusScene(SCENE_GAME_MAIN);
1761 }
1762 if ( event.key.keysym.sym == SDLK_s ) {
1763 saveScreenShot();
1764 }
1765 }
1766
1767 if ( event.type == SDL_MOUSEBUTTONDOWN ) {
1768 if ( ( event.button.button == SDL_BUTTON_LEFT ) ) {
1769 verifyClickElements_Options();
1770 }
1771 }
1772
1773
1774 }
1775 }
1776
1777 break;
1778
1779 case SCENE_GAME_STARTTRAY:
1780 drawSceneMain();
1781 if ( Chronometer::GetInstance()->verifyTime("starttray", 500) ) {
1782 Board::GetInstance()->tray->setFadeOut(800);
1783 }
1784
1785 if (Chronometer::GetInstance()->getTime("starttray") > 1500) {
1786 setSaveImage(true);
1787 Board::GetInstance()->hasTray = false;
1788 Board::GetInstance()->tray->setCurrentScale(Board::GetInstance()->getScaleByTypeSize());
1789 Board::GetInstance()->tray->removeTypeMovement();
1790 Board::GetInstance()->tray->removeRotation();
1791 Board::GetInstance()->tray->removeAlpha();
1792 Board::GetInstance()->tray->show();
1793 Board::GetInstance()->tray->setPosition(Board::GetInstance()->tray->getPosition());
1794 setStatusScene(SCENE_GAME_TRAY);
1795 }
1796
1797 // Comprobando teclas para opciones
1798 { SDL_Event event;
1799 while ( SDL_PollEvent(&event) ) {
1800 if ( event.type == SDL_QUIT ) {
1801 setSaveImage(true);
1802 Board::GetInstance()->hasTray = false;
1803 statusScene = SCENE_GAME_TRAY;
1804 }
1805
1806 if ( event.type == SDL_KEYDOWN ) {
1807 if ( event.key.keysym.sym == SDLK_ESCAPE ) {
1808 setSaveImage(true);
1809 Board::GetInstance()->hasTray = false;
1810 setStatusScene(SCENE_GAME_TRAY);
1811 }
1812 }
1813
1814 }
1815 }
1816
1817 break;
1818
1819 case SCENE_GAME_TRAY:
1820 drawSceneTray();
1821 // Comprobando teclas para opciones
1822 { SDL_Event event;
1823 while ( SDL_PollEvent(&event) ) {
1824
1825 if ( event.type == SDL_KEYDOWN ) {
1826 if ( ( event.key.keysym.sym == SDLK_ESCAPE ) ||
1827 ( event.key.keysym.sym == SDLK_RETURN ) ) {
1828 Sounds::GetInstance()->getSound("eating")->play(9, -1);
1829 setStatusScene(SCENE_GAME_MAIN);
1830 }
1831 if ( event.key.keysym.sym == SDLK_s ) {
1832 saveScreenShot();
1833 }
1834 }
1835
1836 if ( event.type == SDL_MOUSEBUTTONDOWN ) {
1837 if ( ( event.button.button == SDL_BUTTON_LEFT ) ) {
1838 verifyClickElements_Tray();
1839 }
1840 }
1841
1842
1843 }
1844 }
1845
1846 break;
1847
1848 case SCENE_GAME_HELP:
1849 drawSceneHelp();
1850 // Comprobando teclas para opciones
1851 { SDL_Event event;
1852 while ( SDL_PollEvent(&event) ) {
1853
1854 if ( event.type == SDL_KEYDOWN ) {
1855 if ( ( event.key.keysym.sym == SDLK_ESCAPE ) ||
1856 ( event.key.keysym.sym == SDLK_RETURN ) ) {
1857 setStatusScene(SCENE_GAME_MAIN);
1858 }
1859 if ( event.key.keysym.sym == SDLK_s ) {
1860 saveScreenShot();
1861 }
1862 }
1863
1864 if ( event.type == SDL_MOUSEBUTTONDOWN ) {
1865 if ( ( event.button.button == SDL_BUTTON_LEFT ) ) {
1866 verifyClickElements_Help();
1867 }
1868 }
1869
1870
1871 }
1872 }
1873
1874 break;
1875
1876 case SCENE_GAME_HELPFIRSTLEVEL:
1877 drawSceneHelpFirstLevel();
1878 // Comprobando teclas para opciones
1879 { SDL_Event event;
1880 while ( SDL_PollEvent(&event) ) {
1881
1882 if ( event.type == SDL_KEYDOWN ) {
1883 if ( ( event.key.keysym.sym == SDLK_ESCAPE ) ||
1884 ( event.key.keysym.sym == SDLK_RETURN ) ) {
1885 setStatusScene(SCENE_GAME_MAIN);
1886 }
1887 }
1888
1889 if ( event.type == SDL_MOUSEBUTTONDOWN ) {
1890 if ( ( event.button.button == SDL_BUTTON_LEFT ) ) {
1891 verifyClickElements_HelpFirstLevel();
1892 }
1893 }
1894
1895
1896 }
1897 }
1898
1899 break;
1900
1901 }
1902
1903 verifySaveImage();
1904 drawLastElements();
1905
1906 glDisable(GL_BLEND);
1907
1908 SDL_GL_SwapBuffers();
1909
1910 return getQuit();
1911
1912 }
unLoad()1913 void SceneGame::unLoad() {
1914
1915 unLoadCommons();
1916
1917 hasHelp = false;
1918
1919 statusScene = SCENE_GAME_MAIN;
1920
1921 Chronometer::GetInstance()->removeTime("intro_board");
1922
1923 Board::GetInstance()->unLoad();
1924
1925 delete bQuit;
1926
1927 delete bReset;
1928 delete bOption;
1929 delete bNext;
1930 delete bPrevious;
1931
1932 delete bAccept;
1933 delete bCancel;
1934 delete bgMenu;
1935
1936 delete bAcceptInfo;
1937 delete bgInfo;
1938
1939 delete bRetry;
1940 delete bLeave;
1941 delete bContinue;
1942 delete bBack;
1943
1944 delete bgOptions;
1945
1946 delete eyeRight;
1947 delete eyeLeft;
1948 delete imageEyeRight;
1949 delete imageEyeLeft;
1950 delete levelStatus;
1951 delete chronometer;
1952
1953 delete windowLost;
1954 delete windowWin;
1955 delete windowFinish;
1956 delete frameDown;
1957 delete frameUp;
1958
1959 delete titleInfoTray;
1960 delete textInfoTray;
1961 delete drawFood;
1962
1963 delete volumeMusics;
1964 delete volumeEffects;
1965 delete titleVolumeMusics;
1966 delete titleVolumeEffects;
1967 delete titleTypeMusic;
1968 delete cbHelpActived;
1969 delete typeMusic;
1970 delete textInWindows;
1971 delete textInWindowsFinal;
1972
1973 delete imageHelp;
1974 delete titleHelp;
1975 delete textHelp;
1976
1977 if (hasHelpFirstLevel) {
1978 delete helpFirstLevel;
1979 delete bRightFirstLevel;
1980 delete bLeftFirstLevel;
1981 }
1982
1983 Sounds::GetInstance()->unLoad();
1984
1985 isLoad = false;
1986
1987 }
1988