git repos / blockattack-game

blame: source/code/MenuSystem.h

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
f3ef3495 sago007 2008-11-13 20:00 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.
f3ef3495 sago007 2008-11-13 20:00 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.
f3ef3495 sago007 2008-11-13 20:00 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/
f3ef3495 sago007 2008-11-13 20:00 18
c53e6443 sago007 2012-04-17 11:04 19
Source information and contacts persons can be found at
021de090 sago007 2015-12-30 18:56 20
http://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
f3ef3495 sago007 2008-11-13 20:00 24
f3ef3495 sago007 2008-11-13 20:00 25
#ifndef _MENUSYSTEM_H
f3ef3495 sago007 2008-11-13 20:00 26
#define	_MENUSYSTEM_H
f3ef3495 sago007 2008-11-13 20:00 27
f3ef3495 sago007 2008-11-13 20:00 28
#include <string>
f3ef3495 sago007 2008-11-13 20:00 29
#include "SDL.h"
f3ef3495 sago007 2008-11-13 20:00 30
#include <vector>
b7590374 sago007 2011-05-19 16:15 31
#include "Libs/NFont.h"
1d2e2129 sago007 2015-12-23 15:41 32
#include "sago/SagoSprite.hpp"
f3a1637d sago007 2015-11-14 21:32 33
#include <memory>
f3ef3495 sago007 2008-11-13 20:00 34
f3ef3495 sago007 2008-11-13 20:00 35
//The ButtonGfx object hold common media for all buttons, so we can reskin them by only changeing one pointer
78ab168e sago007 2015-11-14 22:02 36
struct ButtonGfx
c53e6443 sago007 2012-04-17 11:04 37
{
c53e6443 sago007 2012-04-17 11:04 38
	//The size of the buttons, so we don't have to ask w and h from the SDL Surfaces each time
8ff26872 sago007 2016-03-25 09:46 39
	int xsize = 0;
8ff26872 sago007 2016-03-25 09:46 40
	int ysize = 0;
c53e6443 sago007 2012-04-17 11:04 41
	//A TTFont used for writing the label on the buttons
8ff26872 sago007 2016-03-25 09:46 42
	NFont* thefont = nullptr;
094b2dfe sago007 2016-06-12 10:50 43
	void setSurfaces();
f3ef3495 sago007 2008-11-13 20:00 44
};
f3ef3495 sago007 2008-11-13 20:00 45
b283e0f7 sago007 2012-07-29 14:01 46
extern ButtonGfx standardButton;
b283e0f7 sago007 2012-07-29 14:01 47
f3ef3495 sago007 2008-11-13 20:00 48
//A button
c53e6443 sago007 2012-04-17 11:04 49
class Button
c53e6443 sago007 2012-04-17 11:04 50
{
c53e6443 sago007 2012-04-17 11:04 51
private:
c53e6443 sago007 2012-04-17 11:04 52
	//The label. This is written on the button
33f4e975 sago007 2015-11-14 21:49 53
	std::string label;
c53e6443 sago007 2012-04-17 11:04 54
	//Pointer to a callback function.
c53e6443 sago007 2012-04-17 11:04 55
	void (*action)(Button *b);
b4f1d3cf sago007 2012-08-20 21:28 56
67a32395 sago007 2012-04-19 18:40 57
	//If true the menu should also be closed then the button is clicked
8ff26872 sago007 2016-03-25 09:46 58
	bool popOnRun = false;
b4f1d3cf sago007 2012-08-20 21:28 59
8ff26872 sago007 2016-03-25 09:46 60
	ButtonGfx *gfx = nullptr;
c53e6443 sago007 2012-04-17 11:04 61
c53e6443 sago007 2012-04-17 11:04 62
public:
c53e6443 sago007 2012-04-17 11:04 63
	//Is the button marked?
733af903 sago007 2016-03-24 14:58 64
	bool marked = false;
c53e6443 sago007 2012-04-17 11:04 65
	//Where is the button on the screen
733af903 sago007 2016-03-24 14:58 66
	int x = 0;
733af903 sago007 2016-03-24 14:58 67
	int y = 0;
c53e6443 sago007 2012-04-17 11:04 68
c53e6443 sago007 2012-04-17 11:04 69
	Button();
c53e6443 sago007 2012-04-17 11:04 70
	Button(const Button& b);
c53e6443 sago007 2012-04-17 11:04 71
	~Button();
c53e6443 sago007 2012-04-17 11:04 72
c53e6443 sago007 2012-04-17 11:04 73
c53e6443 sago007 2012-04-17 11:04 74
	//Set the text to write on the button
33f4e975 sago007 2015-11-14 21:49 75
	void setLabel(const std::string& text);
c53e6443 sago007 2012-04-17 11:04 76
	//Set the action to run
c53e6443 sago007 2012-04-17 11:04 77
	void setAction(void (*action2run)(Button*));
c53e6443 sago007 2012-04-17 11:04 78
c53e6443 sago007 2012-04-17 11:04 79
	bool isClicked(int x,int y); //Returns true if (x,y) is within the borders of the button
c53e6443 sago007 2012-04-17 11:04 80
	virtual void doAction(); //Run the callback function
0c1de203 sago007 2015-12-05 22:15 81
	void drawToScreen(void);
b4f1d3cf sago007 2012-08-20 21:28 82
	void setPopOnRun(bool popOnRun);
b4f1d3cf sago007 2012-08-20 21:28 83
	bool isPopOnRun() const;
b4f1d3cf sago007 2012-08-20 21:28 84
	void setGfx(ButtonGfx* gfx); //Draws to screen
b283e0f7 sago007 2012-07-29 14:01 85
	int getHeight();
b4f1d3cf sago007 2012-08-20 21:28 86
67a32395 sago007 2012-04-19 18:40 87
	//May hold any other information the callback might need
733af903 sago007 2016-03-24 14:58 88
	int iGeneric1 = 0;
f3ef3495 sago007 2008-11-13 20:00 89
};
f3ef3495 sago007 2008-11-13 20:00 90
26ddb424 sago007 2011-06-09 20:06 91
c53e6443 sago007 2012-04-17 11:04 92
class Menu
c53e6443 sago007 2012-04-17 11:04 93
{
c53e6443 sago007 2012-04-17 11:04 94
private:
33f4e975 sago007 2015-11-14 21:49 95
	std::vector<Button*> buttons; //Vector holder the buttons
c53e6443 sago007 2012-04-17 11:04 96
	Button exit; //The exit button is special since it does not have a callback function
8ff26872 sago007 2016-03-25 09:46 97
	bool isSubmenu = false; //True if the menu is a submenu
8ff26872 sago007 2016-03-25 09:46 98
	int marked = 0; //The index of the marked button (for keyboard up/down)
733af903 sago007 2016-03-24 14:58 99
	bool running = true; //The menu is running. The menu will terminate then this is false
8ff26872 sago007 2016-03-25 09:46 100
	SDL_Renderer *screen = nullptr; //Pointer to the screen to draw to
33f4e975 sago007 2015-11-14 21:49 101
	std::string title;
c53e6443 sago007 2012-04-17 11:04 102
	void drawSelf();        //Private function to draw the screen
c53e6443 sago007 2012-04-17 11:04 103
	void placeButtons(); //Rearanges the buttons to the correct place.
c53e6443 sago007 2012-04-17 11:04 104
public:
c53e6443 sago007 2012-04-17 11:04 105
	//numberOfItems is the expected numberOfItems for vector initialization
c53e6443 sago007 2012-04-17 11:04 106
	//SubMenu is true by default
1d2e2129 sago007 2015-12-23 15:41 107
	Menu(SDL_Renderer *screen,bool isSubmenu);
1d2e2129 sago007 2015-12-23 15:41 108
	Menu(SDL_Renderer *screen);
1d2e2129 sago007 2015-12-23 15:41 109
	Menu(SDL_Renderer *screen, const std::string& title, bool isSubmenu);
c53e6443 sago007 2012-04-17 11:04 110
c53e6443 sago007 2012-04-17 11:04 111
	//Add a button to the menu
c53e6443 sago007 2012-04-17 11:04 112
	void addButton(Button *b);
c53e6443 sago007 2012-04-17 11:04 113
c53e6443 sago007 2012-04-17 11:04 114
	//Run the menu
c53e6443 sago007 2012-04-17 11:04 115
	void run();
f3ef3495 sago007 2008-11-13 20:00 116
};
f3ef3495 sago007 2008-11-13 20:00 117
c53e6443 sago007 2012-04-17 11:04 118
class FileMenu
c53e6443 sago007 2012-04-17 11:04 119
{
cc3ef158 sago007 2011-07-03 16:13 120
private:
33f4e975 sago007 2015-11-14 21:49 121
	std::string pm_path;
33f4e975 sago007 2015-11-14 21:49 122
	std::string pm_fileending;
8ff26872 sago007 2016-03-25 09:46 123
	bool pm_hidden_files = false;
cc3ef158 sago007 2011-07-03 16:13 124
public:
33f4e975 sago007 2015-11-14 21:49 125
	FileMenu(const std::string& path, const std::string& fileending, bool hidden_files = false);
c53e6443 sago007 2012-04-17 11:04 126
33f4e975 sago007 2015-11-14 21:49 127
	std::string getFile(SDL_Surface **screen);
cc3ef158 sago007 2011-07-03 16:13 128
};
cc3ef158 sago007 2011-07-03 16:13 129
d21782d4 sago007 2016-03-13 11:17 130
bool isUpEvent(const SDL_Event& event);
d21782d4 sago007 2016-03-13 11:17 131
d21782d4 sago007 2016-03-13 11:17 132
bool isDownEvent(const SDL_Event& event);
d21782d4 sago007 2016-03-13 11:17 133
d21782d4 sago007 2016-03-13 11:17 134
bool isLeftEvent(const SDL_Event& event);
d21782d4 sago007 2016-03-13 11:17 135
d21782d4 sago007 2016-03-13 11:17 136
bool isRightEvent(const SDL_Event& event);
d21782d4 sago007 2016-03-13 11:17 137
d21782d4 sago007 2016-03-13 11:17 138
bool isEscapeEvent(const SDL_Event& event);
d21782d4 sago007 2016-03-13 11:17 139
d21782d4 sago007 2016-03-13 11:17 140
bool isConfirmEvent(const SDL_Event& event);
d21782d4 sago007 2016-03-13 11:17 141
f3ef3495 sago007 2008-11-13 20:00 142
#endif	/* _MENUSYSTEM_H */
f3ef3495 sago007 2008-11-13 20:00 143
1970-01-01 00:00 144