202 lines
4.9 KiB
C++
202 lines
4.9 KiB
C++
#include <vector>
|
|
#include "main.h"
|
|
#include "utils.h"
|
|
#include "widgets.h"
|
|
#include "topscores.h"
|
|
#include "opensave.h"
|
|
#include "game.h"
|
|
#include "descr.h"
|
|
#include "options.h"
|
|
#include "messages.h"
|
|
|
|
|
|
|
|
class MenuBackground: public Widget
|
|
{
|
|
public:
|
|
virtual void draw();
|
|
};
|
|
|
|
|
|
void MenuBackground::draw()
|
|
{
|
|
SDL_Surface *title = loadImage(L"nova.bmp");
|
|
screen.draw(0, 0, title);
|
|
SDL_FreeSurface(title);
|
|
Font font(L"nova.ttf", 28);
|
|
std::wstring s(msg(L"einsteinFlowix"));
|
|
int width = font.getWidth(s);
|
|
font.draw((screen.getWidth() - width) / 2, 30, 255,255,255, true, s);
|
|
Font urlFont(L"luximb.ttf", 16);
|
|
s = L"http://games.flowix.com";
|
|
width = urlFont.getWidth(s);
|
|
urlFont.draw((screen.getWidth() - width) / 2, 60, 255,255,0, true, s);
|
|
screen.addRegionToUpdate(0, 0, screen.getWidth(), screen.getHeight());
|
|
}
|
|
|
|
|
|
|
|
class NewGameCommand: public Command
|
|
{
|
|
private:
|
|
Area *area;
|
|
|
|
public:
|
|
NewGameCommand(Area *a) { area = a; };
|
|
|
|
virtual void doAction() {
|
|
Game game;
|
|
game.run();
|
|
area->updateMouse();
|
|
area->draw();
|
|
};
|
|
};
|
|
|
|
|
|
class LoadGameCommand: public Command
|
|
{
|
|
private:
|
|
Area *area;
|
|
|
|
public:
|
|
LoadGameCommand(Area *a) { area = a; };
|
|
|
|
virtual void doAction() {
|
|
Game *game = loadGame(area);
|
|
if (game) {
|
|
game->run();
|
|
delete game;
|
|
}
|
|
area->updateMouse();
|
|
area->draw();
|
|
};
|
|
};
|
|
|
|
|
|
|
|
class TopScoresCommand: public Command
|
|
{
|
|
private:
|
|
Area *area;
|
|
|
|
public:
|
|
TopScoresCommand(Area *a) { area = a; };
|
|
|
|
virtual void doAction() {
|
|
TopScores scores;
|
|
showScoresWindow(area, &scores);
|
|
area->updateMouse();
|
|
area->draw();
|
|
};
|
|
};
|
|
|
|
|
|
class RulesCommand: public Command
|
|
{
|
|
private:
|
|
Area *area;
|
|
|
|
public:
|
|
RulesCommand(Area *a) { area = a; };
|
|
|
|
virtual void doAction() {
|
|
showDescription(area);
|
|
area->updateMouse();
|
|
area->draw();
|
|
};
|
|
};
|
|
|
|
|
|
class OptionsCommand: public Command
|
|
{
|
|
private:
|
|
Area *area;
|
|
|
|
public:
|
|
OptionsCommand(Area *a) { area = a; };
|
|
|
|
virtual void doAction() {
|
|
showOptionsWindow(area);
|
|
area->updateMouse();
|
|
area->draw();
|
|
};
|
|
};
|
|
|
|
|
|
class AboutCommand: public Command
|
|
{
|
|
private:
|
|
Area *parentArea;
|
|
|
|
public:
|
|
AboutCommand(Area *a) { parentArea = a; };
|
|
|
|
virtual void doAction() {
|
|
Area area;
|
|
Font titleFont(L"nova.ttf", 26);
|
|
Font font(L"laudcn2.ttf", 14);
|
|
Font urlFont(L"luximb.ttf", 16);
|
|
|
|
#define LABEL(pos, c, f, text) area.add(new Label(&f, 220, pos, 360, 20, \
|
|
Label::ALIGN_CENTER, Label::ALIGN_MIDDLE, 255,255,c, text));
|
|
area.add(parentArea);
|
|
area.add(new Window(220, 160, 360, 280, L"blue.bmp"));
|
|
area.add(new Label(&titleFont, 250, 165, 300, 40, Label::ALIGN_CENTER,
|
|
Label::ALIGN_MIDDLE, 255,255,0, msg(L"about")));
|
|
LABEL(240, 255, font, msg(L"einsteinPuzzle"))
|
|
LABEL(260, 255, font, msg(L"version"))
|
|
LABEL(280, 255, font, msg(L"copyright"))
|
|
LABEL(330, 0, urlFont, L"http://games.flowix.com")
|
|
#undef LABEL
|
|
ExitCommand exitCmd(area);
|
|
area.add(new Button(360, 400, 80, 25, &font, 255,255,0, L"blue.bmp",
|
|
msg(L"ok"), &exitCmd));
|
|
area.add(new KeyAccel(SDLK_ESCAPE, &exitCmd));
|
|
area.add(new KeyAccel(SDLK_RETURN, &exitCmd));
|
|
area.run();
|
|
|
|
parentArea->updateMouse();
|
|
parentArea->draw();
|
|
};
|
|
};
|
|
|
|
|
|
static Button* menuButton(int y, Font *font, const std::wstring &text,
|
|
Command *cmd=NULL)
|
|
{
|
|
return new Button(550, y, 220, 30, font, 0,240,240, 30,255,255, text, cmd);
|
|
}
|
|
|
|
|
|
void menu()
|
|
{
|
|
Area area;
|
|
Font font(L"laudcn2.ttf", 20);
|
|
|
|
area.add(new MenuBackground());
|
|
area.draw();
|
|
|
|
NewGameCommand newGameCmd(&area);
|
|
area.add(menuButton(340, &font, msg(L"newGame"), &newGameCmd));
|
|
LoadGameCommand loadGameCmd(&area);
|
|
area.add(menuButton(370, &font, msg(L"loadGame"), &loadGameCmd));
|
|
TopScoresCommand topScoresCmd(&area);
|
|
area.add(menuButton(400, &font, msg(L"topScores"), &topScoresCmd));
|
|
RulesCommand rulesCmd(&area);
|
|
area.add(menuButton(430, &font, msg(L"rules"), &rulesCmd));
|
|
OptionsCommand optionsCmd(&area);
|
|
area.add(menuButton(460, &font, msg(L"options"), &optionsCmd));
|
|
AboutCommand aboutCmd(&area);
|
|
area.add(menuButton(490, &font, msg(L"about"), &aboutCmd));
|
|
ExitCommand exitMenuCmd(area);
|
|
area.add(menuButton(520, &font, msg(L"exit"), &exitMenuCmd));
|
|
area.add(new KeyAccel(SDLK_ESCAPE, &exitMenuCmd));
|
|
|
|
area.draw();
|
|
screen.addRegionToUpdate(0, 0, screen.getWidth(), screen.getHeight());
|
|
screen.flush();
|
|
|
|
area.run();
|
|
}
|
|
|