add and respond to exit button, respond to singleplayer button

This commit is contained in:
Josh Holtrop 2012-11-03 17:08:08 -04:00
parent 37054be6be
commit f10bd59226
2 changed files with 58 additions and 6 deletions

View File

@ -97,20 +97,37 @@ void Client::run(bool fullscreen, int width, int height, std::string pname)
run_main_menu(); run_main_menu();
} }
void Client::play_single_player_game_button_clicked()
{
m_menu_action = MAIN_MENU_SINGLE;
}
void Client::exit_button_clicked()
{
m_menu_action = MAIN_MENU_EXIT;
}
void Client::run_main_menu() void Client::run_main_menu()
{ {
m_window->setMouseCursorVisible(true); m_window->setMouseCursorVisible(true);
m_window->resetGLStates(); m_window->resetGLStates();
m_menu_action = MAIN_MENU_NONE;
sfg::SFGUI sfgui; sfg::SFGUI sfgui;
sfg::Box::Ptr box = sfg::Box::Create(sfg::Box::VERTICAL, 10.0f); sfg::Box::Ptr box = sfg::Box::Create(sfg::Box::VERTICAL, 10.0f);
sfg::Button::Ptr btn_singleplayer = sfg::Button::Ptr btn_singleplayer =
sfg::Button::Create("Play Single Player Game"); sfg::Button::Create("Play Single Player Game");
btn_singleplayer->GetSignal(sfg::Widget::OnLeftClick).Connect(
&Client::play_single_player_game_button_clicked, this);
sfg::Button::Ptr btn_hostgame = sfg::Button::Create("Host a Network Game"); sfg::Button::Ptr btn_hostgame = sfg::Button::Create("Host a Network Game");
sfg::Button::Ptr btn_joingame = sfg::Button::Create("Join a Network Game"); sfg::Button::Ptr btn_joingame = sfg::Button::Create("Join a Network Game");
sfg::Button::Ptr btn_exit = sfg::Button::Create("Exit");
btn_exit->GetSignal(sfg::Widget::OnLeftClick).Connect(
&Client::exit_button_clicked, this);
box->Pack(btn_singleplayer); box->Pack(btn_singleplayer);
box->Pack(btn_hostgame); box->Pack(btn_hostgame);
box->Pack(btn_joingame); box->Pack(btn_joingame);
box->Pack(btn_exit);
sfg::Window::Ptr gui_window(sfg::Window::Create(sfg::Window::TITLEBAR | sfg::Window::Ptr gui_window(sfg::Window::Create(sfg::Window::TITLEBAR |
sfg::Window::BACKGROUND)); sfg::Window::BACKGROUND));
gui_window->SetTitle("Treacherous Terrain"); gui_window->SetTitle("Treacherous Terrain");
@ -124,7 +141,7 @@ void Client::run_main_menu()
sf::Event event; sf::Event event;
bool in_menu = true; bool in_menu = true;
while (in_menu) while (in_menu && m_window->isOpen())
{ {
while (m_window->pollEvent(event)) while (m_window->pollEvent(event))
{ {
@ -140,7 +157,7 @@ void Client::run_main_menu()
switch (event.key.code) switch (event.key.code)
{ {
case sf::Keyboard::Escape: case sf::Keyboard::Escape:
in_menu = false; m_menu_action = MAIN_MENU_EXIT;
break; break;
default: default:
break; break;
@ -162,16 +179,36 @@ void Client::run_main_menu()
m_window->clear(); m_window->clear();
sfgui.Display(*m_window); sfgui.Display(*m_window);
m_window->display(); m_window->display();
}
run_client(); if (m_menu_action != MAIN_MENU_NONE)
{
switch (m_menu_action)
{
case MAIN_MENU_SINGLE:
start_server();
run_client();
m_window->resetGLStates();
break;
case MAIN_MENU_EXIT:
in_menu = false;
break;
}
m_menu_action = MAIN_MENU_NONE;
}
}
}
void Client::start_server()
{
/* TODO */
} }
void Client::run_client() void Client::run_client()
{ {
m_window->setMouseCursorVisible(false); m_window->setMouseCursorVisible(false);
double last_time = 0.0; double last_time = 0.0;
while (m_window->isOpen()) bool in_game = true;
while (in_game && m_window->isOpen())
{ {
double current_time = m_clock.getElapsedTime().asSeconds(); double current_time = m_clock.getElapsedTime().asSeconds();
double elapsed_time = current_time - last_time; double elapsed_time = current_time - last_time;
@ -188,7 +225,7 @@ void Client::run_client()
switch (event.key.code) switch (event.key.code)
{ {
case sf::Keyboard::Escape: case sf::Keyboard::Escape:
m_window->close(); in_game = false;
break; break;
case sf::Keyboard::F1: case sf::Keyboard::F1:
grab_mouse(!m_mouse_grabbed); grab_mouse(!m_mouse_grabbed);

View File

@ -17,6 +17,15 @@
#define SHOT_RING_WIDTH 10.0f #define SHOT_RING_WIDTH 10.0f
enum
{
MAIN_MENU_NONE,
MAIN_MENU_SINGLE,
MAIN_MENU_HOST,
MAIN_MENU_JOIN,
MAIN_MENU_EXIT
};
class Client class Client
{ {
public: public:
@ -25,6 +34,7 @@ class Client
void run(bool fullscreen, int width, int height, std::string pname); void run(bool fullscreen, int width, int height, std::string pname);
protected: protected:
void run_main_menu(); void run_main_menu();
void start_server();
void run_client(); void run_client();
void connect(int port, const char *host); void connect(int port, const char *host);
void disconnect(); void disconnect();
@ -45,6 +55,11 @@ class Client
void draw_shot_ring_instance(); void draw_shot_ring_instance();
void create_shot(); void create_shot();
/* GUI callbacks */
void play_single_player_game_button_clicked();
void exit_button_clicked();
int m_menu_action;
bool m_mouse_grabbed; bool m_mouse_grabbed;
double m_player_dir_x; double m_player_dir_x;
double m_player_dir_y; double m_player_dir_y;