git repos / blockattack-game

blame: source/code/ScoresDisplay.cpp

normal view · raw

c3b697c6 sago007 2016-02-07 17:30 1
/*
7a956470 sago007 2016-02-14 17:09 2
===========================================================================
7a956470 sago007 2016-02-14 17:09 3
blockattack - Block Attack - Rise of the Blocks
7a956470 sago007 2016-02-14 17:09 4
Copyright (C) 2005-2016 Poul Sander
c3b697c6 sago007 2016-02-07 17:30 5
7a956470 sago007 2016-02-14 17:09 6
This program is free software: you can redistribute it and/or modify
7a956470 sago007 2016-02-14 17:09 7
it under the terms of the GNU General Public License as published by
7a956470 sago007 2016-02-14 17:09 8
the Free Software Foundation, either version 2 of the License, or
7a956470 sago007 2016-02-14 17:09 9
(at your option) any later version.
7a956470 sago007 2016-02-14 17:09 10
7a956470 sago007 2016-02-14 17:09 11
This program is distributed in the hope that it will be useful,
7a956470 sago007 2016-02-14 17:09 12
but WITHOUT ANY WARRANTY; without even the implied warranty of
7a956470 sago007 2016-02-14 17:09 13
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
7a956470 sago007 2016-02-14 17:09 14
GNU General Public License for more details.
7a956470 sago007 2016-02-14 17:09 15
7a956470 sago007 2016-02-14 17:09 16
You should have received a copy of the GNU General Public License
7a956470 sago007 2016-02-14 17:09 17
along with this program.  If not, see http://www.gnu.org/licenses/
7a956470 sago007 2016-02-14 17:09 18
7a956470 sago007 2016-02-14 17:09 19
Source information and contacts persons can be found at
7a956470 sago007 2016-02-14 17:09 20
http://www.blockattack.net
7a956470 sago007 2016-02-14 17:09 21
===========================================================================
7a956470 sago007 2016-02-14 17:09 22
*/
c3b697c6 sago007 2016-02-07 17:30 23
c3b697c6 sago007 2016-02-07 17:30 24
#include "ScoresDisplay.hpp"
c3b697c6 sago007 2016-02-07 17:30 25
#include "global.hpp"
c3b697c6 sago007 2016-02-07 17:30 26
#include "common.h"
c3b697c6 sago007 2016-02-07 17:30 27
#include "stats.h"
d21782d4 sago007 2016-03-13 11:17 28
#include "MenuSystem.h"
c3b697c6 sago007 2016-02-07 17:30 29
aa7d74c5 Poul Sander 2019-05-08 17:14 30
const int buttonOffsetX = 140;
aa7d74c5 Poul Sander 2019-05-08 17:14 31
const int buttonOffsetY = 180;
aa7d74c5 Poul Sander 2019-05-08 17:14 32
extern sago::SagoSprite bExit;
aa7d74c5 Poul Sander 2019-05-08 17:14 33
d2ba3cf5 sago007 2018-05-13 15:00 34
static void setButtonFont(const sago::SagoDataHolder* holder, sago::SagoTextField& field, const char* text) {
34ab7861 sago007 2018-03-28 14:47 35
	field.SetHolder(holder);
34ab7861 sago007 2018-03-28 14:47 36
	field.SetFont("freeserif");
34ab7861 sago007 2018-03-28 14:47 37
	field.SetColor({255,255,255,255});
34ab7861 sago007 2018-03-28 14:47 38
	field.SetFontSize(24);
d8fe60bd sago007 2018-04-02 16:15 39
	field.SetOutline(1, {128,128,128,255});
34ab7861 sago007 2018-03-28 14:47 40
	field.SetText(text);
34ab7861 sago007 2018-03-28 14:47 41
}
e1b2e653 sago007 2017-11-28 18:10 42
69d8f1dc sago007 2018-03-31 16:19 43
sago::SagoTextField* ScoresDisplay::getCachedText(const std::string& text) {
69d8f1dc sago007 2018-03-31 16:19 44
	std::shared_ptr<sago::SagoTextField> ptr = fieldCache[text];
69d8f1dc sago007 2018-03-31 16:19 45
	if (!ptr) {
69d8f1dc sago007 2018-03-31 16:19 46
		std::shared_ptr<sago::SagoTextField> newText = std::make_shared<sago::SagoTextField>();
69d8f1dc sago007 2018-03-31 16:19 47
		sagoTextSetBlueFont(*newText.get());
0b8fb137 sago007 2018-03-31 19:53 48
		newText->SetText(text);
69d8f1dc sago007 2018-03-31 16:19 49
		fieldCache[text] = newText;
69d8f1dc sago007 2018-03-31 16:19 50
	}
69d8f1dc sago007 2018-03-31 16:19 51
	return fieldCache[text].get();
69d8f1dc sago007 2018-03-31 16:19 52
}
69d8f1dc sago007 2018-03-31 16:19 53
69d8f1dc sago007 2018-03-31 16:19 54
void ScoresDisplay::Write(SDL_Renderer* target, int x, int y, const char* text) {
69d8f1dc sago007 2018-03-31 16:19 55
	getCachedText(text)->Draw(target, x, y);
c3b697c6 sago007 2016-02-07 17:30 56
}
c3b697c6 sago007 2016-02-07 17:30 57
79d552fa sago007 2019-02-12 17:17 58
const int numberOfPages = 7;
c3b697c6 sago007 2016-02-07 17:30 59
13476fc2 sago007 2016-09-28 18:34 60
void ScoresDisplay::DrawBackgroundAndCalcPlacements() {
72383a9e sago007 2016-10-30 11:56 61
	DrawBackground(globalData.screen);
72383a9e sago007 2016-10-30 11:56 62
	nextX = globalData.xsize-buttonXsize-20;
72383a9e sago007 2016-10-30 11:56 63
	backY = globalData.ysize-buttonYsize-20;
13476fc2 sago007 2016-09-28 18:34 64
	nextY = backY;
13476fc2 sago007 2016-09-28 18:34 65
}
13476fc2 sago007 2016-09-28 18:34 66
c3b697c6 sago007 2016-02-07 17:30 67
//Draws the highscores
79d552fa sago007 2019-02-12 17:17 68
void ScoresDisplay::DrawHighscores(int x, int y, bool endless, int level = 0) {
13476fc2 sago007 2016-09-28 18:34 69
	DrawBackgroundAndCalcPlacements();
c3b697c6 sago007 2016-02-07 17:30 70
	if (endless) {
47515b6a Poul Sander 2019-02-13 18:16 71
		std::string header;
47515b6a Poul Sander 2019-02-13 18:16 72
		switch (level) {
47515b6a Poul Sander 2019-02-13 18:16 73
			case 1:
47515b6a Poul Sander 2019-02-13 18:16 74
				header = _("Endless (Fast):");
47515b6a Poul Sander 2019-02-13 18:16 75
				break;
47515b6a Poul Sander 2019-02-13 18:16 76
			case 2:
47515b6a Poul Sander 2019-02-13 18:16 77
				header = _("Endless (Faster):");
47515b6a Poul Sander 2019-02-13 18:16 78
				break;
47515b6a Poul Sander 2019-02-13 18:16 79
			case 3:
47515b6a Poul Sander 2019-02-13 18:16 80
				header = _("Endless (Even faster):");
47515b6a Poul Sander 2019-02-13 18:16 81
				break;
47515b6a Poul Sander 2019-02-13 18:16 82
			case 4:
47515b6a Poul Sander 2019-02-13 18:16 83
				header = _("Endless (Fastest):");
47515b6a Poul Sander 2019-02-13 18:16 84
				break;
47515b6a Poul Sander 2019-02-13 18:16 85
			default:
47515b6a Poul Sander 2019-02-13 18:16 86
				header = _("Endless:");
47515b6a Poul Sander 2019-02-13 18:16 87
		};
79d552fa sago007 2019-02-12 17:17 88
		Write(globalData.screen, x+100,y+100, header.c_str() );
c3b697c6 sago007 2016-02-07 17:30 89
	}
c3b697c6 sago007 2016-02-07 17:30 90
	else {
69d8f1dc sago007 2018-03-31 16:19 91
		Write(globalData.screen, x+100,y+100, _("Time Trial:") );
c3b697c6 sago007 2016-02-07 17:30 92
	}
c3b697c6 sago007 2016-02-07 17:30 93
	for (int i =0; i<10; i++) {
7a956470 sago007 2016-02-14 17:09 94
		record r;
c3b697c6 sago007 2016-02-07 17:30 95
		if (endless) {
79d552fa sago007 2019-02-12 17:17 96
			switch(level) {
79d552fa sago007 2019-02-12 17:17 97
				case 1:
79d552fa sago007 2019-02-12 17:17 98
					r = theTopScoresEndless1.getScoreNumber(i);
79d552fa sago007 2019-02-12 17:17 99
					break;
79d552fa sago007 2019-02-12 17:17 100
				case 2:
79d552fa sago007 2019-02-12 17:17 101
					r = theTopScoresEndless2.getScoreNumber(i);
79d552fa sago007 2019-02-12 17:17 102
					break;
79d552fa sago007 2019-02-12 17:17 103
				case 3:
79d552fa sago007 2019-02-12 17:17 104
					r = theTopScoresEndless3.getScoreNumber(i);
79d552fa sago007 2019-02-12 17:17 105
					break;
79d552fa sago007 2019-02-12 17:17 106
				case 4:
79d552fa sago007 2019-02-12 17:17 107
					r = theTopScoresEndless4.getScoreNumber(i);
79d552fa sago007 2019-02-12 17:17 108
					break;
79d552fa sago007 2019-02-12 17:17 109
				default:
79d552fa sago007 2019-02-12 17:17 110
					r = theTopScoresEndless0.getScoreNumber(i);
79d552fa sago007 2019-02-12 17:17 111
			}
c3b697c6 sago007 2016-02-07 17:30 112
		}
c3b697c6 sago007 2016-02-07 17:30 113
		else {
905de2a2 sago007 2019-02-08 18:46 114
			r = theTopScoresTimeTrial.getScoreNumber(i);
c3b697c6 sago007 2016-02-07 17:30 115
		}
7a956470 sago007 2016-02-14 17:09 116
		char playerScore[32];
7a956470 sago007 2016-02-14 17:09 117
		char playerName[32];
7a956470 sago007 2016-02-14 17:09 118
		snprintf(playerScore, sizeof(playerScore), "%i", r.score);
7a956470 sago007 2016-02-14 17:09 119
		snprintf(playerName, sizeof(playerName), "%s", r.name.c_str());
69d8f1dc sago007 2018-03-31 16:19 120
		Write(globalData.screen, x+420,y+150+i*35, playerScore);
69d8f1dc sago007 2018-03-31 16:19 121
		Write(globalData.screen, x+60,y+150+i*35, playerName);
c3b697c6 sago007 2016-02-07 17:30 122
	}
c3b697c6 sago007 2016-02-07 17:30 123
}
c3b697c6 sago007 2016-02-07 17:30 124
c3b697c6 sago007 2016-02-07 17:30 125
void ScoresDisplay::DrawStats() {
13476fc2 sago007 2016-09-28 18:34 126
	DrawBackgroundAndCalcPlacements();
c3b697c6 sago007 2016-02-07 17:30 127
	int y = 5;
c3b697c6 sago007 2016-02-07 17:30 128
	const int y_spacing = 30;
69d8f1dc sago007 2018-03-31 16:19 129
	Write(globalData.screen, 10,y,_("Stats") );
c3b697c6 sago007 2016-02-07 17:30 130
	y+=y_spacing*2;
69d8f1dc sago007 2018-03-31 16:19 131
	Write(globalData.screen, 10,y,_("Chains") );
c3b697c6 sago007 2016-02-07 17:30 132
	for (int i=2; i<13; i++) {
c3b697c6 sago007 2016-02-07 17:30 133
		y+=y_spacing;
69d8f1dc sago007 2018-03-31 16:19 134
		Write(globalData.screen, 10,y,(std::to_string(i)+"X").c_str());
e373cd75 Poul Sander 2018-11-07 19:21 135
		std::string numberAsString = std::to_string(Stats::getInstance()->getNumberOf("chainX"+std::to_string(i)));
69d8f1dc sago007 2018-03-31 16:19 136
		Write(globalData.screen, 300,y,numberAsString.c_str());
c3b697c6 sago007 2016-02-07 17:30 137
	}
c3b697c6 sago007 2016-02-07 17:30 138
	y+=y_spacing*2;
69d8f1dc sago007 2018-03-31 16:19 139
	Write(globalData.screen, 10,y,_("Lines Pushed: ") );
e373cd75 Poul Sander 2018-11-07 19:21 140
	std::string numberAsString = std::to_string(Stats::getInstance()->getNumberOf("linesPushed"));
69d8f1dc sago007 2018-03-31 16:19 141
	Write(globalData.screen, 300,y,numberAsString.c_str());
c3b697c6 sago007 2016-02-07 17:30 142
c3b697c6 sago007 2016-02-07 17:30 143
	y+=y_spacing;
69d8f1dc sago007 2018-03-31 16:19 144
	Write(globalData.screen, 10,y, _("Puzzles solved: ") );
549ecfae sago007 2016-10-09 08:37 145
	numberAsString = std::to_string(Stats::getInstance()->getNumberOf("puzzlesSolved"));
69d8f1dc sago007 2018-03-31 16:19 146
	Write(globalData.screen, 300,y,numberAsString.c_str());
c3b697c6 sago007 2016-02-07 17:30 147
c3b697c6 sago007 2016-02-07 17:30 148
	y+=y_spacing*2;
69d8f1dc sago007 2018-03-31 16:19 149
	Write(globalData.screen, 10,y, _("Run time: ") );
c3b697c6 sago007 2016-02-07 17:30 150
	commonTime ct = TimeHandler::peekTime("totalTime",TimeHandler::ms2ct(SDL_GetTicks()));
c3b697c6 sago007 2016-02-07 17:30 151
	y+=y_spacing;
69d8f1dc sago007 2018-03-31 16:19 152
	Write(globalData.screen, 10, y, SPrintCF( _("Days: %i"), ct.days) );
c3b697c6 sago007 2016-02-07 17:30 153
	y+=y_spacing;
69d8f1dc sago007 2018-03-31 16:19 154
	Write(globalData.screen, 10, y, SPrintCF( _("Hours: %i"), ct.hours) );
c3b697c6 sago007 2016-02-07 17:30 155
	y+=y_spacing;
69d8f1dc sago007 2018-03-31 16:19 156
	Write(globalData.screen, 10, y, SPrintCF( _("Minutes: %i"), ct.minutes) );
c3b697c6 sago007 2016-02-07 17:30 157
	y+=y_spacing;
69d8f1dc sago007 2018-03-31 16:19 158
	Write(globalData.screen, 10, y, SPrintCF( _("Seconds: %i"), ct.seconds) );
c3b697c6 sago007 2016-02-07 17:30 159
c3b697c6 sago007 2016-02-07 17:30 160
	y-=y_spacing*4; //Four rows back
72383a9e sago007 2016-10-30 11:56 161
	const int x_offset3 = globalData.xsize/3+10; //Ofset for three rows
69d8f1dc sago007 2018-03-31 16:19 162
	Write(globalData.screen, x_offset3,y, _("Play time: ") );
c3b697c6 sago007 2016-02-07 17:30 163
	ct = TimeHandler::getTime("playTime");
c3b697c6 sago007 2016-02-07 17:30 164
	y+=y_spacing;
69d8f1dc sago007 2018-03-31 16:19 165
	Write(globalData.screen, x_offset3, y, SPrintCF( _("Days: %i"), ct.days) );
c3b697c6 sago007 2016-02-07 17:30 166
	y+=y_spacing;
69d8f1dc sago007 2018-03-31 16:19 167
	Write(globalData.screen, x_offset3, y, SPrintCF( _("Hours: %i"), ct.hours) );
c3b697c6 sago007 2016-02-07 17:30 168
	y+=y_spacing;
69d8f1dc sago007 2018-03-31 16:19 169
	Write(globalData.screen, x_offset3, y, SPrintCF( _("Minutes: %i"), ct.minutes) );
c3b697c6 sago007 2016-02-07 17:30 170
	y+=y_spacing;
69d8f1dc sago007 2018-03-31 16:19 171
	Write(globalData.screen, x_offset3, y, SPrintCF( _("Seconds: %i"), ct.seconds) );
c3b697c6 sago007 2016-02-07 17:30 172
72383a9e sago007 2016-10-30 11:56 173
	const int x_offset = globalData.xsize/2+10;
c3b697c6 sago007 2016-02-07 17:30 174
	y = 5+y_spacing*2;
69d8f1dc sago007 2018-03-31 16:19 175
	Write(globalData.screen, x_offset,y, _("VS CPU (win/loss)") );
c3b697c6 sago007 2016-02-07 17:30 176
	for (int i=0; i<7; i++) {
c3b697c6 sago007 2016-02-07 17:30 177
		y += y_spacing;
e373cd75 Poul Sander 2018-11-07 19:21 178
		Write(globalData.screen, x_offset,y,std::string("AI "+std::to_string(i+1)).c_str());
549ecfae sago007 2016-10-09 08:37 179
		numberAsString = std::to_string(Stats::getInstance()->getNumberOf("defeatedAI"+std::to_string(i)));
e373cd75 Poul Sander 2018-11-07 19:21 180
		std::string numberAsString2 = std::to_string(Stats::getInstance()->getNumberOf("defeatedByAI"+std::to_string(i)));
e373cd75 Poul Sander 2018-11-07 19:21 181
		std::string toPrint = numberAsString + "/" + numberAsString2;
69d8f1dc sago007 2018-03-31 16:19 182
		Write(globalData.screen, x_offset+230,y,toPrint.c_str());
c3b697c6 sago007 2016-02-07 17:30 183
	}
c3b697c6 sago007 2016-02-07 17:30 184
}
c3b697c6 sago007 2016-02-07 17:30 185
c3b697c6 sago007 2016-02-07 17:30 186
ScoresDisplay::ScoresDisplay() {
c3b697c6 sago007 2016-02-07 17:30 187
}
c3b697c6 sago007 2016-02-07 17:30 188
c3b697c6 sago007 2016-02-07 17:30 189
ScoresDisplay::~ScoresDisplay() {
c3b697c6 sago007 2016-02-07 17:30 190
}
c3b697c6 sago007 2016-02-07 17:30 191
c3b697c6 sago007 2016-02-07 17:30 192
bool ScoresDisplay::IsActive() {
c3b697c6 sago007 2016-02-07 17:30 193
	return isActive;
c3b697c6 sago007 2016-02-07 17:30 194
}
c3b697c6 sago007 2016-02-07 17:30 195
647f12da sago007 2016-09-12 20:07 196
void ScoresDisplay::Draw(SDL_Renderer*) {
c3b697c6 sago007 2016-02-07 17:30 197
	switch (page) {
79d552fa sago007 2019-02-12 17:17 198
		case 0:
79d552fa sago007 2019-02-12 17:17 199
		case 1:
79d552fa sago007 2019-02-12 17:17 200
		case 2:
79d552fa sago007 2019-02-12 17:17 201
		case 3:
79d552fa sago007 2019-02-12 17:17 202
		case 4:
79d552fa sago007 2019-02-12 17:17 203
			//Highscores, endless
79d552fa sago007 2019-02-12 17:17 204
			DrawHighscores(100,100,true, page);
79d552fa sago007 2019-02-12 17:17 205
			break;
79d552fa sago007 2019-02-12 17:17 206
		case 5:
79d552fa sago007 2019-02-12 17:17 207
			//Highscores, Time Trial
79d552fa sago007 2019-02-12 17:17 208
			DrawHighscores(100,100,false);
79d552fa sago007 2019-02-12 17:17 209
			break;
79d552fa sago007 2019-02-12 17:17 210
		case 6:
79d552fa sago007 2019-02-12 17:17 211
		default:
79d552fa sago007 2019-02-12 17:17 212
			DrawStats();
c3b697c6 sago007 2016-02-07 17:30 213
	};
c3b697c6 sago007 2016-02-07 17:30 214
34ab7861 sago007 2018-03-28 14:47 215
	const sago::SagoDataHolder* holder = &globalData.spriteHolder->GetDataHolder();
c3b697c6 sago007 2016-02-07 17:30 216
	//Draw buttons:
aa7d74c5 Poul Sander 2019-05-08 17:14 217
	bExit.Draw(globalData.screen, SDL_GetTicks(), globalData.xsize-buttonOffsetX, globalData.ysize-buttonOffsetY);
72383a9e sago007 2016-10-30 11:56 218
	globalData.bBack.Draw(globalData.screen, 0, backX, backY);
34ab7861 sago007 2018-03-28 14:47 219
	static sago::SagoTextField backLabel;
34ab7861 sago007 2018-03-28 14:47 220
	setButtonFont(holder, backLabel, _("Back"));
34ab7861 sago007 2018-03-28 14:47 221
	backLabel.Draw(globalData.screen, backX+60,backY+10, sago::SagoTextField::Alignment::center);
72383a9e sago007 2016-10-30 11:56 222
	globalData.bNext.Draw(globalData.screen, 0, nextX, nextY);
34ab7861 sago007 2018-03-28 14:47 223
	static sago::SagoTextField nextLabel;
34ab7861 sago007 2018-03-28 14:47 224
	setButtonFont(holder, nextLabel, _("Next"));
34ab7861 sago007 2018-03-28 14:47 225
	nextLabel.Draw(globalData.screen, nextX+60, nextY+10, sago::SagoTextField::Alignment::center);
c3b697c6 sago007 2016-02-07 17:30 226
c3b697c6 sago007 2016-02-07 17:30 227
	//Draw page number
e373cd75 Poul Sander 2018-11-07 19:21 228
	std::string pageXofY = SPrintStringF(_("Page %i of %i"), page+1, numberOfPages);
c9a65d81 sago007 2018-03-31 16:22 229
	getCachedText(pageXofY)->Draw(globalData.screen,  globalData.xsize/2, globalData.ysize-60, sago::SagoTextField::Alignment::center);
c3b697c6 sago007 2016-02-07 17:30 230
}
c3b697c6 sago007 2016-02-07 17:30 231
58a2d7e1 sago007 2016-02-12 18:53 232
void ScoresDisplay::ProcessInput(const SDL_Event& event, bool& processed) {
c7f2082f sago007 2016-03-13 11:48 233
20d77c6e sago007 2016-11-12 16:28 234
	UpdateMouseCoordinates(event, globalData.mousex, globalData.mousey);
092bdebe sago007 2017-03-19 14:39 235
79d552fa sago007 2019-02-12 17:17 236
	if (isRightEvent(event)) {
d21782d4 sago007 2016-03-13 11:17 237
		page++;
d21782d4 sago007 2016-03-13 11:17 238
		if (page>=numberOfPages) {
d21782d4 sago007 2016-03-13 11:17 239
			page = 0;
c3b697c6 sago007 2016-02-07 17:30 240
		}
647f12da sago007 2016-09-12 20:07 241
		processed = true;
d21782d4 sago007 2016-03-13 11:17 242
	}
8e3fb7e1 sago007 2016-03-13 11:26 243
79d552fa sago007 2019-02-12 17:17 244
	if (isLeftEvent(event)) {
d21782d4 sago007 2016-03-13 11:17 245
		page--;
d21782d4 sago007 2016-03-13 11:17 246
		if (page<0) {
d21782d4 sago007 2016-03-13 11:17 247
			page = numberOfPages-1;
c3b697c6 sago007 2016-02-07 17:30 248
		}
647f12da sago007 2016-09-12 20:07 249
		processed = true;
c3b697c6 sago007 2016-02-07 17:30 250
	}
8e3fb7e1 sago007 2016-03-13 11:26 251
d21782d4 sago007 2016-03-13 11:17 252
	if (isConfirmEvent(event) || isEscapeEvent(event)) {
d21782d4 sago007 2016-03-13 11:17 253
		isActive = false;
647f12da sago007 2016-09-12 20:07 254
		processed = true;
d21782d4 sago007 2016-03-13 11:17 255
	}
c3b697c6 sago007 2016-02-07 17:30 256
}
c3b697c6 sago007 2016-02-07 17:30 257
c3b697c6 sago007 2016-02-07 17:30 258
void ScoresDisplay::Update() {
c3b697c6 sago007 2016-02-07 17:30 259
	// If the mouse button is released, make bMouseUp equal true
08c44684 sago007 2016-10-30 09:19 260
	if ( !(SDL_GetMouseState(nullptr, nullptr)&SDL_BUTTON(1)) ) {
c3b697c6 sago007 2016-02-07 17:30 261
		bMouseUp=true;
c3b697c6 sago007 2016-02-07 17:30 262
	}
c3b697c6 sago007 2016-02-07 17:30 263
c3b697c6 sago007 2016-02-07 17:30 264
	if (SDL_GetMouseState(nullptr,nullptr)&SDL_BUTTON(1) && bMouseUp) {
c3b697c6 sago007 2016-02-07 17:30 265
		bMouseUp = false;
c3b697c6 sago007 2016-02-07 17:30 266
aa7d74c5 Poul Sander 2019-05-08 17:14 267
		//The Exit button:
aa7d74c5 Poul Sander 2019-05-08 17:14 268
		if ((globalData.mousex>globalData.xsize-buttonOffsetX) && (globalData.mousex<globalData.xsize-buttonOffsetX+bExit.GetWidth())
aa7d74c5 Poul Sander 2019-05-08 17:14 269
		        && (globalData.mousey>globalData.ysize-buttonOffsetY) && (globalData.mousey<globalData.ysize-buttonOffsetY+bExit.GetHeight())) {
c3b697c6 sago007 2016-02-07 17:30 270
			isActive = false;
c3b697c6 sago007 2016-02-07 17:30 271
		}
c3b697c6 sago007 2016-02-07 17:30 272
c3b697c6 sago007 2016-02-07 17:30 273
		//The back button:
20d77c6e sago007 2016-11-12 16:28 274
		if ((globalData.mousex>backX) && (globalData.mousex<backX+buttonXsize) && (globalData.mousey>backY) && (globalData.mousey<backY+buttonYsize)) {
c3b697c6 sago007 2016-02-07 17:30 275
			page--;
c3b697c6 sago007 2016-02-07 17:30 276
			if (page<0) {
c3b697c6 sago007 2016-02-07 17:30 277
				page = numberOfPages-1;
c3b697c6 sago007 2016-02-07 17:30 278
			}
c3b697c6 sago007 2016-02-07 17:30 279
		}
c3b697c6 sago007 2016-02-07 17:30 280
c3b697c6 sago007 2016-02-07 17:30 281
		//The next button:
20d77c6e sago007 2016-11-12 16:28 282
		if ((globalData.mousex>nextX) && (globalData.mousex<nextX+buttonXsize) && (globalData.mousey>nextY) && (globalData.mousey<nextY+buttonYsize)) {
c3b697c6 sago007 2016-02-07 17:30 283
			page++;
c3b697c6 sago007 2016-02-07 17:30 284
			if (page>=numberOfPages) {
c3b697c6 sago007 2016-02-07 17:30 285
				page = 0;
c3b697c6 sago007 2016-02-07 17:30 286
			}
c3b697c6 sago007 2016-02-07 17:30 287
		}
c3b697c6 sago007 2016-02-07 17:30 288
	}
c3b697c6 sago007 2016-02-07 17:30 289
}