git repos / blockattack-game

blame: source/code/MenuSystem.cpp

normal view · raw

f3ef3495 sago007 2008-11-13 20:00 1
/*
c53e6443 sago007 2012-04-17 11:04 2
===========================================================================
c53e6443 sago007 2012-04-17 11:04 3
blockattack - Block Attack - Rise of the Blocks
c53e6443 sago007 2012-04-17 11:04 4
Copyright (C) 2005-2012 Poul Sander
c53e6443 sago007 2012-04-17 11:04 5
c53e6443 sago007 2012-04-17 11:04 6
This program is free software: you can redistribute it and/or modify
c53e6443 sago007 2012-04-17 11:04 7
it under the terms of the GNU General Public License as published by
c53e6443 sago007 2012-04-17 11:04 8
the Free Software Foundation, either version 2 of the License, or
c53e6443 sago007 2012-04-17 11:04 9
(at your option) any later version.
c53e6443 sago007 2012-04-17 11:04 10
c53e6443 sago007 2012-04-17 11:04 11
This program is distributed in the hope that it will be useful,
c53e6443 sago007 2012-04-17 11:04 12
but WITHOUT ANY WARRANTY; without even the implied warranty of
c53e6443 sago007 2012-04-17 11:04 13
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
c53e6443 sago007 2012-04-17 11:04 14
GNU General Public License for more details.
c53e6443 sago007 2012-04-17 11:04 15
c53e6443 sago007 2012-04-17 11:04 16
You should have received a copy of the GNU General Public License
c53e6443 sago007 2012-04-17 11:04 17
along with this program.  If not, see http://www.gnu.org/licenses/
c53e6443 sago007 2012-04-17 11:04 18
c53e6443 sago007 2012-04-17 11:04 19
Source information and contacts persons can be found at
a077dceb sago007 2016-03-19 19:19 20
http://www.blockattack.net
c53e6443 sago007 2012-04-17 11:04 21
===========================================================================
f3ef3495 sago007 2008-11-13 20:00 22
*/
f3ef3495 sago007 2008-11-13 20:00 23
b7590374 sago007 2011-05-19 16:15 24
f3ef3495 sago007 2008-11-13 20:00 25
#include "MenuSystem.h"
f3ef3495 sago007 2008-11-13 20:00 26
#include "common.h"
7d604e02 sago007 2015-11-29 18:39 27
#include "global.hpp"
a077dceb sago007 2016-03-19 19:19 28
#include "gamecontroller.h"
c0a3362c sago007 2016-10-07 20:23 29
#include "BlockGame.hpp"
f3ef3495 sago007 2008-11-13 20:00 30
0c201300 sago007 2016-02-20 12:12 31
static int mousex;
0c201300 sago007 2016-02-20 12:12 32
static int mousey;
f3ef3495 sago007 2008-11-13 20:00 33
96eb7a16 sago007 2016-04-29 17:01 34
using std::string;
96eb7a16 sago007 2016-04-29 17:01 35
using std::cerr;
96eb7a16 sago007 2016-04-29 17:01 36
using std::cout;
96eb7a16 sago007 2016-04-29 17:01 37
using std::vector;
33f4e975 sago007 2015-11-14 21:49 38
094b2dfe sago007 2016-06-12 10:50 39
const char* const menu_marked = "menu_marked";
094b2dfe sago007 2016-06-12 10:50 40
const char* const menu_unmarked = "menu_unmarked";
f3ef3495 sago007 2008-11-13 20:00 41
b283e0f7 sago007 2012-07-29 14:01 42
ButtonGfx standardButton;
f3ef3495 sago007 2008-11-13 20:00 43
094b2dfe sago007 2016-06-12 10:50 44
void ButtonGfx::setSurfaces() {
72383a9e sago007 2016-10-30 11:56 45
	this->xsize = globalData.spriteHolder->GetSprite(menu_marked).GetWidth();
72383a9e sago007 2016-10-30 11:56 46
	this->ysize = globalData.spriteHolder->GetSprite(menu_marked).GetHeight();
72383a9e sago007 2016-10-30 11:56 47
	if (globalData.verboseLevel) {
13476fc2 sago007 2016-09-28 18:34 48
		cout << "Surfaces set, size: " << this->xsize << " , " << this->ysize << "\n";
acd79baf sago007 2015-11-22 19:37 49
	}
f3ef3495 sago007 2008-11-13 20:00 50
}
f3ef3495 sago007 2008-11-13 20:00 51
ecef5838 sago007 2015-11-24 20:01 52
Button::Button() {
c53e6443 sago007 2012-04-17 11:04 53
	label = "";
c53e6443 sago007 2012-04-17 11:04 54
	marked = false;
acd79baf sago007 2015-11-22 19:37 55
	action = nullptr;
67a32395 sago007 2012-04-19 18:40 56
	popOnRun = false;
f3ef3495 sago007 2008-11-13 20:00 57
}
f3ef3495 sago007 2008-11-13 20:00 58
ecef5838 sago007 2015-11-24 20:01 59
Button::~Button() {
f3ef3495 sago007 2008-11-13 20:00 60
}
f3ef3495 sago007 2008-11-13 20:00 61
ecef5838 sago007 2015-11-24 20:01 62
Button::Button(const Button& b) {
c53e6443 sago007 2012-04-17 11:04 63
	label = b.label;
c53e6443 sago007 2012-04-17 11:04 64
	marked = b.marked;
c53e6443 sago007 2012-04-17 11:04 65
	action = b.action;
67a32395 sago007 2012-04-19 18:40 66
	popOnRun = false;
f3ef3495 sago007 2008-11-13 20:00 67
}
f3ef3495 sago007 2008-11-13 20:00 68
ecef5838 sago007 2015-11-24 20:01 69
void Button::setLabel(const string& text) {
c53e6443 sago007 2012-04-17 11:04 70
	label = text;
f3ef3495 sago007 2008-11-13 20:00 71
}
f3ef3495 sago007 2008-11-13 20:00 72
29edda2d sago007 2016-10-08 18:06 73
void Button::setAction(void (*action2run)(void)) {
c53e6443 sago007 2012-04-17 11:04 74
	action = action2run;
f3ef3495 sago007 2008-11-13 20:00 75
}
f3ef3495 sago007 2008-11-13 20:00 76
ecef5838 sago007 2015-11-24 20:01 77
void Button::doAction() {
6258a442 sago007 2015-11-14 22:11 78
	if (action) {
29edda2d sago007 2016-10-08 18:06 79
		action();
6258a442 sago007 2015-11-14 22:11 80
		return;
6258a442 sago007 2015-11-14 22:11 81
	}
6258a442 sago007 2015-11-14 22:11 82
	cerr << "Warning: button \"" << label << "\" has no action assigned!";
f3ef3495 sago007 2008-11-13 20:00 83
}
f3ef3495 sago007 2008-11-13 20:00 84
ecef5838 sago007 2015-11-24 20:01 85
void Button::setPopOnRun(bool popOnRun) {
67a32395 sago007 2012-04-19 18:40 86
	this->popOnRun = popOnRun;
67a32395 sago007 2012-04-19 18:40 87
}
67a32395 sago007 2012-04-19 18:40 88
ecef5838 sago007 2015-11-24 20:01 89
bool Button::isPopOnRun() const {
67a32395 sago007 2012-04-19 18:40 90
	return popOnRun;
67a32395 sago007 2012-04-19 18:40 91
}
67a32395 sago007 2012-04-19 18:40 92
a1e83d35 sago007 2016-10-08 17:29 93
static void drawToScreen(const Button &b) {
c0a3362c sago007 2016-10-07 20:23 94
	if (b.marked) {
72383a9e sago007 2016-10-30 11:56 95
		globalData.spriteHolder->GetSprite(menu_marked).Draw(globalData.screen, SDL_GetTicks(), b.x, b.y);
c0a3362c sago007 2016-10-07 20:23 96
	}
c0a3362c sago007 2016-10-07 20:23 97
	else {
72383a9e sago007 2016-10-30 11:56 98
		globalData.spriteHolder->GetSprite(menu_unmarked).Draw(globalData.screen, SDL_GetTicks(), b.x, b.y);
c0a3362c sago007 2016-10-07 20:23 99
	}
c0a3362c sago007 2016-10-07 20:23 100
	
72383a9e sago007 2016-10-30 11:56 101
	standardButton.thefont->draw(globalData.screen, b.x+standardButton.xsize/2,b.y+standardButton.ysize/2-standardButton.thefont->getHeight("%s",  b.label.c_str())/2, NFont::CENTER, "%s", b.label.c_str());
1b710a1e sago007 2016-09-28 19:01 102
}
1b710a1e sago007 2016-09-28 19:01 103
7b384c3f sago007 2016-10-08 17:34 104
7b384c3f sago007 2016-10-08 17:34 105
static bool isClicked(const Button &b, int x,int y) {
7b384c3f sago007 2016-10-08 17:34 106
	if ( x >= b.x && y >= b.y && x<= b.x+standardButton.xsize && y <= b.y + standardButton.ysize) {
7b384c3f sago007 2016-10-08 17:34 107
		return true;
7b384c3f sago007 2016-10-08 17:34 108
	}
7b384c3f sago007 2016-10-08 17:34 109
	return false;
7b384c3f sago007 2016-10-08 17:34 110
}
7b384c3f sago007 2016-10-08 17:34 111
ecef5838 sago007 2015-11-24 20:01 112
void Menu::drawSelf() {
f1708e5e sago007 2016-09-28 17:09 113
	DrawBackground(screen);
a1e83d35 sago007 2016-10-08 17:29 114
	for (const Button* b : buttons) {
a1e83d35 sago007 2016-10-08 17:29 115
		drawToScreen(*b);
6258a442 sago007 2015-11-14 22:11 116
	}
c0a3362c sago007 2016-10-07 20:23 117
	drawToScreen(exit);
3a23aa5e sago007 2015-12-23 18:06 118
	standardButton.thefont->draw(screen, 50, 50, "%s", title.c_str());
72383a9e sago007 2016-10-30 11:56 119
	globalData.mouse.Draw(screen, SDL_GetTicks(), mousex, mousey);
f3ef3495 sago007 2008-11-13 20:00 120
}
f3ef3495 sago007 2008-11-13 20:00 121
f3ef3495 sago007 2008-11-13 20:00 122
ecef5838 sago007 2015-11-24 20:01 123
void Menu::placeButtons() {
c53e6443 sago007 2012-04-17 11:04 124
	int nextY = 100;
1b710a1e sago007 2016-09-28 19:01 125
	int X = 50;
1b710a1e sago007 2016-09-28 19:01 126
	for (Button* it : buttons) {
72383a9e sago007 2016-10-30 11:56 127
		X = (globalData.xsize - standardButton.xsize)/2;
1b710a1e sago007 2016-09-28 19:01 128
		it->x = X;
1b710a1e sago007 2016-09-28 19:01 129
		it->y = nextY;
18c5059e sago007 2016-10-08 17:41 130
		nextY += standardButton.ysize+10;
c53e6443 sago007 2012-04-17 11:04 131
	}
c53e6443 sago007 2012-04-17 11:04 132
	exit.x = X;
c53e6443 sago007 2012-04-17 11:04 133
	exit.y = nextY;
f3ef3495 sago007 2008-11-13 20:00 134
}
f3ef3495 sago007 2008-11-13 20:00 135
ecef5838 sago007 2015-11-24 20:01 136
void Menu::addButton(Button* b) {
c53e6443 sago007 2012-04-17 11:04 137
	buttons.push_back(b);
c53e6443 sago007 2012-04-17 11:04 138
	b->marked = false;
c53e6443 sago007 2012-04-17 11:04 139
	placeButtons();
f3ef3495 sago007 2008-11-13 20:00 140
}
f3ef3495 sago007 2008-11-13 20:00 141
1d2e2129 sago007 2015-12-23 15:41 142
Menu::Menu(SDL_Renderer* screen) {
0c1de203 sago007 2015-12-05 22:15 143
	this->screen = screen;
c53e6443 sago007 2012-04-17 11:04 144
	buttons = vector<Button*>(10);
c53e6443 sago007 2012-04-17 11:04 145
	isSubmenu = true;
c53e6443 sago007 2012-04-17 11:04 146
	exit.setLabel( _("Back") );
f3ef3495 sago007 2008-11-13 20:00 147
}
f3ef3495 sago007 2008-11-13 20:00 148
1d2e2129 sago007 2015-12-23 15:41 149
Menu::Menu(SDL_Renderer* screen,bool submenu) {
0c1de203 sago007 2015-12-05 22:15 150
	this->screen = screen;
c53e6443 sago007 2012-04-17 11:04 151
	buttons = vector<Button*>(0);
c53e6443 sago007 2012-04-17 11:04 152
	isSubmenu = submenu;
ecef5838 sago007 2015-11-24 20:01 153
	if (isSubmenu) {
c53e6443 sago007 2012-04-17 11:04 154
		exit.setLabel( _("Back") );
acd79baf sago007 2015-11-22 19:37 155
	}
acd79baf sago007 2015-11-22 19:37 156
	else {
c53e6443 sago007 2012-04-17 11:04 157
		exit.setLabel( _("Exit") );
acd79baf sago007 2015-11-22 19:37 158
	}
f3ef3495 sago007 2008-11-13 20:00 159
}
f3ef3495 sago007 2008-11-13 20:00 160
1d2e2129 sago007 2015-12-23 15:41 161
Menu::Menu(SDL_Renderer* screen, const string& title, bool submenu) {
0c1de203 sago007 2015-12-05 22:15 162
	this->screen = screen;
c53e6443 sago007 2012-04-17 11:04 163
	buttons = vector<Button*>(0);
c53e6443 sago007 2012-04-17 11:04 164
	isSubmenu = submenu;
c53e6443 sago007 2012-04-17 11:04 165
	this->title = title;
ecef5838 sago007 2015-11-24 20:01 166
	if (isSubmenu) {
c53e6443 sago007 2012-04-17 11:04 167
		exit.setLabel(_("Back") );
acd79baf sago007 2015-11-22 19:37 168
	}
acd79baf sago007 2015-11-22 19:37 169
	else {
c53e6443 sago007 2012-04-17 11:04 170
		exit.setLabel(_("Exit") );
acd79baf sago007 2015-11-22 19:37 171
	}
cc3ef158 sago007 2011-07-03 16:13 172
}
cc3ef158 sago007 2011-07-03 16:13 173
826cf176 sago007 2016-03-12 10:53 174
bool isUpEvent(const SDL_Event& event) {
826cf176 sago007 2016-03-12 10:53 175
	if ( event.type == SDL_KEYDOWN ) {
826cf176 sago007 2016-03-12 10:53 176
		if (event.key.keysym.sym == SDLK_UP) {
826cf176 sago007 2016-03-12 10:53 177
			return true;
826cf176 sago007 2016-03-12 10:53 178
		}
826cf176 sago007 2016-03-12 10:53 179
	}
826cf176 sago007 2016-03-12 10:53 180
	if (event.type == SDL_CONTROLLERBUTTONDOWN) {
d21782d4 sago007 2016-03-13 11:17 181
		if (event.cbutton.button == SDL_CONTROLLER_BUTTON_DPAD_UP ) {
826cf176 sago007 2016-03-12 10:53 182
			return true;
826cf176 sago007 2016-03-12 10:53 183
		}
826cf176 sago007 2016-03-12 10:53 184
	}
a077dceb sago007 2016-03-19 19:19 185
	if (event.type == SDL_CONTROLLERAXISMOTION  && event.caxis.axis == SDL_CONTROLLER_AXIS_LEFTY ) {
a077dceb sago007 2016-03-19 19:19 186
		checkDeadZone(event);
a35ab74b sago007 2016-04-02 10:26 187
		const SDL_ControllerAxisEvent& a = event.caxis;
a077dceb sago007 2016-03-19 19:19 188
		if (getDeadZone(a.which, a.axis)) {
a077dceb sago007 2016-03-19 19:19 189
			if (event.caxis.value < -deadZoneLimit) {
a077dceb sago007 2016-03-19 19:19 190
				setDeadZone(a.which,a.axis,false);
a077dceb sago007 2016-03-19 19:19 191
				return true;
a077dceb sago007 2016-03-19 19:19 192
			}
a077dceb sago007 2016-03-19 19:19 193
		}
a077dceb sago007 2016-03-19 19:19 194
	}
826cf176 sago007 2016-03-12 10:53 195
	return false;
826cf176 sago007 2016-03-12 10:53 196
}
826cf176 sago007 2016-03-12 10:53 197
d5efd7d1 sago007 2016-03-12 11:32 198
bool isDownEvent(const SDL_Event& event) {
d5efd7d1 sago007 2016-03-12 11:32 199
	if ( event.type == SDL_KEYDOWN ) {
d5efd7d1 sago007 2016-03-12 11:32 200
		if (event.key.keysym.sym == SDLK_DOWN) {
d5efd7d1 sago007 2016-03-12 11:32 201
			return true;
d5efd7d1 sago007 2016-03-12 11:32 202
		}
d5efd7d1 sago007 2016-03-12 11:32 203
	}
d5efd7d1 sago007 2016-03-12 11:32 204
	if (event.type == SDL_CONTROLLERBUTTONDOWN) {
d21782d4 sago007 2016-03-13 11:17 205
		if (event.cbutton.button == SDL_CONTROLLER_BUTTON_DPAD_DOWN ) {
d21782d4 sago007 2016-03-13 11:17 206
			return true;
d21782d4 sago007 2016-03-13 11:17 207
		}
d21782d4 sago007 2016-03-13 11:17 208
	}
a077dceb sago007 2016-03-19 19:19 209
	if (event.type == SDL_CONTROLLERAXISMOTION  && event.caxis.axis == SDL_CONTROLLER_AXIS_LEFTY ) {
a077dceb sago007 2016-03-19 19:19 210
		checkDeadZone(event);
a35ab74b sago007 2016-04-02 10:26 211
		const SDL_ControllerAxisEvent& a = event.caxis;
a077dceb sago007 2016-03-19 19:19 212
		if (getDeadZone(a.which, a.axis)) {
a077dceb sago007 2016-03-19 19:19 213
			if (event.caxis.value > deadZoneLimit) {
a077dceb sago007 2016-03-19 19:19 214
				setDeadZone(a.which,a.axis,false);
a077dceb sago007 2016-03-19 19:19 215
				return true;
a077dceb sago007 2016-03-19 19:19 216
			}
a077dceb sago007 2016-03-19 19:19 217
		}
a077dceb sago007 2016-03-19 19:19 218
	}
d21782d4 sago007 2016-03-13 11:17 219
	return false;
d21782d4 sago007 2016-03-13 11:17 220
}
d21782d4 sago007 2016-03-13 11:17 221
d21782d4 sago007 2016-03-13 11:17 222
bool isLeftEvent(const SDL_Event& event) {
d21782d4 sago007 2016-03-13 11:17 223
	if ( event.type == SDL_KEYDOWN ) {
d21782d4 sago007 2016-03-13 11:17 224
		if (event.key.keysym.sym == SDLK_LEFT) {
d21782d4 sago007 2016-03-13 11:17 225
			return true;
d21782d4 sago007 2016-03-13 11:17 226
		}
d21782d4 sago007 2016-03-13 11:17 227
	}
d21782d4 sago007 2016-03-13 11:17 228
	if (event.type == SDL_CONTROLLERBUTTONDOWN) {
d21782d4 sago007 2016-03-13 11:17 229
		if (event.cbutton.button == SDL_CONTROLLER_BUTTON_DPAD_LEFT ) {
d21782d4 sago007 2016-03-13 11:17 230
			return true;
d21782d4 sago007 2016-03-13 11:17 231
		}
d21782d4 sago007 2016-03-13 11:17 232
	}
a077dceb sago007 2016-03-19 19:19 233
	if (event.type == SDL_CONTROLLERAXISMOTION  && event.caxis.axis == SDL_CONTROLLER_AXIS_LEFTX ) {
a077dceb sago007 2016-03-19 19:19 234
		checkDeadZone(event);
a35ab74b sago007 2016-04-02 10:26 235
		const SDL_ControllerAxisEvent& a = event.caxis;
a077dceb sago007 2016-03-19 19:19 236
		if (getDeadZone(a.which, a.axis)) {
a077dceb sago007 2016-03-19 19:19 237
			if (event.caxis.value < -deadZoneLimit) {
a077dceb sago007 2016-03-19 19:19 238
				setDeadZone(a.which,a.axis,false);
a077dceb sago007 2016-03-19 19:19 239
				return true;
a077dceb sago007 2016-03-19 19:19 240
			}
a077dceb sago007 2016-03-19 19:19 241
		}
a077dceb sago007 2016-03-19 19:19 242
	}
d21782d4 sago007 2016-03-13 11:17 243
	return false;
d21782d4 sago007 2016-03-13 11:17 244
}
d21782d4 sago007 2016-03-13 11:17 245
d21782d4 sago007 2016-03-13 11:17 246
bool isRightEvent(const SDL_Event& event) {
d21782d4 sago007 2016-03-13 11:17 247
	if ( event.type == SDL_KEYDOWN ) {
877b7c65 sago007 2016-04-09 09:32 248
		if (event.key.keysym.sym == SDLK_RIGHT) {
d21782d4 sago007 2016-03-13 11:17 249
			return true;
d21782d4 sago007 2016-03-13 11:17 250
		}
d21782d4 sago007 2016-03-13 11:17 251
	}
d21782d4 sago007 2016-03-13 11:17 252
	if (event.type == SDL_CONTROLLERBUTTONDOWN) {
d21782d4 sago007 2016-03-13 11:17 253
		if (event.cbutton.button == SDL_CONTROLLER_BUTTON_DPAD_RIGHT ) {
d5efd7d1 sago007 2016-03-12 11:32 254
			return true;
d5efd7d1 sago007 2016-03-12 11:32 255
		}
d5efd7d1 sago007 2016-03-12 11:32 256
	}
a077dceb sago007 2016-03-19 19:19 257
	if (event.type == SDL_CONTROLLERAXISMOTION  && event.caxis.axis == SDL_CONTROLLER_AXIS_LEFTX ) {
a077dceb sago007 2016-03-19 19:19 258
		checkDeadZone(event);
a35ab74b sago007 2016-04-02 10:26 259
		const SDL_ControllerAxisEvent& a = event.caxis;
a077dceb sago007 2016-03-19 19:19 260
		if (getDeadZone(a.which, a.axis)) {
a077dceb sago007 2016-03-19 19:19 261
			if (event.caxis.value > deadZoneLimit) {
a077dceb sago007 2016-03-19 19:19 262
				setDeadZone(a.which,a.axis,false);
a077dceb sago007 2016-03-19 19:19 263
				return true;
a077dceb sago007 2016-03-19 19:19 264
			}
a077dceb sago007 2016-03-19 19:19 265
		}
a077dceb sago007 2016-03-19 19:19 266
	}
d5efd7d1 sago007 2016-03-12 11:32 267
	return false;
d5efd7d1 sago007 2016-03-12 11:32 268
}
d5efd7d1 sago007 2016-03-12 11:32 269
d5efd7d1 sago007 2016-03-12 11:32 270
bool isEscapeEvent(const SDL_Event& event) {
d5efd7d1 sago007 2016-03-12 11:32 271
	if ( event.type == SDL_KEYDOWN ) {
d5efd7d1 sago007 2016-03-12 11:32 272
		if ( event.key.keysym.sym == SDLK_ESCAPE ) {
d5efd7d1 sago007 2016-03-12 11:32 273
			return true;
d5efd7d1 sago007 2016-03-12 11:32 274
		}
d5efd7d1 sago007 2016-03-12 11:32 275
	}
d5efd7d1 sago007 2016-03-12 11:32 276
	if (event.type == SDL_CONTROLLERBUTTONDOWN) {
d5efd7d1 sago007 2016-03-12 11:32 277
		if (event.cbutton.button == SDL_CONTROLLER_BUTTON_Y ) {
d5efd7d1 sago007 2016-03-12 11:32 278
			return true;
d5efd7d1 sago007 2016-03-12 11:32 279
		}
d5efd7d1 sago007 2016-03-12 11:32 280
	}
d5efd7d1 sago007 2016-03-12 11:32 281
	return false;
d5efd7d1 sago007 2016-03-12 11:32 282
}
d5efd7d1 sago007 2016-03-12 11:32 283
d5efd7d1 sago007 2016-03-12 11:32 284
bool isConfirmEvent(const SDL_Event& event) {
d5efd7d1 sago007 2016-03-12 11:32 285
	if ( event.type == SDL_KEYDOWN ) {
d5efd7d1 sago007 2016-03-12 11:32 286
		if (event.key.keysym.sym == SDLK_RETURN || event.key.keysym.sym == SDLK_KP_ENTER ) {
d5efd7d1 sago007 2016-03-12 11:32 287
			return true;
d5efd7d1 sago007 2016-03-12 11:32 288
		}
d5efd7d1 sago007 2016-03-12 11:32 289
	}
d5efd7d1 sago007 2016-03-12 11:32 290
	if (event.type == SDL_CONTROLLERBUTTONDOWN) {
d5efd7d1 sago007 2016-03-12 11:32 291
		if (event.cbutton.button == SDL_CONTROLLER_BUTTON_A || event.cbutton.button == SDL_CONTROLLER_BUTTON_B ) {
d5efd7d1 sago007 2016-03-12 11:32 292
			return true;
d5efd7d1 sago007 2016-03-12 11:32 293
		}
d5efd7d1 sago007 2016-03-12 11:32 294
	}
d5efd7d1 sago007 2016-03-12 11:32 295
	return false;
d5efd7d1 sago007 2016-03-12 11:32 296
}
d5efd7d1 sago007 2016-03-12 11:32 297
00e866da sago007 2016-10-31 20:47 298
00e866da sago007 2016-10-31 20:47 299
bool Menu::IsActive() {
00e866da sago007 2016-10-31 20:47 300
	return running;
00e866da sago007 2016-10-31 20:47 301
}
00e866da sago007 2016-10-31 20:47 302
void Menu::Draw(SDL_Renderer* target) {
00e866da sago007 2016-10-31 20:47 303
	placeButtons();
00e866da sago007 2016-10-31 20:47 304
	drawSelf();
00e866da sago007 2016-10-31 20:47 305
	SDL_RenderPresent(target);
00e866da sago007 2016-10-31 20:47 306
}
00e866da sago007 2016-10-31 20:47 307
void Menu::ProcessInput(const SDL_Event& event, bool &processed) {
50fd2c5f sago007 2016-11-12 16:05 308
	UpdateMouseCoordinates(event, mousex, mousey);
00e866da sago007 2016-10-31 20:47 309
	if ( event.type == SDL_QUIT ) {
00e866da sago007 2016-10-31 20:47 310
		Config::getInstance()->setShuttingDown(5);
00e866da sago007 2016-10-31 20:47 311
		running = false;
00e866da sago007 2016-10-31 20:47 312
		processed = true;
00e866da sago007 2016-10-31 20:47 313
	}
00e866da sago007 2016-10-31 20:47 314
00e866da sago007 2016-10-31 20:47 315
	if (isUpEvent(event)) {
00e866da sago007 2016-10-31 20:47 316
		marked--;
00e866da sago007 2016-10-31 20:47 317
		if (marked<0) {
00e866da sago007 2016-10-31 20:47 318
			marked = buttons.size();    //not -1, since exit is after the last element in the list
00e866da sago007 2016-10-31 20:47 319
		}
00e866da sago007 2016-10-31 20:47 320
	}
00e866da sago007 2016-10-31 20:47 321
00e866da sago007 2016-10-31 20:47 322
	if (isDownEvent(event)) {
00e866da sago007 2016-10-31 20:47 323
		marked++;
00e866da sago007 2016-10-31 20:47 324
		if (marked> (int)buttons.size()) {
00e866da sago007 2016-10-31 20:47 325
			marked = 0;
00e866da sago007 2016-10-31 20:47 326
		}
00e866da sago007 2016-10-31 20:47 327
	}
00e866da sago007 2016-10-31 20:47 328
00e866da sago007 2016-10-31 20:47 329
	if (isEscapeEvent(event) && isSubmenu) {
00e866da sago007 2016-10-31 20:47 330
		running = false;
00e866da sago007 2016-10-31 20:47 331
	}
00e866da sago007 2016-10-31 20:47 332
00e866da sago007 2016-10-31 20:47 333
	if (isConfirmEvent(event)) {
00e866da sago007 2016-10-31 20:47 334
		if (marked < (int)buttons.size()) {
00e866da sago007 2016-10-31 20:47 335
			buttons.at(marked)->doAction();
00e866da sago007 2016-10-31 20:47 336
			if (buttons.at(marked)->isPopOnRun()) {
00e866da sago007 2016-10-31 20:47 337
				running = false;
00e866da sago007 2016-10-31 20:47 338
			}
00e866da sago007 2016-10-31 20:47 339
		}
00e866da sago007 2016-10-31 20:47 340
		if (marked == (int)buttons.size()) {
00e866da sago007 2016-10-31 20:47 341
			running = false;
00e866da sago007 2016-10-31 20:47 342
		}
00e866da sago007 2016-10-31 20:47 343
	}
00e866da sago007 2016-10-31 20:47 344
}
00e866da sago007 2016-10-31 20:47 345
50fd2c5f sago007 2016-11-12 16:05 346
void Menu::Update() {
50fd2c5f sago007 2016-11-12 16:05 347
	for (int i=0; i<(int)buttons.size(); i++) {
50fd2c5f sago007 2016-11-12 16:05 348
		buttons.at(i)->marked = (i == marked);
50fd2c5f sago007 2016-11-12 16:05 349
	}
50fd2c5f sago007 2016-11-12 16:05 350
	exit.marked = (marked == (int)buttons.size());
50fd2c5f sago007 2016-11-12 16:05 351
	Uint8 buttonState = SDL_GetMouseState(nullptr,nullptr);
50fd2c5f sago007 2016-11-12 16:05 352
	// If the mouse button is released, make bMouseUp equal true
50fd2c5f sago007 2016-11-12 16:05 353
	if ( (buttonState&SDL_BUTTON(1))==0) {
50fd2c5f sago007 2016-11-12 16:05 354
		bMouseUp=true;
50fd2c5f sago007 2016-11-12 16:05 355
	}
c7f2082f sago007 2016-03-13 11:48 356
50fd2c5f sago007 2016-11-12 16:05 357
	if (abs(mousex-oldmousex)>5 || abs(mousey-oldmousey)>5) {
50fd2c5f sago007 2016-11-12 16:05 358
		for (int i=0; i< (int)buttons.size(); ++i) {
50fd2c5f sago007 2016-11-12 16:05 359
			if (isClicked(*buttons.at(i),mousex,mousey)) {
50fd2c5f sago007 2016-11-12 16:05 360
				marked = i;
d5efd7d1 sago007 2016-03-12 11:32 361
			}
50fd2c5f sago007 2016-11-12 16:05 362
		}
50fd2c5f sago007 2016-11-12 16:05 363
		if (isClicked(exit, mousex, mousey)) {
50fd2c5f sago007 2016-11-12 16:05 364
			marked = buttons.size();
50fd2c5f sago007 2016-11-12 16:05 365
		}
50fd2c5f sago007 2016-11-12 16:05 366
		oldmousex = mousex;
50fd2c5f sago007 2016-11-12 16:05 367
		oldmousey = mousey;
50fd2c5f sago007 2016-11-12 16:05 368
	}
c7f2082f sago007 2016-03-13 11:48 369
50fd2c5f sago007 2016-11-12 16:05 370
	//mouse clicked
50fd2c5f sago007 2016-11-12 16:05 371
	if ( (buttonState&SDL_BUTTON(1) )==SDL_BUTTON(1) && bMouseUp) {
50fd2c5f sago007 2016-11-12 16:05 372
		bMouseUp = false;
50fd2c5f sago007 2016-11-12 16:05 373
		for (int i=0; i< (int)buttons.size(); ++i) {
50fd2c5f sago007 2016-11-12 16:05 374
			if (isClicked(*buttons.at(i),mousex,mousey)) {
50fd2c5f sago007 2016-11-12 16:05 375
				buttons.at(i)->doAction();
50fd2c5f sago007 2016-11-12 16:05 376
				if (buttons.at(i)->isPopOnRun()) {
d5efd7d1 sago007 2016-03-12 11:32 377
					running = false;
d5efd7d1 sago007 2016-03-12 11:32 378
				}
50fd2c5f sago007 2016-11-12 16:05 379
				mousex = 0;
826cf176 sago007 2016-03-12 10:53 380
			}
c53e6443 sago007 2012-04-17 11:04 381
		}
50fd2c5f sago007 2016-11-12 16:05 382
		if (isClicked(exit, mousex, mousey)) {
50fd2c5f sago007 2016-11-12 16:05 383
			running = false;
c53e6443 sago007 2012-04-17 11:04 384
		}
50fd2c5f sago007 2016-11-12 16:05 385
	}
50fd2c5f sago007 2016-11-12 16:05 386
}
c53e6443 sago007 2012-04-17 11:04 387
50fd2c5f sago007 2016-11-12 16:05 388
void Menu::run() {
50fd2c5f sago007 2016-11-12 16:05 389
	running = true;
50fd2c5f sago007 2016-11-12 16:05 390
	while (running && !Config::getInstance()->isShuttingDown()) {
50fd2c5f sago007 2016-11-12 16:05 391
		if (!(globalData.highPriority)) {
50fd2c5f sago007 2016-11-12 16:05 392
			SDL_Delay(10);
c53e6443 sago007 2012-04-17 11:04 393
		}
50fd2c5f sago007 2016-11-12 16:05 394
		SDL_Event event;
50fd2c5f sago007 2016-11-12 16:05 395
		bool processed = false;
50fd2c5f sago007 2016-11-12 16:05 396
		while ( SDL_PollEvent(&event) ) {
50fd2c5f sago007 2016-11-12 16:05 397
			ProcessInput(event,processed);
c53e6443 sago007 2012-04-17 11:04 398
		}
50fd2c5f sago007 2016-11-12 16:05 399
		Update();
50fd2c5f sago007 2016-11-12 16:05 400
		Draw(screen);
c53e6443 sago007 2012-04-17 11:04 401
	}
f3ef3495 sago007 2008-11-13 20:00 402
}
1970-01-01 00:00 403