Client creates a Shot object when player sends a shot (not drawing it yet)

This commit is contained in:
Josh Holtrop 2012-10-06 21:11:42 -04:00
parent bfc8a6f25b
commit 3237d4e0e6
2 changed files with 25 additions and 14 deletions

View File

@ -296,6 +296,7 @@ void Client::update(double elapsed_time)
// TODO: Clean this up and make it more robust // TODO: Clean this up and make it more robust
if(m_players.size() > 0) if(m_players.size() > 0)
{ {
refptr<Player> player = m_players[m_current_player];
sf::Uint8 w_pressed = KEY_NOT_PRESSED; sf::Uint8 w_pressed = KEY_NOT_PRESSED;
sf::Uint8 a_pressed = KEY_NOT_PRESSED; sf::Uint8 a_pressed = KEY_NOT_PRESSED;
sf::Uint8 s_pressed = KEY_NOT_PRESSED; sf::Uint8 s_pressed = KEY_NOT_PRESSED;
@ -345,15 +346,15 @@ void Client::update(double elapsed_time)
} }
} }
m_player_dir_x = cos(m_players[m_current_player]->direction); m_player_dir_x = cos(player->direction);
m_player_dir_y = sin(m_players[m_current_player]->direction); m_player_dir_y = sin(player->direction);
// Send an update to the server if something has changed // Send an update to the server if something has changed
if((m_players[m_current_player]->w_pressed != w_pressed) || if((player->w_pressed != w_pressed) ||
(m_players[m_current_player]->a_pressed != a_pressed) || (player->a_pressed != a_pressed) ||
(m_players[m_current_player]->s_pressed != s_pressed) || (player->s_pressed != s_pressed) ||
(m_players[m_current_player]->d_pressed != d_pressed) || (player->d_pressed != d_pressed) ||
(m_players[m_current_player]->rel_mouse_movement != rel_mouse_movement)) (player->rel_mouse_movement != rel_mouse_movement))
{ {
sf::Uint8 packet_type = PLAYER_UPDATE; sf::Uint8 packet_type = PLAYER_UPDATE;
client_packet.clear(); client_packet.clear();
@ -367,23 +368,29 @@ void Client::update(double elapsed_time)
m_net_client->sendData(client_packet); m_net_client->sendData(client_packet);
m_players[m_current_player]->w_pressed = w_pressed; player->w_pressed = w_pressed;
m_players[m_current_player]->a_pressed = a_pressed; player->a_pressed = a_pressed;
m_players[m_current_player]->s_pressed = s_pressed; player->s_pressed = s_pressed;
m_players[m_current_player]->d_pressed = d_pressed; player->d_pressed = d_pressed;
m_players[m_current_player]->rel_mouse_movement = rel_mouse_movement; player->rel_mouse_movement = rel_mouse_movement;
} }
if(m_shot_fired) if(m_shot_fired)
{ {
float shot_distance = m_drawing_shot_distance + SHOT_RING_WIDTH / 2.0;
sf::Uint8 packet_type = PLAYER_SHOT; sf::Uint8 packet_type = PLAYER_SHOT;
client_packet.clear(); client_packet.clear();
client_packet << packet_type; client_packet << packet_type;
client_packet << m_current_player; client_packet << m_current_player;
client_packet << (float)(m_drawing_shot_distance + SHOT_RING_WIDTH / 2.0); client_packet << shot_distance;
m_net_client->sendData(client_packet, true); m_net_client->sendData(client_packet, true);
m_drawing_shot_distance = 0; m_drawing_shot_distance = 0;
m_players[m_current_player]->m_shot_allowed = false; player->m_shot_allowed = false;
refptr<Shot> shot = new Shot(
sf::Vector2f(player->x, player->y),
player->direction,
shot_distance);
m_shots.push_back(shot);
} }
} }
else if(!registered_player) else if(!registered_player)

View File

@ -1,10 +1,13 @@
#ifndef CLIENT_H #ifndef CLIENT_H
#define CLIENT_H #define CLIENT_H
#include <map>
#include <list>
#include <SFML/Window.hpp> #include <SFML/Window.hpp>
#include <SFML/Graphics/Texture.hpp> #include <SFML/Graphics/Texture.hpp>
#include "refptr.h" #include "refptr.h"
#include "Map.h" #include "Map.h"
#include "Shot.h"
#include "Player.h" #include "Player.h"
#include "GLProgram.h" #include "GLProgram.h"
#include "WFObj.h" #include "WFObj.h"
@ -71,6 +74,7 @@ class Client
bool m_drawing_shot; bool m_drawing_shot;
float m_drawing_shot_distance; float m_drawing_shot_distance;
bool m_shot_fired; bool m_shot_fired;
std::list< refptr<Shot> > m_shots;
}; };
#endif #endif