EPlayerSpawned special logic added to server and client.
This commit is contained in:
@@ -20,6 +20,7 @@
|
||||
#include "Input/EInputCommand.h"
|
||||
#include "Core/EPlayerDamage.h"
|
||||
#include "Network/EInterpolate.h"
|
||||
#include "Game/Events/EPlayerSpawned.h"
|
||||
|
||||
class Client : public Network
|
||||
{
|
||||
@@ -77,6 +78,7 @@ private:
|
||||
void parsePlayerConnected(Packet& packet);
|
||||
void parsePing();
|
||||
void parseKick();
|
||||
void parsePlayersSpawned(Packet& packet);
|
||||
void InterpolateFields(Packet & packet, const ComponentInfo & componentInfo, const EntityID & entityID, const std::string & componentType);
|
||||
void parseSnapshot(Packet& packet);
|
||||
void identifyPacketLoss();
|
||||
|
||||
@@ -5,16 +5,17 @@
|
||||
// Used to determine what type of message was sent.
|
||||
enum class MessageType
|
||||
{
|
||||
Connect,
|
||||
Disconnect,
|
||||
Ping,
|
||||
Message,
|
||||
Snapshot,
|
||||
Connect,
|
||||
Disconnect,
|
||||
Ping,
|
||||
Message,
|
||||
Snapshot,
|
||||
OnInputCommand,
|
||||
OnPlayerDamage,
|
||||
PlayerConnected,
|
||||
BecomePlayer,
|
||||
Kick
|
||||
Kick,
|
||||
OnPlayerSpawned
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -16,6 +16,8 @@
|
||||
#include "Core/EPlayerDamage.h"
|
||||
#include "Network/EPlayerDisconnected.h"
|
||||
|
||||
#include "Game/Events/EPlayerSpawned.h"
|
||||
|
||||
class Server : public Network
|
||||
{
|
||||
public:
|
||||
@@ -58,6 +60,7 @@ private:
|
||||
int receive(char* data);
|
||||
void readFromClients();
|
||||
void send(Packet& packet, UserID user);
|
||||
void send(Packet& packet, PlayerID player);
|
||||
void send(Packet& packet);
|
||||
void broadcast(Packet& packet);
|
||||
void sendSnapshot();
|
||||
@@ -78,6 +81,8 @@ private:
|
||||
// Debug event
|
||||
EventRelay<Server, Events::InputCommand> m_EInputCommand;
|
||||
bool OnInputCommand(const Events::InputCommand& e);
|
||||
EventRelay<Server, Events::PlayerSpawned> m_EPlayerSpawned;
|
||||
bool OnPlayerSpawned(const Events::PlayerSpawned& e);
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -92,6 +92,9 @@ void Client::parseMessageType(Packet& packet)
|
||||
case MessageType::Kick:
|
||||
parseKick();
|
||||
break;
|
||||
case MessageType::OnPlayerSpawned:
|
||||
parsePlayersSpawned();
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
@@ -129,6 +132,15 @@ void Client::parseKick()
|
||||
m_IsConnected = false;
|
||||
}
|
||||
|
||||
void Client::parsePlayersSpawned(Packet& packet)
|
||||
{
|
||||
Events::PlayerSpawned e;
|
||||
e.Player = EntityWrapper(m_World, m_ServerIDToClientID[packet.ReadPrimitive<EntityID>()]);
|
||||
e.Spawner = EntityWrapper(m_World, m_ServerIDToClientID[packet.ReadPrimitive<EntityID>()]);
|
||||
e.PlayerID = -1;
|
||||
m_EventBroker->Publish(e);
|
||||
}
|
||||
|
||||
// Fields with strings will not work right now
|
||||
void Client::InterpolateFields(Packet& packet, const ComponentInfo& componentInfo, const EntityID& entityID, const std::string& componentType)
|
||||
{
|
||||
|
||||
@@ -132,6 +132,20 @@ void Server::send(Packet& packet, UserID user)
|
||||
}
|
||||
}
|
||||
|
||||
void Server::send(Packet& packet, PlayerID player)
|
||||
{
|
||||
int bytesSent = m_Socket.send_to(
|
||||
boost::asio::buffer(packet.Data(), packet.Size()),
|
||||
m_PlayerDefinitions[player].Endpoint,
|
||||
0);
|
||||
// Network Debug data
|
||||
if (isReadingData) {
|
||||
m_NetworkData.TotalDataSent += packet.Size();
|
||||
m_NetworkData.DataSentThisInterval += packet.Size();
|
||||
m_NetworkData.AmountOfMessagesSent++;
|
||||
}
|
||||
}
|
||||
|
||||
void Server::send(Packet & packet)
|
||||
{
|
||||
m_Socket.send_to(
|
||||
@@ -422,3 +436,12 @@ bool Server::OnInputCommand(const Events::InputCommand & e)
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool Server::OnPlayerSpawned(const Events::PlayerSpawned & e)
|
||||
{
|
||||
Packet packet = Packet(MessageType::OnPlayerSpawned);
|
||||
packet.WritePrimitive<EntityID>(e.Player.ID);
|
||||
packet.WritePrimitive<EntityID>(e.Spawner.ID);
|
||||
send(packet, e.PlayerID);
|
||||
return false;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user