Implemented Player deaths

This commit is contained in:
xethm55 2012-10-12 19:57:56 -04:00
parent 7dd1b1f66f
commit b6c66c4955
5 changed files with 64 additions and 35 deletions

View File

@ -331,7 +331,15 @@ void Client::draw_player(refptr<Player> player)
m_modelview.push(); m_modelview.push();
m_modelview.translate(player->x, player->y, 4); m_modelview.translate(player->x, player->y, 4);
m_modelview.rotate(player->direction * 180.0 / M_PI, 0, 0, 1); 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(); m_tank_obj.bindBuffers();
glEnableVertexAttribArray(0); glEnableVertexAttribArray(0);
glEnableVertexAttribArray(1); glEnableVertexAttribArray(1);

View File

@ -256,6 +256,14 @@ void Client::update(double elapsed_time)
case PLAYER_DEATH: case PLAYER_DEATH:
{ {
// This will set a death flag in the player struct. // 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; break;
} }

View File

@ -17,5 +17,5 @@ Player::Player()
m_client = NULL; m_client = NULL;
m_shot = NULL; m_shot = NULL;
m_shot_allowed = true; m_shot_allowed = true;
m_is_dead = false;
} }

View File

@ -25,6 +25,7 @@ class Player
Client_t* m_client; Client_t* m_client;
bool m_shot_allowed; bool m_shot_allowed;
refptr<Shot> m_shot; refptr<Shot> m_shot;
bool m_is_dead;
Player(); Player();
}; };

View File

@ -207,10 +207,18 @@ void Server::update( double elapsed_time )
m_players[pindex]->hover -= elapsed_time / 10; m_players[pindex]->hover -= elapsed_time / 10;
if (m_players[pindex]->hover < 0) 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; m_players[pindex]->updated = true;
} }
if(!(m_players[pindex]->m_shot.isNull())) if(!(m_players[pindex]->m_shot.isNull()))
{ {
// Calculate the distance the projectile travelled so far // 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; if (KEY_PRESSED == m_players[pindex]->a_pressed)
m_players[pindex]->x += cos(direction) * move_speed * elapsed_time; {
m_players[pindex]->y += sin(direction) * move_speed * elapsed_time; double direction = m_players[pindex]->direction + M_PI_2;
m_players[pindex]->updated = true; 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(); server_packet.clear();
// Send the player update if there were changes // Send the player update if there were changes