git repos / blockattack-game

blame: source/code/ScoresDisplay.cpp

normal view · raw

c3b697c6 sago007 2016-02-07 17:30 1
/*
c3b697c6 sago007 2016-02-07 17:30 2
 * To change this license header, choose License Headers in Project Properties.
c3b697c6 sago007 2016-02-07 17:30 3
 * To change this template file, choose Tools | Templates
c3b697c6 sago007 2016-02-07 17:30 4
 * and open the template in the editor.
c3b697c6 sago007 2016-02-07 17:30 5
 */
c3b697c6 sago007 2016-02-07 17:30 6
58a2d7e1 sago007 2016-02-12 18:53 7
/*
c3b697c6 sago007 2016-02-07 17:30 8
 * File:   ScoresDisplay.cpp
c3b697c6 sago007 2016-02-07 17:30 9
 * Author: poul
58a2d7e1 sago007 2016-02-12 18:53 10
 *
c3b697c6 sago007 2016-02-07 17:30 11
 * Created on 7. februar 2016, 17:34
c3b697c6 sago007 2016-02-07 17:30 12
 */
c3b697c6 sago007 2016-02-07 17:30 13
c3b697c6 sago007 2016-02-07 17:30 14
#include "ScoresDisplay.hpp"
c3b697c6 sago007 2016-02-07 17:30 15
#include "global.hpp"
c3b697c6 sago007 2016-02-07 17:30 16
#include "common.h"
c3b697c6 sago007 2016-02-07 17:30 17
#include "stats.h"
c3b697c6 sago007 2016-02-07 17:30 18
c3b697c6 sago007 2016-02-07 17:30 19
using namespace std;
c3b697c6 sago007 2016-02-07 17:30 20
c3b697c6 sago007 2016-02-07 17:30 21
static void NFont_Write(SDL_Renderer* target, int x, int y, const char* text) {
c3b697c6 sago007 2016-02-07 17:30 22
	nf_standard_blue_font.draw(target, x, y, "%s", text);
c3b697c6 sago007 2016-02-07 17:30 23
}
c3b697c6 sago007 2016-02-07 17:30 24
c3b697c6 sago007 2016-02-07 17:30 25
const int numberOfPages = 3;
c3b697c6 sago007 2016-02-07 17:30 26
c3b697c6 sago007 2016-02-07 17:30 27
//Draws the highscores
c3b697c6 sago007 2016-02-07 17:30 28
void ScoresDisplay::DrawHighscores(int x, int y, bool endless) {
c3b697c6 sago007 2016-02-07 17:30 29
	backgroundImage.Draw(screen, 0, 0, 0);
c3b697c6 sago007 2016-02-07 17:30 30
	if (endless) {
c3b697c6 sago007 2016-02-07 17:30 31
		nf_standard_blue_font.draw(screen, x+100,y+100, "%s",_("Endless:") );
c3b697c6 sago007 2016-02-07 17:30 32
	}
c3b697c6 sago007 2016-02-07 17:30 33
	else {
c3b697c6 sago007 2016-02-07 17:30 34
		nf_standard_blue_font.draw(screen, x+100,y+100, "%s",_("Time Trial:") );
c3b697c6 sago007 2016-02-07 17:30 35
	}
c3b697c6 sago007 2016-02-07 17:30 36
	for (int i =0; i<10; i++) {
c3b697c6 sago007 2016-02-07 17:30 37
		char playerScore[32];
c3b697c6 sago007 2016-02-07 17:30 38
		char playerName[32];
c3b697c6 sago007 2016-02-07 17:30 39
		if (endless) {
c3b697c6 sago007 2016-02-07 17:30 40
			snprintf(playerScore, sizeof(playerScore), "%i", theTopScoresEndless.getScoreNumber(i));
c3b697c6 sago007 2016-02-07 17:30 41
		}
c3b697c6 sago007 2016-02-07 17:30 42
		else {
c3b697c6 sago007 2016-02-07 17:30 43
			snprintf(playerScore, sizeof(playerScore), "%i", theTopScoresTimeTrial.getScoreNumber(i));
c3b697c6 sago007 2016-02-07 17:30 44
		}
c3b697c6 sago007 2016-02-07 17:30 45
		if (endless) {
c3b697c6 sago007 2016-02-07 17:30 46
			snprintf(playerName, sizeof(playerName), "%s", theTopScoresEndless.getScoreName(i));
c3b697c6 sago007 2016-02-07 17:30 47
		}
c3b697c6 sago007 2016-02-07 17:30 48
		else {
c3b697c6 sago007 2016-02-07 17:30 49
			snprintf(playerName, sizeof(playerName), "%s", theTopScoresTimeTrial.getScoreName(i));
c3b697c6 sago007 2016-02-07 17:30 50
		}
c3b697c6 sago007 2016-02-07 17:30 51
		nf_standard_blue_font.draw(screen, x+420,y+150+i*35, "%s",playerScore);
c3b697c6 sago007 2016-02-07 17:30 52
		nf_standard_blue_font.draw(screen, x+60,y+150+i*35, "%s",playerName);
c3b697c6 sago007 2016-02-07 17:30 53
	}
c3b697c6 sago007 2016-02-07 17:30 54
}
c3b697c6 sago007 2016-02-07 17:30 55
c3b697c6 sago007 2016-02-07 17:30 56
void ScoresDisplay::DrawStats() {
c3b697c6 sago007 2016-02-07 17:30 57
	backgroundImage.Draw(screen, 0, 0, 0);
c3b697c6 sago007 2016-02-07 17:30 58
	int y = 5;
c3b697c6 sago007 2016-02-07 17:30 59
	const int y_spacing = 30;
c3b697c6 sago007 2016-02-07 17:30 60
	NFont_Write(screen, 10,y,_("Stats") );
c3b697c6 sago007 2016-02-07 17:30 61
	y+=y_spacing*2;
c3b697c6 sago007 2016-02-07 17:30 62
	NFont_Write(screen, 10,y,_("Chains") );
c3b697c6 sago007 2016-02-07 17:30 63
	for (int i=2; i<13; i++) {
c3b697c6 sago007 2016-02-07 17:30 64
		y+=y_spacing;
c3b697c6 sago007 2016-02-07 17:30 65
		NFont_Write(screen, 10,y,(itoa(i)+"X").c_str());
c3b697c6 sago007 2016-02-07 17:30 66
		string numberAsString = itoa(Stats::getInstance()->getNumberOf("chainX"+itoa(i)));
c3b697c6 sago007 2016-02-07 17:30 67
		NFont_Write(screen, 300,y,numberAsString.c_str());
c3b697c6 sago007 2016-02-07 17:30 68
	}
c3b697c6 sago007 2016-02-07 17:30 69
	y+=y_spacing*2;
c3b697c6 sago007 2016-02-07 17:30 70
	NFont_Write(screen, 10,y,_("Lines Pushed: ") );
c3b697c6 sago007 2016-02-07 17:30 71
	string numberAsString = itoa(Stats::getInstance()->getNumberOf("linesPushed"));
c3b697c6 sago007 2016-02-07 17:30 72
	NFont_Write(screen, 300,y,numberAsString.c_str());
c3b697c6 sago007 2016-02-07 17:30 73
c3b697c6 sago007 2016-02-07 17:30 74
	y+=y_spacing;
c3b697c6 sago007 2016-02-07 17:30 75
	NFont_Write(screen, 10,y, _("Puzzles solved: ") );
c3b697c6 sago007 2016-02-07 17:30 76
	numberAsString = itoa(Stats::getInstance()->getNumberOf("puzzlesSolved"));
c3b697c6 sago007 2016-02-07 17:30 77
	NFont_Write(screen, 300,y,numberAsString.c_str());
c3b697c6 sago007 2016-02-07 17:30 78
c3b697c6 sago007 2016-02-07 17:30 79
	y+=y_spacing*2;
c3b697c6 sago007 2016-02-07 17:30 80
	NFont_Write(screen, 10,y, _("Run time: ") );
c3b697c6 sago007 2016-02-07 17:30 81
	commonTime ct = TimeHandler::peekTime("totalTime",TimeHandler::ms2ct(SDL_GetTicks()));
c3b697c6 sago007 2016-02-07 17:30 82
	y+=y_spacing;
c3b697c6 sago007 2016-02-07 17:30 83
	NFont_Write(screen, 10, y, SPrintCF( _("Days: %i"), ct.days) );
c3b697c6 sago007 2016-02-07 17:30 84
	y+=y_spacing;
c3b697c6 sago007 2016-02-07 17:30 85
	NFont_Write(screen, 10, y, SPrintCF( _("Hours: %i"), ct.hours) );
c3b697c6 sago007 2016-02-07 17:30 86
	y+=y_spacing;
c3b697c6 sago007 2016-02-07 17:30 87
	NFont_Write(screen, 10, y, SPrintCF( _("Minutes: %i"), ct.minutes) );
c3b697c6 sago007 2016-02-07 17:30 88
	y+=y_spacing;
c3b697c6 sago007 2016-02-07 17:30 89
	NFont_Write(screen, 10, y, SPrintCF( _("Seconds: %i"), ct.seconds) );
c3b697c6 sago007 2016-02-07 17:30 90
c3b697c6 sago007 2016-02-07 17:30 91
	y-=y_spacing*4; //Four rows back
c3b697c6 sago007 2016-02-07 17:30 92
	const int x_offset3 = xsize/3+10; //Ofset for three rows
c3b697c6 sago007 2016-02-07 17:30 93
	NFont_Write(screen, x_offset3,y, _("Play time: ") );
c3b697c6 sago007 2016-02-07 17:30 94
	ct = TimeHandler::getTime("playTime");
c3b697c6 sago007 2016-02-07 17:30 95
	y+=y_spacing;
c3b697c6 sago007 2016-02-07 17:30 96
	NFont_Write(screen, x_offset3, y, SPrintCF( _("Days: %i"), ct.days) );
c3b697c6 sago007 2016-02-07 17:30 97
	y+=y_spacing;
c3b697c6 sago007 2016-02-07 17:30 98
	NFont_Write(screen, x_offset3, y, SPrintCF( _("Hours: %i"), ct.hours) );
c3b697c6 sago007 2016-02-07 17:30 99
	y+=y_spacing;
c3b697c6 sago007 2016-02-07 17:30 100
	NFont_Write(screen, x_offset3, y, SPrintCF( _("Minutes: %i"), ct.minutes) );
c3b697c6 sago007 2016-02-07 17:30 101
	y+=y_spacing;
c3b697c6 sago007 2016-02-07 17:30 102
	NFont_Write(screen, x_offset3, y, SPrintCF( _("Seconds: %i"), ct.seconds) );
c3b697c6 sago007 2016-02-07 17:30 103
c3b697c6 sago007 2016-02-07 17:30 104
	const int x_offset = xsize/2+10;
c3b697c6 sago007 2016-02-07 17:30 105
	y = 5+y_spacing*2;
c3b697c6 sago007 2016-02-07 17:30 106
	NFont_Write(screen, x_offset,y, _("VS CPU (win/loss)") );
c3b697c6 sago007 2016-02-07 17:30 107
	for (int i=0; i<7; i++) {
c3b697c6 sago007 2016-02-07 17:30 108
		y += y_spacing;
c3b697c6 sago007 2016-02-07 17:30 109
		NFont_Write(screen, x_offset,y,string("AI "+itoa(i+1)).c_str());
c3b697c6 sago007 2016-02-07 17:30 110
		numberAsString = itoa(Stats::getInstance()->getNumberOf("defeatedAI"+itoa(i)));
c3b697c6 sago007 2016-02-07 17:30 111
		string numberAsString2 = itoa(Stats::getInstance()->getNumberOf("defeatedByAI"+itoa(i)));
c3b697c6 sago007 2016-02-07 17:30 112
		string toPrint = numberAsString + "/" + numberAsString2;
c3b697c6 sago007 2016-02-07 17:30 113
		NFont_Write(screen, x_offset+230,y,toPrint.c_str());
c3b697c6 sago007 2016-02-07 17:30 114
	}
c3b697c6 sago007 2016-02-07 17:30 115
}
c3b697c6 sago007 2016-02-07 17:30 116
c3b697c6 sago007 2016-02-07 17:30 117
ScoresDisplay::ScoresDisplay() {
c3b697c6 sago007 2016-02-07 17:30 118
}
c3b697c6 sago007 2016-02-07 17:30 119
c3b697c6 sago007 2016-02-07 17:30 120
ScoresDisplay::~ScoresDisplay() {
c3b697c6 sago007 2016-02-07 17:30 121
}
c3b697c6 sago007 2016-02-07 17:30 122
c3b697c6 sago007 2016-02-07 17:30 123
bool ScoresDisplay::IsActive() {
c3b697c6 sago007 2016-02-07 17:30 124
	return isActive;
c3b697c6 sago007 2016-02-07 17:30 125
}
c3b697c6 sago007 2016-02-07 17:30 126
c3b697c6 sago007 2016-02-07 17:30 127
void ScoresDisplay::Draw(SDL_Renderer* target) {
c3b697c6 sago007 2016-02-07 17:30 128
	switch (page) {
c3b697c6 sago007 2016-02-07 17:30 129
	case 0:
c3b697c6 sago007 2016-02-07 17:30 130
		//Highscores, endless
c3b697c6 sago007 2016-02-07 17:30 131
		DrawHighscores(100,100,true);
c3b697c6 sago007 2016-02-07 17:30 132
		break;
c3b697c6 sago007 2016-02-07 17:30 133
	case 1:
c3b697c6 sago007 2016-02-07 17:30 134
		//Highscores, Time Trial
c3b697c6 sago007 2016-02-07 17:30 135
		DrawHighscores(100,100,false);
c3b697c6 sago007 2016-02-07 17:30 136
		break;
c3b697c6 sago007 2016-02-07 17:30 137
	case 2:
c3b697c6 sago007 2016-02-07 17:30 138
	default:
c3b697c6 sago007 2016-02-07 17:30 139
		DrawStats();
c3b697c6 sago007 2016-02-07 17:30 140
	};
c3b697c6 sago007 2016-02-07 17:30 141
c3b697c6 sago007 2016-02-07 17:30 142
	//Draw buttons:
c3b697c6 sago007 2016-02-07 17:30 143
	bHighScore.Draw(screen, 0, scoreX,scoreY);
c3b697c6 sago007 2016-02-07 17:30 144
	bBack.Draw(screen, 0, backX, backY);
c3b697c6 sago007 2016-02-07 17:30 145
	nf_button_font.draw(screen, backX+60,backY+10, NFont::CENTER ,_("Back"));
c3b697c6 sago007 2016-02-07 17:30 146
	bNext.Draw(screen, 0, nextX, nextY);
c3b697c6 sago007 2016-02-07 17:30 147
	nf_button_font.draw(screen, nextX+60,nextY+10, NFont::CENTER,_("Next"));
c3b697c6 sago007 2016-02-07 17:30 148
c3b697c6 sago007 2016-02-07 17:30 149
	//Draw page number
c3b697c6 sago007 2016-02-07 17:30 150
	string pageXofY = (boost::format(_("Page %1% of %2%") )%(page+1)%numberOfPages).str();
c3b697c6 sago007 2016-02-07 17:30 151
	NFont_Write(screen, xsize/2-nf_standard_blue_font.getWidth( "%s", pageXofY.c_str())/2,ysize-60,pageXofY.c_str());
c3b697c6 sago007 2016-02-07 17:30 152
}
c3b697c6 sago007 2016-02-07 17:30 153
58a2d7e1 sago007 2016-02-12 18:53 154
void ScoresDisplay::ProcessInput(const SDL_Event& event, bool& processed) {
c3b697c6 sago007 2016-02-07 17:30 155
	if ( event.type == SDL_KEYDOWN ) {
c3b697c6 sago007 2016-02-07 17:30 156
		if ( (event.key.keysym.sym == SDLK_RIGHT)) {
c3b697c6 sago007 2016-02-07 17:30 157
			page++;
c3b697c6 sago007 2016-02-07 17:30 158
			if (page>=numberOfPages) {
c3b697c6 sago007 2016-02-07 17:30 159
				page = 0;
c3b697c6 sago007 2016-02-07 17:30 160
			}
c3b697c6 sago007 2016-02-07 17:30 161
		}
c3b697c6 sago007 2016-02-07 17:30 162
		else if ( (event.key.keysym.sym == SDLK_LEFT)) {
c3b697c6 sago007 2016-02-07 17:30 163
			page--;
c3b697c6 sago007 2016-02-07 17:30 164
			if (page<0) {
c3b697c6 sago007 2016-02-07 17:30 165
				page = numberOfPages-1;
c3b697c6 sago007 2016-02-07 17:30 166
			}
c3b697c6 sago007 2016-02-07 17:30 167
		}
c3b697c6 sago007 2016-02-07 17:30 168
c3b697c6 sago007 2016-02-07 17:30 169
		if ( (event.key.keysym.sym == SDLK_RETURN)||(event.key.keysym.sym == SDLK_KP_ENTER) ) {
c3b697c6 sago007 2016-02-07 17:30 170
			isActive = false;
c3b697c6 sago007 2016-02-07 17:30 171
		}
c3b697c6 sago007 2016-02-07 17:30 172
		else if ( (event.key.keysym.sym == SDLK_ESCAPE) ) {
c3b697c6 sago007 2016-02-07 17:30 173
			isActive = false;
c3b697c6 sago007 2016-02-07 17:30 174
		}
c3b697c6 sago007 2016-02-07 17:30 175
	}
c3b697c6 sago007 2016-02-07 17:30 176
}
c3b697c6 sago007 2016-02-07 17:30 177
c3b697c6 sago007 2016-02-07 17:30 178
void ScoresDisplay::Update() {
c3b697c6 sago007 2016-02-07 17:30 179
	int mousex, mousey;
c3b697c6 sago007 2016-02-07 17:30 180
	SDL_GetMouseState(&mousex,&mousey);
58a2d7e1 sago007 2016-02-12 18:53 181
c3b697c6 sago007 2016-02-07 17:30 182
	// If the mouse button is released, make bMouseUp equal true
c3b697c6 sago007 2016-02-07 17:30 183
	if (!SDL_GetMouseState(nullptr, nullptr)&SDL_BUTTON(1)) {
c3b697c6 sago007 2016-02-07 17:30 184
		bMouseUp=true;
c3b697c6 sago007 2016-02-07 17:30 185
	}
c3b697c6 sago007 2016-02-07 17:30 186
c3b697c6 sago007 2016-02-07 17:30 187
	if (SDL_GetMouseState(nullptr,nullptr)&SDL_BUTTON(1) && bMouseUp) {
c3b697c6 sago007 2016-02-07 17:30 188
		bMouseUp = false;
c3b697c6 sago007 2016-02-07 17:30 189
c3b697c6 sago007 2016-02-07 17:30 190
		//The Score button:
c3b697c6 sago007 2016-02-07 17:30 191
		if ((mousex>scoreX) && (mousex<scoreX+buttonXsize) && (mousey>scoreY) && (mousey<scoreY+buttonYsize)) {
c3b697c6 sago007 2016-02-07 17:30 192
			isActive = false;
c3b697c6 sago007 2016-02-07 17:30 193
		}
c3b697c6 sago007 2016-02-07 17:30 194
c3b697c6 sago007 2016-02-07 17:30 195
		//The back button:
c3b697c6 sago007 2016-02-07 17:30 196
		if ((mousex>backX) && (mousex<backX+buttonXsize) && (mousey>backY) && (mousey<backY+buttonYsize)) {
c3b697c6 sago007 2016-02-07 17:30 197
			page--;
c3b697c6 sago007 2016-02-07 17:30 198
			if (page<0) {
c3b697c6 sago007 2016-02-07 17:30 199
				page = numberOfPages-1;
c3b697c6 sago007 2016-02-07 17:30 200
			}
c3b697c6 sago007 2016-02-07 17:30 201
		}
c3b697c6 sago007 2016-02-07 17:30 202
c3b697c6 sago007 2016-02-07 17:30 203
		//The next button:
c3b697c6 sago007 2016-02-07 17:30 204
		if ((mousex>nextX) && (mousex<nextX+buttonXsize) && (mousey>nextY) && (mousey<nextY+buttonYsize)) {
c3b697c6 sago007 2016-02-07 17:30 205
			page++;
c3b697c6 sago007 2016-02-07 17:30 206
			if (page>=numberOfPages) {
c3b697c6 sago007 2016-02-07 17:30 207
				page = 0;
c3b697c6 sago007 2016-02-07 17:30 208
			}
c3b697c6 sago007 2016-02-07 17:30 209
		}
c3b697c6 sago007 2016-02-07 17:30 210
	}
c3b697c6 sago007 2016-02-07 17:30 211
}