git repos / blockattack-game

blame: source/code/menudef.cpp

normal view · raw

593aeae4 sago007 2011-06-25 22:42 1
/*
af35c39d sago007 2013-11-16 16:37 2
===========================================================================
af35c39d sago007 2013-11-16 16:37 3
blockattack - Block Attack - Rise of the Blocks
af35c39d sago007 2013-11-16 16:37 4
Copyright (C) 2005-2013 Poul Sander
af35c39d sago007 2013-11-16 16:37 5
af35c39d sago007 2013-11-16 16:37 6
This program is free software: you can redistribute it and/or modify
af35c39d sago007 2013-11-16 16:37 7
it under the terms of the GNU General Public License as published by
af35c39d sago007 2013-11-16 16:37 8
the Free Software Foundation, either version 2 of the License, or
af35c39d sago007 2013-11-16 16:37 9
(at your option) any later version.
af35c39d sago007 2013-11-16 16:37 10
af35c39d sago007 2013-11-16 16:37 11
This program is distributed in the hope that it will be useful,
af35c39d sago007 2013-11-16 16:37 12
but WITHOUT ANY WARRANTY; without even the implied warranty of
af35c39d sago007 2013-11-16 16:37 13
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
af35c39d sago007 2013-11-16 16:37 14
GNU General Public License for more details.
af35c39d sago007 2013-11-16 16:37 15
af35c39d sago007 2013-11-16 16:37 16
You should have received a copy of the GNU General Public License
af35c39d sago007 2013-11-16 16:37 17
along with this program.  If not, see http://www.gnu.org/licenses/
af35c39d sago007 2013-11-16 16:37 18
af35c39d sago007 2013-11-16 16:37 19
Source information and contacts persons can be found at
021de090 sago007 2015-12-30 18:56 20
http://blockattack.net
af35c39d sago007 2013-11-16 16:37 21
===========================================================================
593aeae4 sago007 2011-06-25 22:42 22
*/
26ddb424 sago007 2011-06-09 20:06 23
#include "global.hpp"
26ddb424 sago007 2011-06-09 20:06 24
#include <iostream>
26ddb424 sago007 2011-06-09 20:06 25
#include <stdlib.h>
26ddb424 sago007 2011-06-09 20:06 26
#include "MenuSystem.h"
c9dd376f sago007 2012-01-20 17:13 27
#include "common.h"
d8fe60bd sago007 2018-04-02 16:15 28
#include "HelpHowtoState.hpp"
bfb4fed7 Poul Sander 2022-02-14 19:35 29
#include "HelpModInfoState.hpp"
54d2d583 sago007 2018-04-05 17:52 30
#include "HelpGamepadState.hpp"
5147de4e Poul Sander 2018-05-06 12:59 31
#include "HelpAboutState.hpp"
0471a1d3 sago007 2018-05-19 10:26 32
#include "ShowFileState.hpp"
16476649 Poul Sander 2022-01-09 10:29 33
#include <fmt/core.h>
5f4ad77b Poul Sander 2023-11-29 21:01 34
#include "menudef_themes.hpp"
26ddb424 sago007 2011-06-09 20:06 35
26ddb424 sago007 2011-06-09 20:06 36
3838c95c sago007 2016-01-23 10:47 37
#if 0
26ddb424 sago007 2011-06-09 20:06 38
//Menu
ecef5838 sago007 2015-11-24 20:01 39
static void PrintHi(Button* b) {
161a010c sago007 2016-05-06 14:00 40
	cout << "Hi" <<"\n";
26ddb424 sago007 2011-06-09 20:06 41
}
3838c95c sago007 2016-01-23 10:47 42
#endif
26ddb424 sago007 2011-06-09 20:06 43
593aeae4 sago007 2011-06-25 22:42 44
//Stores the controls
ecef5838 sago007 2015-11-24 20:01 45
struct control {
1d2e2129 sago007 2015-12-23 15:41 46
	SDL_Keycode up;
1d2e2129 sago007 2015-12-23 15:41 47
	SDL_Keycode down;
1d2e2129 sago007 2015-12-23 15:41 48
	SDL_Keycode left;
1d2e2129 sago007 2015-12-23 15:41 49
	SDL_Keycode right;
1d2e2129 sago007 2015-12-23 15:41 50
	SDL_Keycode change;
1d2e2129 sago007 2015-12-23 15:41 51
	SDL_Keycode push;
593aeae4 sago007 2011-06-25 22:42 52
};
593aeae4 sago007 2011-06-25 22:42 53
26ddb424 sago007 2011-06-09 20:06 54
void OpenScoresDisplay();
593aeae4 sago007 2011-06-25 22:42 55
extern control keySettings[3];
593aeae4 sago007 2011-06-25 22:42 56
593aeae4 sago007 2011-06-25 22:42 57
//Function to return the name of a key, to be displayed...
97546fef Poul Sander 2020-08-08 17:21 58
std::string getKeyName(SDL_Keycode key) {
97546fef Poul Sander 2020-08-08 17:21 59
	std::string keyname(SDL_GetKeyName(key));
d82fedb9 Poul Sander 2018-06-20 16:48 60
	if (key == SDLK_UP) {
d82fedb9 Poul Sander 2018-06-20 16:48 61
		keyname = _("Up arrow");
d82fedb9 Poul Sander 2018-06-20 16:48 62
	}
d82fedb9 Poul Sander 2018-06-20 16:48 63
	if (key == SDLK_DOWN) {
d82fedb9 Poul Sander 2018-06-20 16:48 64
		keyname = _("Down arrow");
d82fedb9 Poul Sander 2018-06-20 16:48 65
	}
d82fedb9 Poul Sander 2018-06-20 16:48 66
	if (key == SDLK_LEFT) {
d82fedb9 Poul Sander 2018-06-20 16:48 67
		keyname = _("Left arrow");
d82fedb9 Poul Sander 2018-06-20 16:48 68
	}
d82fedb9 Poul Sander 2018-06-20 16:48 69
	if (key == SDLK_RIGHT) {
d82fedb9 Poul Sander 2018-06-20 16:48 70
		keyname = _("Right arrow");
d82fedb9 Poul Sander 2018-06-20 16:48 71
	}
d82fedb9 Poul Sander 2018-06-20 16:48 72
	if (key == SDLK_RCTRL) {
d82fedb9 Poul Sander 2018-06-20 16:48 73
		keyname = _("Right Ctrl");
d82fedb9 Poul Sander 2018-06-20 16:48 74
	}
d82fedb9 Poul Sander 2018-06-20 16:48 75
	if (key == SDLK_LCTRL) {
d82fedb9 Poul Sander 2018-06-20 16:48 76
		keyname = _("Left Ctrl");
d82fedb9 Poul Sander 2018-06-20 16:48 77
	}
d82fedb9 Poul Sander 2018-06-20 16:48 78
	if (key == SDLK_RSHIFT) {
d82fedb9 Poul Sander 2018-06-20 16:48 79
		keyname = _("Right shift");
d82fedb9 Poul Sander 2018-06-20 16:48 80
	}
d82fedb9 Poul Sander 2018-06-20 16:48 81
	if (key == SDLK_LSHIFT) {
d82fedb9 Poul Sander 2018-06-20 16:48 82
		keyname = _("Left shift");
d82fedb9 Poul Sander 2018-06-20 16:48 83
	}
d82fedb9 Poul Sander 2018-06-20 16:48 84
	if (key == SDLK_RALT) {
d82fedb9 Poul Sander 2018-06-20 16:48 85
		keyname = _("Right alt");
d82fedb9 Poul Sander 2018-06-20 16:48 86
	}
d82fedb9 Poul Sander 2018-06-20 16:48 87
	if (key == SDLK_LALT) {
d82fedb9 Poul Sander 2018-06-20 16:48 88
		keyname = _("Left alt");
d82fedb9 Poul Sander 2018-06-20 16:48 89
	}
d82fedb9 Poul Sander 2018-06-20 16:48 90
	if (key == SDLK_RETURN) {
d82fedb9 Poul Sander 2018-06-20 16:48 91
		keyname = _("Return");
d82fedb9 Poul Sander 2018-06-20 16:48 92
	}
d82fedb9 Poul Sander 2018-06-20 16:48 93
	if (key == SDLK_SPACE) {
d82fedb9 Poul Sander 2018-06-20 16:48 94
		keyname = _("Space");
d82fedb9 Poul Sander 2018-06-20 16:48 95
	}
72383a9e sago007 2016-10-30 11:56 96
	if (globalData.verboseLevel) {
b1f06489 Poul Sander 2020-08-08 17:19 97
		std::cout << key << " translated to " << keyname << "\n";
acd79baf sago007 2015-11-22 19:37 98
	}
c53e6443 sago007 2012-04-17 11:04 99
	return keyname;
593aeae4 sago007 2011-06-25 22:42 100
}
593aeae4 sago007 2011-06-25 22:42 101
ecef5838 sago007 2015-11-24 20:01 102
class Button_changekey : public Button {
593aeae4 sago007 2011-06-25 22:42 103
private:
1d2e2129 sago007 2015-12-23 15:41 104
	SDL_Keycode* m_key2change;
97546fef Poul Sander 2020-08-08 17:21 105
	std::string m_keyname;
593aeae4 sago007 2011-06-25 22:42 106
public:
7192940a Poul Sander 2020-08-08 17:18 107
	Button_changekey(SDL_Keycode* key, const char* keyname);
5f8ce673 Poul Sander 2021-06-05 22:18 108
	virtual void doAction() override;
593aeae4 sago007 2011-06-25 22:42 109
};
593aeae4 sago007 2011-06-25 22:42 110
6710d462 sago007 2012-05-12 17:23 111
7192940a Poul Sander 2020-08-08 17:18 112
Button_changekey::Button_changekey(SDL_Keycode* key, const char* keyname)
3674f7f0 sago007 2020-07-12 12:16 113
	: m_key2change{key}, m_keyname{keyname} {
c53e6443 sago007 2012-04-17 11:04 114
	setLabel(m_keyname+" : "+getKeyName(*m_key2change));
593aeae4 sago007 2011-06-25 22:42 115
}
593aeae4 sago007 2011-06-25 22:42 116
ecef5838 sago007 2015-11-24 20:01 117
void Button_changekey::doAction() {
c53e6443 sago007 2012-04-17 11:04 118
	SDL_Event event;
c53e6443 sago007 2012-04-17 11:04 119
c53e6443 sago007 2012-04-17 11:04 120
	bool finnish = false;
ecef5838 sago007 2015-11-24 20:01 121
	while (!finnish) {
c53e6443 sago007 2012-04-17 11:04 122
		SDL_Delay(10);
ecef5838 sago007 2015-11-24 20:01 123
		while ( SDL_PollEvent(&event) ) {
ecef5838 sago007 2015-11-24 20:01 124
			if (event.type == SDL_KEYDOWN) {
acd79baf sago007 2015-11-22 19:37 125
				if (event.key.keysym.sym != SDLK_ESCAPE) {
c53e6443 sago007 2012-04-17 11:04 126
					*m_key2change = event.key.keysym.sym;
acd79baf sago007 2015-11-22 19:37 127
				}
c53e6443 sago007 2012-04-17 11:04 128
				finnish = true;
c53e6443 sago007 2012-04-17 11:04 129
			}
c53e6443 sago007 2012-04-17 11:04 130
		}
c53e6443 sago007 2012-04-17 11:04 131
	}
c53e6443 sago007 2012-04-17 11:04 132
	setLabel(m_keyname+" : "+getKeyName(*m_key2change));
593aeae4 sago007 2011-06-25 22:42 133
}
26ddb424 sago007 2011-06-09 20:06 134
c99935b0 Poul Sander 2021-08-28 13:13 135
class Button_confirmVolume : public Button {
55e33610 Poul Sander 2022-01-09 11:45 136
private:
c99935b0 Poul Sander 2021-08-28 13:13 137
	std::string cvar="";
c99935b0 Poul Sander 2021-08-28 13:13 138
	mutable std::string volumeLabel; /*used for cache*/
55e33610 Poul Sander 2022-01-09 11:45 139
public:
493079d1 Poul Sander 2021-10-20 21:03 140
	explicit Button_confirmVolume(const char* cvar);
c99935b0 Poul Sander 2021-08-28 13:13 141
	virtual void doAction() override { /*Do nothing. Equal to choose "back". */ };
c99935b0 Poul Sander 2021-08-28 13:13 142
	virtual const std::string& getLabel() const override;
c99935b0 Poul Sander 2021-08-28 13:13 143
};
c99935b0 Poul Sander 2021-08-28 13:13 144
c99935b0 Poul Sander 2021-08-28 13:13 145
Button_confirmVolume::Button_confirmVolume(const char* cvar) : cvar{cvar} {
c99935b0 Poul Sander 2021-08-28 13:13 146
	this->setPopOnRun(true);
c99935b0 Poul Sander 2021-08-28 13:13 147
}
c99935b0 Poul Sander 2021-08-28 13:13 148
c99935b0 Poul Sander 2021-08-28 13:13 149
const std::string& Button_confirmVolume::getLabel() const {
c99935b0 Poul Sander 2021-08-28 13:13 150
	int volumePct = Config::getInstance()->getInt(cvar)*100.0/MIX_MAX_VOLUME;
16476649 Poul Sander 2022-01-09 10:29 151
	this->volumeLabel = fmt::format(_("Volume: {}%"), volumePct); //  std::string(_("Volume: "))+ std::to_string(volumePct)+"%" ;
c99935b0 Poul Sander 2021-08-28 13:13 152
	return volumeLabel;
c99935b0 Poul Sander 2021-08-28 13:13 153
}
5f8ce673 Poul Sander 2021-06-05 22:18 154
c99935b0 Poul Sander 2021-08-28 13:13 155
class Button_increaseVolume : public Button {
55e33610 Poul Sander 2022-01-09 11:45 156
private:
c99935b0 Poul Sander 2021-08-28 13:13 157
	std::string cvar="";
c99935b0 Poul Sander 2021-08-28 13:13 158
	int incrementValue = 1;
c99935b0 Poul Sander 2021-08-28 13:13 159
	int lowerLimit = 0;
c99935b0 Poul Sander 2021-08-28 13:13 160
	int upperLimit = MIX_MAX_VOLUME;
55e33610 Poul Sander 2022-01-09 11:45 161
public:
c99935b0 Poul Sander 2021-08-28 13:13 162
	Button_increaseVolume(const char* cvar, int incrementValue);
5f8ce673 Poul Sander 2021-06-05 22:18 163
	virtual void doAction() override;
5f8ce673 Poul Sander 2021-06-05 22:18 164
};
5f8ce673 Poul Sander 2021-06-05 22:18 165
c99935b0 Poul Sander 2021-08-28 13:13 166
Button_increaseVolume::Button_increaseVolume(const char* cvar, int incrementValue)
c99935b0 Poul Sander 2021-08-28 13:13 167
	: cvar{cvar},incrementValue{incrementValue} {
55e33610 Poul Sander 2022-01-09 11:45 168
	char prefix = '+';
55e33610 Poul Sander 2022-01-09 11:45 169
	double value = incrementValue;
55e33610 Poul Sander 2022-01-09 11:45 170
	if (incrementValue<0) {
55e33610 Poul Sander 2022-01-09 11:45 171
		prefix = '-';
55e33610 Poul Sander 2022-01-09 11:45 172
		value = -incrementValue;
55e33610 Poul Sander 2022-01-09 11:45 173
	}
55e33610 Poul Sander 2022-01-09 11:45 174
	value = value*100.0/MIX_MAX_VOLUME;
55e33610 Poul Sander 2022-01-09 11:45 175
	setLabel(fmt::format("{}{:.2f}", prefix, value));
c99935b0 Poul Sander 2021-08-28 13:13 176
}
c99935b0 Poul Sander 2021-08-28 13:13 177
c99935b0 Poul Sander 2021-08-28 13:13 178
void Button_increaseVolume::doAction() {
c99935b0 Poul Sander 2021-08-28 13:13 179
	int newValue = Config::getInstance()->getInt(cvar)+incrementValue;
c99935b0 Poul Sander 2021-08-28 13:13 180
	if (newValue<lowerLimit) {
c99935b0 Poul Sander 2021-08-28 13:13 181
		newValue = lowerLimit;
5f8ce673 Poul Sander 2021-06-05 22:18 182
	}
c99935b0 Poul Sander 2021-08-28 13:13 183
	if (newValue>upperLimit) {
c99935b0 Poul Sander 2021-08-28 13:13 184
		newValue = upperLimit;
5f8ce673 Poul Sander 2021-06-05 22:18 185
	}
c99935b0 Poul Sander 2021-08-28 13:13 186
	Config::getInstance()->setInt(cvar, newValue);
5f8ce673 Poul Sander 2021-06-05 22:18 187
}
5f8ce673 Poul Sander 2021-06-05 22:18 188
c99935b0 Poul Sander 2021-08-28 13:13 189
class Button_testSound : public Button {
55e33610 Poul Sander 2022-01-09 11:45 190
public:
c99935b0 Poul Sander 2021-08-28 13:13 191
	Button_testSound();
c99935b0 Poul Sander 2021-08-28 13:13 192
	virtual void doAction() override;
c99935b0 Poul Sander 2021-08-28 13:13 193
};
c99935b0 Poul Sander 2021-08-28 13:13 194
c99935b0 Poul Sander 2021-08-28 13:13 195
Button_testSound::Button_testSound() {
c99935b0 Poul Sander 2021-08-28 13:13 196
	setLabel(_("Test sound"));
c99935b0 Poul Sander 2021-08-28 13:13 197
}
c99935b0 Poul Sander 2021-08-28 13:13 198
c99935b0 Poul Sander 2021-08-28 13:13 199
void Button_testSound::doAction() {
c99935b0 Poul Sander 2021-08-28 13:13 200
	sago::SoundHandler testSound = globalData.spriteHolder->GetDataHolder().getSoundHandler("pop");
c99935b0 Poul Sander 2021-08-28 13:13 201
	Mix_VolumeChunk(testSound.get(), Config::getInstance()->getInt("volume_sound"));
c99935b0 Poul Sander 2021-08-28 13:13 202
	Mix_PlayChannel(1, testSound.get(), 0);
c99935b0 Poul Sander 2021-08-28 13:13 203
}
c99935b0 Poul Sander 2021-08-28 13:13 204
c99935b0 Poul Sander 2021-08-28 13:13 205
class Button_testMusic : public Button {
55e33610 Poul Sander 2022-01-09 11:45 206
public:
c99935b0 Poul Sander 2021-08-28 13:13 207
	Button_testMusic();
c99935b0 Poul Sander 2021-08-28 13:13 208
	virtual void doAction() override;
c99935b0 Poul Sander 2021-08-28 13:13 209
};
c99935b0 Poul Sander 2021-08-28 13:13 210
c99935b0 Poul Sander 2021-08-28 13:13 211
Button_testMusic::Button_testMusic() {
c99935b0 Poul Sander 2021-08-28 13:13 212
	setLabel(_("Test music"));
c99935b0 Poul Sander 2021-08-28 13:13 213
}
c99935b0 Poul Sander 2021-08-28 13:13 214
c99935b0 Poul Sander 2021-08-28 13:13 215
void Button_testMusic::doAction() {
c99935b0 Poul Sander 2021-08-28 13:13 216
	Mix_VolumeMusic(Config::getInstance()->getInt("volume_music"));
c99935b0 Poul Sander 2021-08-28 13:13 217
	sago::MusicHandler bgMusic = globalData.spriteHolder->GetDataHolder().getMusicHandler("bgmusic");
c99935b0 Poul Sander 2021-08-28 13:13 218
	Mix_PlayMusic(bgMusic.get(), -1);
5f8ce673 Poul Sander 2021-06-05 22:18 219
}
5f8ce673 Poul Sander 2021-06-05 22:18 220
517ed886 Poul Sander 2025-12-14 14:38 221
// Sound volume button with adjustment controls
517ed886 Poul Sander 2025-12-14 14:38 222
class Button_soundVolume : public ButtonWithAdjustment {
517ed886 Poul Sander 2025-12-14 14:38 223
private:
517ed886 Poul Sander 2025-12-14 14:38 224
	mutable std::string volumeLabel;
517ed886 Poul Sander 2025-12-14 14:38 225
	int incrementValue = 5;
517ed886 Poul Sander 2025-12-14 14:38 226
public:
517ed886 Poul Sander 2025-12-14 14:38 227
	Button_soundVolume();
517ed886 Poul Sander 2025-12-14 14:38 228
	virtual void doAction() override;
517ed886 Poul Sander 2025-12-14 14:38 229
	virtual void doLeft() override;
517ed886 Poul Sander 2025-12-14 14:38 230
	virtual void doRight() override;
517ed886 Poul Sander 2025-12-14 14:38 231
	virtual const std::string& getLabel() const override;
517ed886 Poul Sander 2025-12-14 14:38 232
};
517ed886 Poul Sander 2025-12-14 14:38 233
517ed886 Poul Sander 2025-12-14 14:38 234
Button_soundVolume::Button_soundVolume() {
517ed886 Poul Sander 2025-12-14 14:38 235
	standardButton.setSurfaces();
517ed886 Poul Sander 2025-12-14 14:38 236
}
517ed886 Poul Sander 2025-12-14 14:38 237
517ed886 Poul Sander 2025-12-14 14:38 238
void Button_soundVolume::doAction() {
517ed886 Poul Sander 2025-12-14 14:38 239
	// Test sound
517ed886 Poul Sander 2025-12-14 14:38 240
	sago::SoundHandler testSound = globalData.spriteHolder->GetDataHolder().getSoundHandler("pop");
517ed886 Poul Sander 2025-12-14 14:38 241
	Mix_VolumeChunk(testSound.get(), Config::getInstance()->getInt("volume_sound"));
517ed886 Poul Sander 2025-12-14 14:38 242
	Mix_PlayChannel(1, testSound.get(), 0);
517ed886 Poul Sander 2025-12-14 14:38 243
}
517ed886 Poul Sander 2025-12-14 14:38 244
517ed886 Poul Sander 2025-12-14 14:38 245
void Button_soundVolume::doLeft() {
517ed886 Poul Sander 2025-12-14 14:38 246
	// Decrease volume
517ed886 Poul Sander 2025-12-14 14:38 247
	int newValue = Config::getInstance()->getInt("volume_sound") - incrementValue;
517ed886 Poul Sander 2025-12-14 14:38 248
	if (newValue < 0) {
517ed886 Poul Sander 2025-12-14 14:38 249
		newValue = 0;
517ed886 Poul Sander 2025-12-14 14:38 250
	}
517ed886 Poul Sander 2025-12-14 14:38 251
	Config::getInstance()->setInt("volume_sound", newValue);
c4ae70b7 Poul Sander 2025-12-14 15:05 252
	leftButtonMarkTime = SDL_GetTicks();
517ed886 Poul Sander 2025-12-14 14:38 253
}
517ed886 Poul Sander 2025-12-14 14:38 254
517ed886 Poul Sander 2025-12-14 14:38 255
void Button_soundVolume::doRight() {
517ed886 Poul Sander 2025-12-14 14:38 256
	// Increase volume
517ed886 Poul Sander 2025-12-14 14:38 257
	int newValue = Config::getInstance()->getInt("volume_sound") + incrementValue;
517ed886 Poul Sander 2025-12-14 14:38 258
	if (newValue > MIX_MAX_VOLUME) {
517ed886 Poul Sander 2025-12-14 14:38 259
		newValue = MIX_MAX_VOLUME;
517ed886 Poul Sander 2025-12-14 14:38 260
	}
517ed886 Poul Sander 2025-12-14 14:38 261
	Config::getInstance()->setInt("volume_sound", newValue);
c4ae70b7 Poul Sander 2025-12-14 15:05 262
	rightButtonMarkTime = SDL_GetTicks();
517ed886 Poul Sander 2025-12-14 14:38 263
}
517ed886 Poul Sander 2025-12-14 14:38 264
517ed886 Poul Sander 2025-12-14 14:38 265
const std::string& Button_soundVolume::getLabel() const {
517ed886 Poul Sander 2025-12-14 14:38 266
	int volumePct = Config::getInstance()->getInt("volume_sound")*100.0/MIX_MAX_VOLUME;
517ed886 Poul Sander 2025-12-14 14:38 267
	volumeLabel = fmt::format(_("Sound: {}"), volumePct)+"%";
517ed886 Poul Sander 2025-12-14 14:38 268
	return volumeLabel;
517ed886 Poul Sander 2025-12-14 14:38 269
}
517ed886 Poul Sander 2025-12-14 14:38 270
517ed886 Poul Sander 2025-12-14 14:38 271
// Music volume button with adjustment controls
517ed886 Poul Sander 2025-12-14 14:38 272
class Button_musicVolume : public ButtonWithAdjustment {
517ed886 Poul Sander 2025-12-14 14:38 273
private:
517ed886 Poul Sander 2025-12-14 14:38 274
	mutable std::string volumeLabel;
517ed886 Poul Sander 2025-12-14 14:38 275
	int incrementValue = 5;
517ed886 Poul Sander 2025-12-14 14:38 276
public:
517ed886 Poul Sander 2025-12-14 14:38 277
	Button_musicVolume();
517ed886 Poul Sander 2025-12-14 14:38 278
	virtual void doAction() override;
517ed886 Poul Sander 2025-12-14 14:38 279
	virtual void doLeft() override;
517ed886 Poul Sander 2025-12-14 14:38 280
	virtual void doRight() override;
517ed886 Poul Sander 2025-12-14 14:38 281
	virtual const std::string& getLabel() const override;
517ed886 Poul Sander 2025-12-14 14:38 282
};
517ed886 Poul Sander 2025-12-14 14:38 283
517ed886 Poul Sander 2025-12-14 14:38 284
Button_musicVolume::Button_musicVolume() {
517ed886 Poul Sander 2025-12-14 14:38 285
	standardButton.setSurfaces();
517ed886 Poul Sander 2025-12-14 14:38 286
}
517ed886 Poul Sander 2025-12-14 14:38 287
517ed886 Poul Sander 2025-12-14 14:38 288
void Button_musicVolume::doAction() {
517ed886 Poul Sander 2025-12-14 14:38 289
	// Test music
517ed886 Poul Sander 2025-12-14 14:38 290
	Mix_VolumeMusic(Config::getInstance()->getInt("volume_music"));
517ed886 Poul Sander 2025-12-14 14:38 291
	sago::MusicHandler bgMusic = globalData.spriteHolder->GetDataHolder().getMusicHandler("bgmusic");
517ed886 Poul Sander 2025-12-14 14:38 292
	Mix_PlayMusic(bgMusic.get(), -1);
517ed886 Poul Sander 2025-12-14 14:38 293
}
517ed886 Poul Sander 2025-12-14 14:38 294
517ed886 Poul Sander 2025-12-14 14:38 295
void Button_musicVolume::doLeft() {
517ed886 Poul Sander 2025-12-14 14:38 296
	// Decrease volume
517ed886 Poul Sander 2025-12-14 14:38 297
	int newValue = Config::getInstance()->getInt("volume_music") - incrementValue;
517ed886 Poul Sander 2025-12-14 14:38 298
	if (newValue < 0) {
517ed886 Poul Sander 2025-12-14 14:38 299
		newValue = 0;
517ed886 Poul Sander 2025-12-14 14:38 300
	}
517ed886 Poul Sander 2025-12-14 14:38 301
	Config::getInstance()->setInt("volume_music", newValue);
c4ae70b7 Poul Sander 2025-12-14 15:05 302
	leftButtonMarkTime = SDL_GetTicks();
517ed886 Poul Sander 2025-12-14 14:38 303
}
517ed886 Poul Sander 2025-12-14 14:38 304
517ed886 Poul Sander 2025-12-14 14:38 305
void Button_musicVolume::doRight() {
517ed886 Poul Sander 2025-12-14 14:38 306
	// Increase volume
517ed886 Poul Sander 2025-12-14 14:38 307
	int newValue = Config::getInstance()->getInt("volume_music") + incrementValue;
517ed886 Poul Sander 2025-12-14 14:38 308
	if (newValue > MIX_MAX_VOLUME) {
517ed886 Poul Sander 2025-12-14 14:38 309
		newValue = MIX_MAX_VOLUME;
517ed886 Poul Sander 2025-12-14 14:38 310
	}
517ed886 Poul Sander 2025-12-14 14:38 311
	Config::getInstance()->setInt("volume_music", newValue);
c4ae70b7 Poul Sander 2025-12-14 15:05 312
	rightButtonMarkTime = SDL_GetTicks();
517ed886 Poul Sander 2025-12-14 14:38 313
}
517ed886 Poul Sander 2025-12-14 14:38 314
517ed886 Poul Sander 2025-12-14 14:38 315
const std::string& Button_musicVolume::getLabel() const {
517ed886 Poul Sander 2025-12-14 14:38 316
	int volumePct = Config::getInstance()->getInt("volume_music")*100.0/MIX_MAX_VOLUME;
517ed886 Poul Sander 2025-12-14 14:38 317
	volumeLabel = fmt::format(_("Music: {}"), volumePct)+"%";
517ed886 Poul Sander 2025-12-14 14:38 318
	return volumeLabel;
517ed886 Poul Sander 2025-12-14 14:38 319
}
517ed886 Poul Sander 2025-12-14 14:38 320
26ddb424 sago007 2011-06-09 20:06 321
4379ec19 Poul Sander 2019-01-30 18:27 322
static void runSinglePlayerEndless0() {
de81e07d sago007 2016-07-10 20:22 323
	runGame(Gametype::SinglePlayerEndless, 0);
26ddb424 sago007 2011-06-09 20:06 324
}
26ddb424 sago007 2011-06-09 20:06 325
4379ec19 Poul Sander 2019-01-30 18:27 326
static void runSinglePlayerEndless1() {
4379ec19 Poul Sander 2019-01-30 18:27 327
	runGame(Gametype::SinglePlayerEndless, 1);
4379ec19 Poul Sander 2019-01-30 18:27 328
}
4379ec19 Poul Sander 2019-01-30 18:27 329
4379ec19 Poul Sander 2019-01-30 18:27 330
static void runSinglePlayerEndless2() {
4379ec19 Poul Sander 2019-01-30 18:27 331
	runGame(Gametype::SinglePlayerEndless, 2);
4379ec19 Poul Sander 2019-01-30 18:27 332
}
4379ec19 Poul Sander 2019-01-30 18:27 333
4379ec19 Poul Sander 2019-01-30 18:27 334
static void runSinglePlayerEndless3() {
4379ec19 Poul Sander 2019-01-30 18:27 335
	runGame(Gametype::SinglePlayerEndless, 3);
4379ec19 Poul Sander 2019-01-30 18:27 336
}
4379ec19 Poul Sander 2019-01-30 18:27 337
4379ec19 Poul Sander 2019-01-30 18:27 338
static void runSinglePlayerEndless4() {
4379ec19 Poul Sander 2019-01-30 18:27 339
	runGame(Gametype::SinglePlayerEndless, 4);
4379ec19 Poul Sander 2019-01-30 18:27 340
}
4379ec19 Poul Sander 2019-01-30 18:27 341
4379ec19 Poul Sander 2019-01-30 18:27 342
static void runSinglePlayerEndless() {
4379ec19 Poul Sander 2019-01-30 18:27 343
	Menu sp(globalData.screen,_("Single Player Endless"),true);
4379ec19 Poul Sander 2019-01-30 18:27 344
	Button d0,d1,d2,d3,d4;
4379ec19 Poul Sander 2019-01-30 18:27 345
	d0.setPopOnRun(true);
4379ec19 Poul Sander 2019-01-30 18:27 346
	d1.setPopOnRun(true);
4379ec19 Poul Sander 2019-01-30 18:27 347
	d2.setPopOnRun(true);
4379ec19 Poul Sander 2019-01-30 18:27 348
	d3.setPopOnRun(true);
4379ec19 Poul Sander 2019-01-30 18:27 349
	d4.setPopOnRun(true);
4379ec19 Poul Sander 2019-01-30 18:27 350
	d0.setLabel(_("Slow"));
4379ec19 Poul Sander 2019-01-30 18:27 351
	d1.setLabel(_("Fast"));
4379ec19 Poul Sander 2019-01-30 18:27 352
	d2.setLabel(_("Faster"));
4379ec19 Poul Sander 2019-01-30 18:27 353
	d3.setLabel(_("Even faster"));
4379ec19 Poul Sander 2019-01-30 18:27 354
	d4.setLabel(_("Fastest"));
4379ec19 Poul Sander 2019-01-30 18:27 355
	d0.setAction(runSinglePlayerEndless0);
4379ec19 Poul Sander 2019-01-30 18:27 356
	d1.setAction(runSinglePlayerEndless1);
4379ec19 Poul Sander 2019-01-30 18:27 357
	d2.setAction(runSinglePlayerEndless2);
4379ec19 Poul Sander 2019-01-30 18:27 358
	d3.setAction(runSinglePlayerEndless3);
4379ec19 Poul Sander 2019-01-30 18:27 359
	d4.setAction(runSinglePlayerEndless4);
4379ec19 Poul Sander 2019-01-30 18:27 360
	sp.addButton(&d0);
4379ec19 Poul Sander 2019-01-30 18:27 361
	sp.addButton(&d1);
4379ec19 Poul Sander 2019-01-30 18:27 362
	sp.addButton(&d2);
4379ec19 Poul Sander 2019-01-30 18:27 363
	sp.addButton(&d3);
4379ec19 Poul Sander 2019-01-30 18:27 364
	sp.addButton(&d4);
4379ec19 Poul Sander 2019-01-30 18:27 365
	RunGameState(sp);
4379ec19 Poul Sander 2019-01-30 18:27 366
}
4379ec19 Poul Sander 2019-01-30 18:27 367
29edda2d sago007 2016-10-08 18:06 368
static void runSinglePlayerTimeTrial() {
de81e07d sago007 2016-07-10 20:22 369
	runGame(Gametype::SinglePlayerTimeTrial, 0);
26ddb424 sago007 2011-06-09 20:06 370
}
26ddb424 sago007 2011-06-09 20:06 371
29edda2d sago007 2016-10-08 18:06 372
static void runStageClear() {
de81e07d sago007 2016-07-10 20:22 373
	runGame(Gametype::StageClear, 0);
aede0664 sago007 2012-04-19 19:45 374
}
aede0664 sago007 2012-04-19 19:45 375
29edda2d sago007 2016-10-08 18:06 376
static void runSinglePlayerPuzzle() {
de81e07d sago007 2016-07-10 20:22 377
	runGame(Gametype::Puzzle, 0);
26ddb424 sago007 2011-06-09 20:06 378
}
26ddb424 sago007 2011-06-09 20:06 379
29edda2d sago007 2016-10-08 18:06 380
class RunSinglePlayerVsButton : public Button {
29edda2d sago007 2016-10-08 18:06 381
	virtual void doAction() override {
29edda2d sago007 2016-10-08 18:06 382
		runGame(Gametype::SinglePlayerVs, iGeneric1);
29edda2d sago007 2016-10-08 18:06 383
	}
29edda2d sago007 2016-10-08 18:06 384
};
26ddb424 sago007 2011-06-09 20:06 385
29edda2d sago007 2016-10-08 18:06 386
static void runTwoPlayerTimeTrial() {
de81e07d sago007 2016-07-10 20:22 387
	runGame(Gametype::TwoPlayerTimeTrial, 0);
b0222eff sago007 2012-04-22 15:06 388
}
b0222eff sago007 2012-04-22 15:06 389
29edda2d sago007 2016-10-08 18:06 390
static void runTwoPlayerVs() {
de81e07d sago007 2016-07-10 20:22 391
	runGame(Gametype::TwoPlayerVs, 0);
b0222eff sago007 2012-04-22 15:06 392
}
b0222eff sago007 2012-04-22 15:06 393
1029dfed Poul Sander 2019-03-13 17:22 394
static void SetAlwaysSoftwareLabel(Button* b) {
1029dfed Poul Sander 2019-03-13 17:22 395
	b->setLabel(Config::getInstance()->getInt("always-software")?
9c7fa9a1 sago007 2020-06-27 22:09 396
	            _("Always use software render: On")
9c7fa9a1 sago007 2020-06-27 22:09 397
	            : _("Always use software render: Off"));
1029dfed Poul Sander 2019-03-13 17:22 398
}
1029dfed Poul Sander 2019-03-13 17:22 399
e17d4be2 Poul Sander 2019-03-13 17:29 400
static void SetFullscreenLabel (Button* b) {
e17d4be2 Poul Sander 2019-03-13 17:29 401
	b->setLabel(globalData.bFullscreen? _("Fullscreen: On") : _("Fullscreen: Off") );
e17d4be2 Poul Sander 2019-03-13 17:29 402
}
e17d4be2 Poul Sander 2019-03-13 17:29 403
1b403c4a Poul Sander 2024-04-14 14:57 404
static void SetBlockVariationLabel (Button* b) {
1b403c4a Poul Sander 2024-04-14 14:57 405
	b->setLabel(_("Block variants: ")+std::to_string(Config::getInstance()->getInt("basic_block_variants", 6)) );
1b403c4a Poul Sander 2024-04-14 14:57 406
}
1b403c4a Poul Sander 2024-04-14 14:57 407
1029dfed Poul Sander 2019-03-13 17:22 408
class AlwaysSoftwareRenderButton : public Button {
1029dfed Poul Sander 2019-03-13 17:22 409
	virtual void doAction() override {
1029dfed Poul Sander 2019-03-13 17:22 410
		Config::getInstance()->setInt("always-software", !Config::getInstance()->getInt("always-software"));
1029dfed Poul Sander 2019-03-13 17:22 411
		SetAlwaysSoftwareLabel(this);
1029dfed Poul Sander 2019-03-13 17:22 412
	}
1029dfed Poul Sander 2019-03-13 17:22 413
};
1029dfed Poul Sander 2019-03-13 17:22 414
29edda2d sago007 2016-10-08 18:06 415
class FullscreenButton : public Button {
29edda2d sago007 2016-10-08 18:06 416
	virtual void doAction() override {
72383a9e sago007 2016-10-30 11:56 417
		globalData.bFullscreen = !globalData.bFullscreen;
e17d4be2 Poul Sander 2019-03-13 17:29 418
		SetFullscreenLabel(this);
29edda2d sago007 2016-10-08 18:06 419
		ResetFullscreen();
29edda2d sago007 2016-10-08 18:06 420
	}
29edda2d sago007 2016-10-08 18:06 421
};
26ddb424 sago007 2011-06-09 20:06 422
1b403c4a Poul Sander 2024-04-14 14:57 423
class BlockVariantButton : public Button {
1b403c4a Poul Sander 2024-04-14 14:57 424
	virtual void doAction() override {
1b403c4a Poul Sander 2024-04-14 14:57 425
		int blockVariation = Config::getInstance()->getInt("basic_block_variants", 6);
1b403c4a Poul Sander 2024-04-14 14:57 426
		blockVariation++;
1b403c4a Poul Sander 2024-04-14 14:57 427
		if (blockVariation>6) {
1b403c4a Poul Sander 2024-04-14 14:57 428
			blockVariation = 5;
1b403c4a Poul Sander 2024-04-14 14:57 429
		}
1b403c4a Poul Sander 2024-04-14 14:57 430
		Config::getInstance()->setInt("basic_block_variants", blockVariation);
1b403c4a Poul Sander 2024-04-14 14:57 431
		SetBlockVariationLabel(this);
1b403c4a Poul Sander 2024-04-14 14:57 432
	}
1b403c4a Poul Sander 2024-04-14 14:57 433
};
1b403c4a Poul Sander 2024-04-14 14:57 434
29edda2d sago007 2016-10-08 18:06 435
static void buttonActionPlayer1Name() {
72383a9e sago007 2016-10-30 11:56 436
	if ( OpenDialogbox(200, 100, globalData.player1name, _("Enter player 1 name:")) ) {
acd79baf sago007 2015-11-22 19:37 437
		return;    //must save if true
acd79baf sago007 2015-11-22 19:37 438
	}
26ddb424 sago007 2011-06-09 20:06 439
}
26ddb424 sago007 2011-06-09 20:06 440
29edda2d sago007 2016-10-08 18:06 441
static void buttonActionPlayer2Name() {
72383a9e sago007 2016-10-30 11:56 442
	if ( OpenDialogbox(200, 100, globalData.player2name, _("Enter player 2 name:")) ) {
acd79baf sago007 2015-11-22 19:37 443
		return;    //must save if true
acd79baf sago007 2015-11-22 19:37 444
	}
26ddb424 sago007 2011-06-09 20:06 445
}
26ddb424 sago007 2011-06-09 20:06 446
29edda2d sago007 2016-10-08 18:06 447
static void buttonActionHighscores() {
c53e6443 sago007 2012-04-17 11:04 448
	OpenScoresDisplay();
26ddb424 sago007 2011-06-09 20:06 449
}
26ddb424 sago007 2011-06-09 20:06 450
ecef5838 sago007 2015-11-24 20:01 451
static void ChangeKeysMenu(long playernumber) {
72383a9e sago007 2016-10-30 11:56 452
	Menu km(globalData.screen,_("Change key bindings"),true);
c53e6443 sago007 2012-04-17 11:04 453
	Button_changekey bLeft(&keySettings[playernumber].left,_("Left") );
c53e6443 sago007 2012-04-17 11:04 454
	Button_changekey bRight(&keySettings[playernumber].right,_("Right") );
c53e6443 sago007 2012-04-17 11:04 455
	Button_changekey bUp(&keySettings[playernumber].up,_("Up") );
c53e6443 sago007 2012-04-17 11:04 456
	Button_changekey bDown(&keySettings[playernumber].down,_("Down") );
c53e6443 sago007 2012-04-17 11:04 457
	Button_changekey bPush(&keySettings[playernumber].push,_("Push") );
c53e6443 sago007 2012-04-17 11:04 458
	Button_changekey bSwitch(&keySettings[playernumber].change,_("Change") );
c53e6443 sago007 2012-04-17 11:04 459
	km.addButton(&bLeft);
c53e6443 sago007 2012-04-17 11:04 460
	km.addButton(&bRight);
c53e6443 sago007 2012-04-17 11:04 461
	km.addButton(&bUp);
c53e6443 sago007 2012-04-17 11:04 462
	km.addButton(&bDown);
c53e6443 sago007 2012-04-17 11:04 463
	km.addButton(&bPush);
c53e6443 sago007 2012-04-17 11:04 464
	km.addButton(&bSwitch);
20d77c6e sago007 2016-11-12 16:28 465
	RunGameState(km);
c53e6443 sago007 2012-04-17 11:04 466
}
c53e6443 sago007 2012-04-17 11:04 467
29edda2d sago007 2016-10-08 18:06 468
static void ChangeKeysMenu1() {
c53e6443 sago007 2012-04-17 11:04 469
	ChangeKeysMenu(0);
593aeae4 sago007 2011-06-25 22:42 470
}
593aeae4 sago007 2011-06-25 22:42 471
29edda2d sago007 2016-10-08 18:06 472
static void ChangeKeysMenu2() {
c53e6443 sago007 2012-04-17 11:04 473
	ChangeKeysMenu(2);
593aeae4 sago007 2011-06-25 22:42 474
}
fc8e3d6a sago007 2011-06-25 16:31 475
3affd2d6 Poul Sander 2020-12-27 15:56 476
static void PlayerConfigMenu() {
3affd2d6 Poul Sander 2020-12-27 15:56 477
	Menu pcm(globalData.screen,_("Player configuration"),true);
3affd2d6 Poul Sander 2020-12-27 15:56 478
	Button bPlayer1Name, bPlayer2Name;
3affd2d6 Poul Sander 2020-12-27 15:56 479
	Button bPlayer1Keys, bPlayer2Keys;
3affd2d6 Poul Sander 2020-12-27 15:56 480
	bPlayer1Name.setAction(buttonActionPlayer1Name);
3affd2d6 Poul Sander 2020-12-27 15:56 481
	bPlayer1Name.setLabel(_("Change player 1's name") );
3affd2d6 Poul Sander 2020-12-27 15:56 482
	bPlayer2Name.setAction(buttonActionPlayer2Name);
3affd2d6 Poul Sander 2020-12-27 15:56 483
	bPlayer2Name.setLabel(_("Change player 2's name") );
3affd2d6 Poul Sander 2020-12-27 15:56 484
	bPlayer1Keys.setAction(ChangeKeysMenu1);
3affd2d6 Poul Sander 2020-12-27 15:56 485
	bPlayer1Keys.setLabel(_("Change player 1's keys") );
3affd2d6 Poul Sander 2020-12-27 15:56 486
	bPlayer2Keys.setAction(ChangeKeysMenu2);
3affd2d6 Poul Sander 2020-12-27 15:56 487
	bPlayer2Keys.setLabel(_("Change player 2's keys") );
3affd2d6 Poul Sander 2020-12-27 15:56 488
	pcm.addButton(&bPlayer1Name);
3affd2d6 Poul Sander 2020-12-27 15:56 489
	pcm.addButton(&bPlayer2Name);
3affd2d6 Poul Sander 2020-12-27 15:56 490
	pcm.addButton(&bPlayer1Keys);
3affd2d6 Poul Sander 2020-12-27 15:56 491
	pcm.addButton(&bPlayer2Keys);
3affd2d6 Poul Sander 2020-12-27 15:56 492
	RunGameState(pcm);
3affd2d6 Poul Sander 2020-12-27 15:56 493
}
3affd2d6 Poul Sander 2020-12-27 15:56 494
4ba5514b Poul Sander 2023-10-09 18:59 495
29edda2d sago007 2016-10-08 18:06 496
static void ConfigureMenu() {
72383a9e sago007 2016-10-30 11:56 497
	Menu cm(globalData.screen,_("Configuration"),true);
1029dfed Poul Sander 2019-03-13 17:22 498
	AlwaysSoftwareRenderButton bSoftware;
517ed886 Poul Sander 2025-12-14 14:38 499
	Button_musicVolume bMusic;
517ed886 Poul Sander 2025-12-14 14:38 500
	Button_soundVolume bSound;
29edda2d sago007 2016-10-08 18:06 501
	FullscreenButton buttonFullscreen;
1b403c4a Poul Sander 2024-04-14 14:57 502
	BlockVariantButton bBlockVariant;
3affd2d6 Poul Sander 2020-12-27 15:56 503
	Button bPlayerConfig;
3affd2d6 Poul Sander 2020-12-27 15:56 504
	bPlayerConfig.setLabel(_("Player configuration") );
3affd2d6 Poul Sander 2020-12-27 15:56 505
	bPlayerConfig.setAction(PlayerConfigMenu);
4ba5514b Poul Sander 2023-10-09 18:59 506
	Button bThemes;
4ba5514b Poul Sander 2023-10-09 18:59 507
	bThemes.setLabel(_("Themes"));
4ba5514b Poul Sander 2023-10-09 18:59 508
	bThemes.setAction(OpenThemesMenu);
1029dfed Poul Sander 2019-03-13 17:22 509
	SetAlwaysSoftwareLabel(&bSoftware);
e17d4be2 Poul Sander 2019-03-13 17:29 510
	SetFullscreenLabel(&buttonFullscreen);
1b403c4a Poul Sander 2024-04-14 14:57 511
	SetBlockVariationLabel(&bBlockVariant);
c53e6443 sago007 2012-04-17 11:04 512
	cm.addButton(&bMusic);
c53e6443 sago007 2012-04-17 11:04 513
	cm.addButton(&bSound);
1029dfed Poul Sander 2019-03-13 17:22 514
	cm.addButton(&bSoftware);
c53e6443 sago007 2012-04-17 11:04 515
	cm.addButton(&buttonFullscreen);
1b403c4a Poul Sander 2024-04-14 14:57 516
	cm.addButton(&bBlockVariant);
3affd2d6 Poul Sander 2020-12-27 15:56 517
	cm.addButton(&bPlayerConfig);
4ba5514b Poul Sander 2023-10-09 18:59 518
	cm.addButton(&bThemes);
20d77c6e sago007 2016-11-12 16:28 519
	RunGameState(cm);
26ddb424 sago007 2011-06-09 20:06 520
}
26ddb424 sago007 2011-06-09 20:06 521
29edda2d sago007 2016-10-08 18:06 522
static void SinglePlayerVsMenu() {
72383a9e sago007 2016-10-30 11:56 523
	Menu spvs(globalData.screen,_("Single player VS"),true);
29edda2d sago007 2016-10-08 18:06 524
	RunSinglePlayerVsButton d1,d2,d3,d4,d5,d6,d7;
67a32395 sago007 2012-04-19 18:40 525
	d1.setPopOnRun(true);
67a32395 sago007 2012-04-19 18:40 526
	d2.setPopOnRun(true);
67a32395 sago007 2012-04-19 18:40 527
	d3.setPopOnRun(true);
67a32395 sago007 2012-04-19 18:40 528
	d4.setPopOnRun(true);
67a32395 sago007 2012-04-19 18:40 529
	d5.setPopOnRun(true);
67a32395 sago007 2012-04-19 18:40 530
	d6.setPopOnRun(true);
67a32395 sago007 2012-04-19 18:40 531
	d7.setPopOnRun(true);
e68d08eb sago007 2013-11-15 22:33 532
	d1.iGeneric1 = 0;
e68d08eb sago007 2013-11-15 22:33 533
	d2.iGeneric1 = 1;
e68d08eb sago007 2013-11-15 22:33 534
	d3.iGeneric1 = 2;
e68d08eb sago007 2013-11-15 22:33 535
	d4.iGeneric1 = 3;
e68d08eb sago007 2013-11-15 22:33 536
	d5.iGeneric1 = 4;
e68d08eb sago007 2013-11-15 22:33 537
	d6.iGeneric1 = 5;
e68d08eb sago007 2013-11-15 22:33 538
	d7.iGeneric1 = 6;
67a32395 sago007 2012-04-19 18:40 539
	d1.setLabel(_("Very easy"));
67a32395 sago007 2012-04-19 18:40 540
	d2.setLabel(_("Easy"));
67a32395 sago007 2012-04-19 18:40 541
	d3.setLabel(_("Below normal"));
67a32395 sago007 2012-04-19 18:40 542
	d4.setLabel(_("Normal"));
67a32395 sago007 2012-04-19 18:40 543
	d5.setLabel(_("Above normal"));
67a32395 sago007 2012-04-19 18:40 544
	d6.setLabel(_("Hard"));
67a32395 sago007 2012-04-19 18:40 545
	d7.setLabel(_("Hardest"));
67a32395 sago007 2012-04-19 18:40 546
	spvs.addButton(&d1);
67a32395 sago007 2012-04-19 18:40 547
	spvs.addButton(&d2);
67a32395 sago007 2012-04-19 18:40 548
	spvs.addButton(&d3);
67a32395 sago007 2012-04-19 18:40 549
	spvs.addButton(&d4);
67a32395 sago007 2012-04-19 18:40 550
	spvs.addButton(&d5);
67a32395 sago007 2012-04-19 18:40 551
	spvs.addButton(&d6);
67a32395 sago007 2012-04-19 18:40 552
	spvs.addButton(&d7);
20d77c6e sago007 2016-11-12 16:28 553
	RunGameState(spvs);
67a32395 sago007 2012-04-19 18:40 554
}
67a32395 sago007 2012-04-19 18:40 555
29edda2d sago007 2016-10-08 18:06 556
static void MultiplayerMenu() {
72383a9e sago007 2016-10-30 11:56 557
	Menu mm(globalData.screen,_("Multiplayer"),true);
de81e07d sago007 2016-07-10 20:22 558
	Button bTT, bVs;
b0222eff sago007 2012-04-22 15:06 559
	bTT.setLabel(_("Two player - time trial"));
b0222eff sago007 2012-04-22 15:06 560
	bTT.setAction(runTwoPlayerTimeTrial);
b0222eff sago007 2012-04-22 15:06 561
	bVs.setLabel(_("Two player - vs"));
b0222eff sago007 2012-04-22 15:06 562
	bVs.setAction(runTwoPlayerVs);
b0222eff sago007 2012-04-22 15:06 563
	mm.addButton(&bTT);
b0222eff sago007 2012-04-22 15:06 564
	mm.addButton(&bVs);
20d77c6e sago007 2016-11-12 16:28 565
	RunGameState(mm);
b0222eff sago007 2012-04-22 15:06 566
}
b0222eff sago007 2012-04-22 15:06 567
d8fe60bd sago007 2018-04-02 16:15 568
static void runHowto() {
d8fe60bd sago007 2018-04-02 16:15 569
	HelpHowtoState howto;
d8fe60bd sago007 2018-04-02 16:15 570
	RunGameState(howto);
d8fe60bd sago007 2018-04-02 16:15 571
}
d8fe60bd sago007 2018-04-02 16:15 572
bfb4fed7 Poul Sander 2022-02-14 19:35 573
static void runHelpModInfo() {
bfb4fed7 Poul Sander 2022-02-14 19:35 574
	HelpModInfoState modInfo;
bfb4fed7 Poul Sander 2022-02-14 19:35 575
	RunGameState(modInfo);
bfb4fed7 Poul Sander 2022-02-14 19:35 576
}
bfb4fed7 Poul Sander 2022-02-14 19:35 577
54d2d583 sago007 2018-04-05 17:52 578
static void runHelpGamepad() {
54d2d583 sago007 2018-04-05 17:52 579
	HelpGamepadState helpGamepad;
54d2d583 sago007 2018-04-05 17:52 580
	RunGameState(helpGamepad);
54d2d583 sago007 2018-04-05 17:52 581
}
54d2d583 sago007 2018-04-05 17:52 582
5147de4e Poul Sander 2018-05-06 12:59 583
static void runHelpAbout() {
5147de4e Poul Sander 2018-05-06 12:59 584
	HelpAboutState helpAbout;
5147de4e Poul Sander 2018-05-06 12:59 585
	RunGameState(helpAbout);
5147de4e Poul Sander 2018-05-06 12:59 586
}
5147de4e Poul Sander 2018-05-06 12:59 587
0471a1d3 sago007 2018-05-19 10:26 588
static void runCredits() {
0471a1d3 sago007 2018-05-19 10:26 589
	ShowFileState creditsFile;
0471a1d3 sago007 2018-05-19 10:26 590
	creditsFile.SetData("misc/AUTHORS", _("Credits"));
0471a1d3 sago007 2018-05-19 10:26 591
	RunGameState(creditsFile);
0471a1d3 sago007 2018-05-19 10:26 592
}
0471a1d3 sago007 2018-05-19 10:26 593
d8fe60bd sago007 2018-04-02 16:15 594
static void HelpMenu() {
d8fe60bd sago007 2018-04-02 16:15 595
	Menu m(globalData.screen, _("Help"), true);
d8fe60bd sago007 2018-04-02 16:15 596
	Button bHowto;
d8fe60bd sago007 2018-04-02 16:15 597
	bHowto.setLabel(_("How to"));
d8fe60bd sago007 2018-04-02 16:15 598
	bHowto.setAction(runHowto);
d8fe60bd sago007 2018-04-02 16:15 599
	m.addButton(&bHowto);
54d2d583 sago007 2018-04-05 17:52 600
	Button bGamepad;
54d2d583 sago007 2018-04-05 17:52 601
	bGamepad.setLabel(_("Gamepad"));
54d2d583 sago007 2018-04-05 17:52 602
	bGamepad.setAction(runHelpGamepad);
54d2d583 sago007 2018-04-05 17:52 603
	m.addButton(&bGamepad);
bfb4fed7 Poul Sander 2022-02-14 19:35 604
	Button bModInfo;
bfb4fed7 Poul Sander 2022-02-14 19:35 605
	bModInfo.setLabel(_("Mod info"));
bfb4fed7 Poul Sander 2022-02-14 19:35 606
	bModInfo.setAction(runHelpModInfo);
bfb4fed7 Poul Sander 2022-02-14 19:35 607
	m.addButton(&bModInfo);
0471a1d3 sago007 2018-05-19 10:26 608
	Button bCredits;
0471a1d3 sago007 2018-05-19 10:26 609
	bCredits.setLabel(_("Credits"));
0471a1d3 sago007 2018-05-19 10:26 610
	bCredits.setAction(runCredits);
0471a1d3 sago007 2018-05-19 10:26 611
	m.addButton(&bCredits);
5147de4e Poul Sander 2018-05-06 12:59 612
	Button bAbout;
5147de4e Poul Sander 2018-05-06 12:59 613
	bAbout.setLabel(_("About"));
5147de4e Poul Sander 2018-05-06 12:59 614
	bAbout.setAction(runHelpAbout);
5147de4e Poul Sander 2018-05-06 12:59 615
	m.addButton(&bAbout);
d8fe60bd sago007 2018-04-02 16:15 616
	RunGameState(m);
d8fe60bd sago007 2018-04-02 16:15 617
}
d8fe60bd sago007 2018-04-02 16:15 618
2f331f0c sago007 2017-08-19 16:17 619
static void SinglePlayerMenu() {
2f331f0c sago007 2017-08-19 16:17 620
	Menu m(globalData.screen, _("Single player"), true);
2f331f0c sago007 2017-08-19 16:17 621
	Button bHi,bTimetrial1, bStageClear, bPuzzle, bVs1;
c53e6443 sago007 2012-04-17 11:04 622
	bHi.setLabel(_("Single player - endless") );
c53e6443 sago007 2012-04-17 11:04 623
	bHi.setAction(runSinglePlayerEndless);
c53e6443 sago007 2012-04-17 11:04 624
	bTimetrial1.setLabel(_("Single player - time trial") );
c53e6443 sago007 2012-04-17 11:04 625
	bTimetrial1.setAction(runSinglePlayerTimeTrial);
aede0664 sago007 2012-04-19 19:45 626
	bStageClear.setLabel(_("Single player - stage clear") );
aede0664 sago007 2012-04-19 19:45 627
	bStageClear.setAction(runStageClear);
c53e6443 sago007 2012-04-17 11:04 628
	bPuzzle.setLabel(_("Single player - puzzle mode") );
c53e6443 sago007 2012-04-17 11:04 629
	bPuzzle.setAction(runSinglePlayerPuzzle);
c53e6443 sago007 2012-04-17 11:04 630
	bVs1.setLabel(_("Single player - vs") );
67a32395 sago007 2012-04-19 18:40 631
	bVs1.setAction(SinglePlayerVsMenu);
2f331f0c sago007 2017-08-19 16:17 632
	m.addButton(&bHi);
2f331f0c sago007 2017-08-19 16:17 633
	m.addButton(&bTimetrial1);
2f331f0c sago007 2017-08-19 16:17 634
	m.addButton(&bStageClear);
2f331f0c sago007 2017-08-19 16:17 635
	m.addButton(&bPuzzle);
2f331f0c sago007 2017-08-19 16:17 636
	m.addButton(&bVs1);
2f331f0c sago007 2017-08-19 16:17 637
	RunGameState(m);
2f331f0c sago007 2017-08-19 16:17 638
}
2f331f0c sago007 2017-08-19 16:17 639
ccee1ad0 Poul Sander 2019-03-13 18:39 640
void SafeModeMenu() {
ccee1ad0 Poul Sander 2019-03-13 18:39 641
	if (Config::getInstance()->getInt("always-software")) {
ccee1ad0 Poul Sander 2019-03-13 18:39 642
		return;
ccee1ad0 Poul Sander 2019-03-13 18:39 643
	}
ccee1ad0 Poul Sander 2019-03-13 18:39 644
	Menu safeMode(globalData.screen, _("Game did not shutdown as it should"), true);
ccee1ad0 Poul Sander 2019-03-13 18:39 645
	Button bOnce;
ccee1ad0 Poul Sander 2019-03-13 18:39 646
	Button bAlways;
ccee1ad0 Poul Sander 2019-03-13 18:39 647
	bOnce.setLabel(_("Use software renderer this time"));
ccee1ad0 Poul Sander 2019-03-13 18:39 648
	bAlways.setLabel(_("Always use software renderer"));
ccee1ad0 Poul Sander 2019-03-13 18:39 649
	bOnce.setPopOnRun(true);
9c7fa9a1 sago007 2020-06-27 22:09 650
	bAlways.setAction([]() {
9c7fa9a1 sago007 2020-06-27 22:09 651
		Config::getInstance()->setInt("always-software", 1);
9c7fa9a1 sago007 2020-06-27 22:09 652
	});
ccee1ad0 Poul Sander 2019-03-13 18:39 653
	bAlways.setPopOnRun(true);
ccee1ad0 Poul Sander 2019-03-13 18:39 654
	safeMode.addButton(&bOnce);
ccee1ad0 Poul Sander 2019-03-13 18:39 655
	safeMode.addButton(&bAlways);
ccee1ad0 Poul Sander 2019-03-13 18:39 656
	RunGameState(safeMode);
ccee1ad0 Poul Sander 2019-03-13 18:39 657
}
ccee1ad0 Poul Sander 2019-03-13 18:39 658
2f331f0c sago007 2017-08-19 16:17 659
void MainMenu() {
2f331f0c sago007 2017-08-19 16:17 660
	Menu m(globalData.screen,_("Block Attack - Rise of the blocks"),false);
d8fe60bd sago007 2018-04-02 16:15 661
	Button bHi, bMulti, bConfigure, bHighscore, bHelp;
2f331f0c sago007 2017-08-19 16:17 662
	bHi.setLabel(_("Single player") );
2f331f0c sago007 2017-08-19 16:17 663
	bHi.setAction(SinglePlayerMenu);
b0222eff sago007 2012-04-22 15:06 664
	bMulti.setLabel(_("Multi player") );
b0222eff sago007 2012-04-22 15:06 665
	bMulti.setAction(MultiplayerMenu);
c53e6443 sago007 2012-04-17 11:04 666
	bConfigure.setLabel(_("Configure") );
c53e6443 sago007 2012-04-17 11:04 667
	bConfigure.setAction(ConfigureMenu);
c53e6443 sago007 2012-04-17 11:04 668
	bHighscore.setLabel(_("Highscores") );
c53e6443 sago007 2012-04-17 11:04 669
	bHighscore.setAction(buttonActionHighscores);
d8fe60bd sago007 2018-04-02 16:15 670
	bHelp.setLabel(_("Help"));
d8fe60bd sago007 2018-04-02 16:15 671
	bHelp.setAction(HelpMenu);
c53e6443 sago007 2012-04-17 11:04 672
	m.addButton(&bHi);
b0222eff sago007 2012-04-22 15:06 673
	m.addButton(&bMulti);
c53e6443 sago007 2012-04-17 11:04 674
	m.addButton(&bConfigure);
c53e6443 sago007 2012-04-17 11:04 675
	m.addButton(&bHighscore);
d8fe60bd sago007 2018-04-02 16:15 676
	m.addButton(&bHelp);
95ab6b0d sago007 2016-11-12 16:11 677
	RunGameState(m);
593aeae4 sago007 2011-06-25 22:42 678
}
1970-01-01 00:00 679