forked from fph/bastet
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Ui.hpp
93 lines (81 loc) · 3.09 KB
/
Ui.hpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
/*
Bastet - tetris clone with embedded bastard block chooser
(c) 2005-2009 Federico Poloni <[email protected]> minus 37
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef UI_HPP
#define UI_HPP
#include "Well.hpp"
#include "BlockPosition.hpp"
#include "BlockChooser.hpp"
#include "Config.hpp"
#include <string>
#include <curses.h>
namespace Bastet{
typedef std::pair<int,int> Score; //(points, lines)
Score &operator +=(Score &a, const Score &b);
class BorderedWindow{
private:
WINDOW *_window;
WINDOW *_border;
public:
BorderedWindow(int height, int width, int y=-1, int x=-1); ///w and h are "inner" dimensions, excluding the border. y and x are "outer", including the border. y=-1,x=-1 means "center"
~BorderedWindow();
operator WINDOW *(); //returns the inner window
void RedrawBorder();
int GetMinX(); ///these are including border
int GetMinY();
int GetMaxX();
int GetMaxY();
void DrawDot(const Dot &d, Color c);
};
class Curses{
public:
Curses();
};
class Ui{
public:
Ui();
void MessageDialog(const std::string &message); //shows msg, ask for "space"
std::string InputDialog(const std::string &message); //asks for a string
int KeyDialog(const std::string &message); //asks for a single key
int MenuDialog(const std::vector<std::string> &choices); //asks to choose one, returns index
void RedrawStatic(); //redraws the "static" parts of the screen
void RedrawWell(const Well *well, BlockType falling, const BlockPosition &pos);
void ClearNext(); //clear the next block display
void RedrawNext(BlockType next); //redraws the next block display
void RedrawScore();
void CompletedLinesAnimation(const LinesCompleted &completed);
void DropBlock(BlockType b, Well *w); //returns <score,lines>
void ChooseLevel();
void Play(BlockChooser *bc);
void HandleHighScores(difficulty_t diff); ///if needed, asks name for highscores
void ShowHighScores(difficulty_t diff);
void CustomizeKeys();
private:
// difficulty_t _difficulty; //unused for now
int _level;
int _points;
int _lines;
Curses _curses;
BorderedWindow _wellWin;
BorderedWindow _nextWin;
BorderedWindow _scoreWin;
/**
* this is a kind of "well" structure to store the colors used to draw the blocks.
*/
typedef boost::array<Color,WellWidth> ColorWellLine;
typedef boost::array<ColorWellLine,RealWellHeight> ColorWell;
ColorWell _colors;
};
}
#endif //UI_HPP