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