From b6c66c4955212dade2465e7f529e5572616214c5 Mon Sep 17 00:00:00 2001 From: xethm55 Date: Fri, 12 Oct 2012 19:57:56 -0400 Subject: [PATCH] Implemented Player deaths --- src/client/Client-gl.cc | 10 +++++- src/client/Client.cc | 8 +++++ src/common/Player.cc | 2 +- src/common/Player.h | 1 + src/server/Server.cc | 78 ++++++++++++++++++++++++----------------- 5 files changed, 64 insertions(+), 35 deletions(-) diff --git a/src/client/Client-gl.cc b/src/client/Client-gl.cc index dff1c77..a27ab54 100644 --- a/src/client/Client-gl.cc +++ b/src/client/Client-gl.cc @@ -331,7 +331,15 @@ void Client::draw_player(refptr player) m_modelview.push(); m_modelview.translate(player->x, player->y, 4); m_modelview.rotate(player->direction * 180.0 / M_PI, 0, 0, 1); - m_modelview.scale(2, 2, 2); + // If player is dead, make the model smaller + if(player->m_is_dead) + { + m_modelview.scale(1, 1, 1); + } + else + { + m_modelview.scale(2, 2, 2); + } m_tank_obj.bindBuffers(); glEnableVertexAttribArray(0); glEnableVertexAttribArray(1); diff --git a/src/client/Client.cc b/src/client/Client.cc index a25b5a1..1bc2cce 100644 --- a/src/client/Client.cc +++ b/src/client/Client.cc @@ -256,6 +256,14 @@ void Client::update(double elapsed_time) case PLAYER_DEATH: { // This will set a death flag in the player struct. + sf::Uint8 player_index; + // This completely removes the player from the game + // Deletes member from the player list + client_packet >> player_index; + if(m_players.end() != m_players.find(player_index)) + { + m_players[player_index]->m_is_dead = true; + } break; } diff --git a/src/common/Player.cc b/src/common/Player.cc index 13ecef9..61671ab 100644 --- a/src/common/Player.cc +++ b/src/common/Player.cc @@ -17,5 +17,5 @@ Player::Player() m_client = NULL; m_shot = NULL; m_shot_allowed = true; - + m_is_dead = false; } diff --git a/src/common/Player.h b/src/common/Player.h index 076e088..7489e1b 100644 --- a/src/common/Player.h +++ b/src/common/Player.h @@ -25,6 +25,7 @@ class Player Client_t* m_client; bool m_shot_allowed; refptr m_shot; + bool m_is_dead; Player(); }; diff --git a/src/server/Server.cc b/src/server/Server.cc index 8a67ce7..905eb9c 100644 --- a/src/server/Server.cc +++ b/src/server/Server.cc @@ -207,10 +207,18 @@ void Server::update( double elapsed_time ) m_players[pindex]->hover -= elapsed_time / 10; if (m_players[pindex]->hover < 0) { - m_players[pindex]->hover = 0; + sf::Uint8 ptype = PLAYER_DEATH; + m_players[pindex]->hover = 0; + // Player is now dead. + m_players[pindex]->m_is_dead = true; + server_packet.clear(); + server_packet << ptype; + server_packet << pindex; + m_net_server->sendData(server_packet, true); } m_players[pindex]->updated = true; } + if(!(m_players[pindex]->m_shot.isNull())) { // Calculate the distance the projectile travelled so far @@ -246,40 +254,44 @@ void Server::update( double elapsed_time ) } } - if (KEY_PRESSED == m_players[pindex]->a_pressed) + // If player is not dead, allow them to move. + if(!m_players[pindex]->m_is_dead) { - double direction = m_players[pindex]->direction + M_PI_2; - m_players[pindex]->x += cos(direction) * move_speed * elapsed_time; - m_players[pindex]->y += sin(direction) * move_speed * elapsed_time; - m_players[pindex]->updated = true; + if (KEY_PRESSED == m_players[pindex]->a_pressed) + { + double direction = m_players[pindex]->direction + M_PI_2; + m_players[pindex]->x += cos(direction) * move_speed * elapsed_time; + m_players[pindex]->y += sin(direction) * move_speed * elapsed_time; + m_players[pindex]->updated = true; + } + if (KEY_PRESSED == m_players[pindex]->d_pressed) + { + double direction = m_players[pindex]->direction - M_PI_2; + m_players[pindex]->x += cos(direction) * move_speed * elapsed_time; + m_players[pindex]->y += sin(direction) * move_speed * elapsed_time; + m_players[pindex]->updated = true; + } + if (KEY_PRESSED == m_players[pindex]->w_pressed) + { + double direction = m_players[pindex]->direction; + m_players[pindex]->x += cos(direction) * move_speed * elapsed_time; + m_players[pindex]->y += sin(direction) * move_speed * elapsed_time; + m_players[pindex]->updated = true; + } + if (KEY_PRESSED == m_players[pindex]->s_pressed) + { + double direction = m_players[pindex]->direction + M_PI; + m_players[pindex]->x += cos(direction) * move_speed * elapsed_time; + m_players[pindex]->y += sin(direction) * move_speed * elapsed_time; + m_players[pindex]->updated = true; + } + if(0 != m_players[pindex]->rel_mouse_movement) + { + m_players[pindex]->direction -= M_PI * 0.5 * m_players[pindex]->rel_mouse_movement / 1000; + m_players[pindex]->updated = true; + } } - if (KEY_PRESSED == m_players[pindex]->d_pressed) - { - double direction = m_players[pindex]->direction - M_PI_2; - m_players[pindex]->x += cos(direction) * move_speed * elapsed_time; - m_players[pindex]->y += sin(direction) * move_speed * elapsed_time; - m_players[pindex]->updated = true; - } - if (KEY_PRESSED == m_players[pindex]->w_pressed) - { - double direction = m_players[pindex]->direction; - m_players[pindex]->x += cos(direction) * move_speed * elapsed_time; - m_players[pindex]->y += sin(direction) * move_speed * elapsed_time; - m_players[pindex]->updated = true; - } - if (KEY_PRESSED == m_players[pindex]->s_pressed) - { - double direction = m_players[pindex]->direction + M_PI; - m_players[pindex]->x += cos(direction) * move_speed * elapsed_time; - m_players[pindex]->y += sin(direction) * move_speed * elapsed_time; - m_players[pindex]->updated = true; - } - if(0 != m_players[pindex]->rel_mouse_movement) - { - m_players[pindex]->direction -= M_PI * 0.5 * m_players[pindex]->rel_mouse_movement / 1000; - m_players[pindex]->updated = true; - } - + server_packet.clear(); // Send the player update if there were changes