#include #include "game.h" #include "network/game_state_message.h" #include "network/socket.h" #include "network/message.h" Player* Game::add_player(BettolaLib::Network::Socket* socket) { _players.emplace_back(socket); return &_players.back(); } void Game::remove_player(unsigned int player_id) { _players.erase( std::remove_if(_players.begin(), _players.end(), [player_id](const Player& player) { /* this is a sh.t way to compare players. */ return player.get_id() == player_id; }), _players.end()); } void Game::update_player_pos(unsigned int player_id, float x, float y) { auto it = std::find_if(_players.begin(), _players.end(), [player_id](const Player& player) { return player.get_id() == player_id; }); if(it != _players.end()) { it->set_position(x, y); } } void Game::broadcast_game_state(void) { BettolaLib::Network::GameStateMessage msg; msg.num_players = _players.size(); for(size_t i = 0; i < _players.size(); ++i) { msg.players[i].player_id = _players[i].get_id(); msg.players[i].x = _players[i].get_x(); msg.players[i].y = _players[i].get_y(); } BettolaLib::Network::MessageHeader header; header.type = BettolaLib::Network::MessageType::GameState; header.size = sizeof(msg); for(const auto& player : _players) { BettolaLib::Network::Socket& socket = player.get_socket(); socket.send(&header, sizeof(header)); socket.send(&msg, sizeof(msg)); } }