Files
Tower-Defense2/src/client/PlayerManager.cpp
2025-08-22 11:41:58 +02:00

45 lines
1.3 KiB
C++

#include <client/PlayerManager.h>
#include <client/IClientSocket.h>
#include <iostream>
namespace td {
namespace client {
PlayerManager::PlayerManager(const std::shared_ptr<IClientSocket>& a_Socket) : m_Socket(a_Socket) {
a_Socket->OnReceive.Connect(std::bind(&PlayerManager::HandleBase, this, std::placeholders::_1));
OnPlayerJoin.Connect([this](const PlayerInfo& a_Player){
std::cout << "[Client " << this << "] " << a_Player.m_PlayerName << " joined !\n";
});
OnPlayerLeave.Connect([this](const PlayerID a_Player){
std::cout << "[Client " << this << "] " << GetPlayer(a_Player).m_PlayerName << "(" << +a_Player << ") left !\n";
});
}
PlayerManager::~PlayerManager() {}
PlayerInfo PlayerManager::GetPlayer(PlayerID a_Player) {
return m_Players.at(a_Player);
}
void PlayerManager::Handle(const protocol::packets::PlayerJoinPacket& a_Packet) {
m_Players.emplace(a_Packet->m_Player.m_PlayerId, a_Packet->m_Player);
OnPlayerJoin(a_Packet->m_Player);
}
void PlayerManager::Handle(const protocol::packets::PlayerListPacket& a_Packet) {
for (auto pInfo : a_Packet->m_Players) {
m_Players.emplace(pInfo.m_PlayerId, pInfo);
OnPlayerJoin(pInfo);
}
}
void PlayerManager::Handle(const protocol::packets::PlayerLeavePacket& a_Packet) {
OnPlayerLeave(a_Packet->m_PlayerId);
m_Players.erase(a_Packet->m_PlayerId);
}
} // namespace client
} // namespace td