From 57fe48887d36921b103481590248a52c56b71aaa Mon Sep 17 00:00:00 2001 From: xethm55 Date: Sun, 23 Sep 2012 10:39:42 -0400 Subject: [PATCH] Fixed the network lag/swamped bug --- src/client/Client.cc | 39 ++++++++++++++++++++------------------- src/server/Server.cc | 3 ++- 2 files changed, 22 insertions(+), 20 deletions(-) diff --git a/src/client/Client.cc b/src/client/Client.cc index a3e9a6e..cfa4e73 100644 --- a/src/client/Client.cc +++ b/src/client/Client.cc @@ -85,7 +85,8 @@ void Client::update(double elapsed_time) m_net_client->Receive(); client_packet.clear(); - if(m_net_client->getData(client_packet)) + // Handle all received data (only really want the latest) + while(m_net_client->getData(client_packet)) { // Update player position as calculated from the server. client_packet >> m_player->direction; @@ -103,29 +104,29 @@ void Client::update(double elapsed_time) sf::Uint8 s_pressed = KEY_NOT_PRESSED; sf::Uint8 d_pressed = KEY_NOT_PRESSED; sf::Int32 rel_mouse_movement = 0; - if (sf::Keyboard::isKeyPressed(sf::Keyboard::A)) - { - a_pressed = KEY_PRESSED; - } - if (sf::Keyboard::isKeyPressed(sf::Keyboard::D)) - { - d_pressed = KEY_PRESSED; - } - if (sf::Keyboard::isKeyPressed(sf::Keyboard::W)) - { - w_pressed = KEY_PRESSED; - } - if (sf::Keyboard::isKeyPressed(sf::Keyboard::S)) - { - s_pressed = KEY_PRESSED; - } - rel_mouse_movement = sf::Mouse::getPosition(*m_window).x - m_width / 2; - // This is a fix so that the mouse will not move outside the window and + // This is a fix so that the mouse will not move outside the window and // cause the user to click on another program. // Note: Does not work well with fast movement. if(client_has_focus) { + if (sf::Keyboard::isKeyPressed(sf::Keyboard::A)) + { + a_pressed = KEY_PRESSED; + } + if (sf::Keyboard::isKeyPressed(sf::Keyboard::D)) + { + d_pressed = KEY_PRESSED; + } + if (sf::Keyboard::isKeyPressed(sf::Keyboard::W)) + { + w_pressed = KEY_PRESSED; + } + if (sf::Keyboard::isKeyPressed(sf::Keyboard::S)) + { + s_pressed = KEY_PRESSED; + } + rel_mouse_movement = sf::Mouse::getPosition(*m_window).x - m_width / 2; sf::Mouse::setPosition(sf::Vector2i(m_width / 2, m_height / 2), *m_window); } diff --git a/src/server/Server.cc b/src/server/Server.cc index 8950fcf..5aa4323 100644 --- a/src/server/Server.cc +++ b/src/server/Server.cc @@ -47,7 +47,8 @@ void Server::update( double elapsed_time ) static sf::Int32 rel_mouse_movement = 0; m_net_server->Receive(); - if(m_net_server->getData(server_packet)) + // Handle all received data (only really want the latest) + while(m_net_server->getData(server_packet)) { server_packet >> w_pressed; server_packet >> a_pressed;