[Client] Handles disconnection correctly now.
This commit is contained in:
parent
88f3fc1475
commit
884562cb36
@ -32,7 +32,7 @@ class Client;
|
||||
|
||||
class PauseMenuState : public InterfaceState {
|
||||
public:
|
||||
PauseMenuState(gk::ApplicationState *parent = nullptr);
|
||||
PauseMenuState(Client &client, gk::ApplicationState *parent = nullptr);
|
||||
|
||||
void onEvent(const SDL_Event &event) override;
|
||||
|
||||
@ -42,6 +42,8 @@ class PauseMenuState : public InterfaceState {
|
||||
void draw(gk::RenderTarget &target, gk::RenderStates states) const override;
|
||||
|
||||
MenuWidget m_menuWidget{1, 4};
|
||||
|
||||
Client &m_client;
|
||||
};
|
||||
|
||||
#endif // PAUSEMENUSTATE_HPP_
|
||||
|
@ -64,6 +64,8 @@ void Client::disconnect() {
|
||||
sf::Packet packet;
|
||||
packet << Network::Command::ClientDisconnect;
|
||||
m_tcpSocket->send(packet);
|
||||
|
||||
m_tcpSocket->disconnect();
|
||||
}
|
||||
|
||||
void Client::send(sf::Packet &packet) {
|
||||
|
@ -68,6 +68,9 @@ GameState::GameState(const std::string &host, int port) {
|
||||
}
|
||||
|
||||
void GameState::onEvent(const SDL_Event &event) {
|
||||
if (event.type == SDL_QUIT)
|
||||
m_client.disconnect();
|
||||
|
||||
if (&m_stateStack->top() == this) {
|
||||
gk::KeyboardHandler *keyboardHandler = (gk::KeyboardHandler *)gk::GamePad::getInputHandler();
|
||||
|
||||
@ -80,7 +83,7 @@ void GameState::onEvent(const SDL_Event &event) {
|
||||
}
|
||||
}
|
||||
else if (event.type == SDL_KEYDOWN && event.key.keysym.sym == SDLK_ESCAPE) {
|
||||
m_stateStack->push<PauseMenuState>(this);
|
||||
m_stateStack->push<PauseMenuState>(m_client, this);
|
||||
}
|
||||
else if (event.type == SDL_KEYDOWN && event.key.keysym.sym == keyboardHandler->getKeyCode(GameKey::Chat)) {
|
||||
m_stateStack->push<ChatState>(m_clientCommandHandler, m_hud.chat(), this);
|
||||
@ -88,7 +91,7 @@ void GameState::onEvent(const SDL_Event &event) {
|
||||
else if (event.type == SDL_WINDOWEVENT) {
|
||||
if (event.window.event == SDL_WINDOWEVENT_FOCUS_LOST) {
|
||||
// FIXME
|
||||
// m_stateStack->push<PauseMenuState>(this);
|
||||
// m_stateStack->push<PauseMenuState>(m_client, this);
|
||||
|
||||
gk::Mouse::setCursorGrabbed(false);
|
||||
gk::Mouse::setCursorVisible(true);
|
||||
|
@ -31,8 +31,8 @@
|
||||
#include "SettingsMenuState.hpp"
|
||||
#include "TitleScreenState.hpp"
|
||||
|
||||
PauseMenuState::PauseMenuState(gk::ApplicationState *parent)
|
||||
: InterfaceState(parent)
|
||||
PauseMenuState::PauseMenuState(Client &client, gk::ApplicationState *parent)
|
||||
: InterfaceState(parent), m_client(client)
|
||||
{
|
||||
gk::Mouse::setCursorGrabbed(false);
|
||||
gk::Mouse::setCursorVisible(true);
|
||||
@ -52,14 +52,14 @@ PauseMenuState::PauseMenuState(gk::ApplicationState *parent)
|
||||
});
|
||||
|
||||
m_menuWidget.addButton("Title Screen", [this] (TextButton &) {
|
||||
// m_client.disconnect();
|
||||
m_client.disconnect();
|
||||
|
||||
m_stateStack->clear();
|
||||
m_stateStack->push<TitleScreenState>();
|
||||
});
|
||||
|
||||
m_menuWidget.addButton("Exit", [this] (TextButton &) {
|
||||
// m_client.disconnect();
|
||||
m_client.disconnect();
|
||||
|
||||
while(!m_stateStack->empty())
|
||||
m_stateStack->pop();
|
||||
|
Loading…
x
Reference in New Issue
Block a user