In snapshot: now sends player information and also CP information. Now it is no longer true that they will arrive in pre order. Appropriate actions were therefor implemented.
This commit is contained in:
@@ -103,7 +103,6 @@ public:
|
|||||||
void parseComponentDeletion(Packet& packet);
|
void parseComponentDeletion(Packet& packet);
|
||||||
void InterpolateFields(Packet & packet, const ComponentInfo & componentInfo, const EntityID & entityID, const std::string & componentType);
|
void InterpolateFields(Packet & packet, const ComponentInfo & componentInfo, const EntityID & entityID, const std::string & componentType);
|
||||||
void parseSnapshot(Packet& packet);
|
void parseSnapshot(Packet& packet);
|
||||||
void UpdateLocalCapturePointHUD(EntityWrapper capturePointHUD);
|
|
||||||
void identifyPacketLoss();
|
void identifyPacketLoss();
|
||||||
void hasServerTimedOut();
|
void hasServerTimedOut();
|
||||||
EntityID createPlayer();
|
EntityID createPlayer();
|
||||||
|
|||||||
@@ -348,9 +348,7 @@ void Client::parseSnapshot(Packet& packet)
|
|||||||
EntityWrapper localEntity(m_World, localEntityID);
|
EntityWrapper localEntity(m_World, localEntityID);
|
||||||
// Update entity
|
// Update entity
|
||||||
if (m_World->HasComponent(localEntityID, componentType)) {
|
if (m_World->HasComponent(localEntityID, componentType)) {
|
||||||
if (localEntity.Name() == "CapturePointHUD") {
|
|
||||||
UpdateLocalCapturePointHUD(localEntity);
|
|
||||||
}
|
|
||||||
SharedComponentWrapper newComponent = createSharedComponent(packet, localEntityID, componentInfo);
|
SharedComponentWrapper newComponent = createSharedComponent(packet, localEntityID, componentInfo);
|
||||||
bool shouldApply = true;
|
bool shouldApply = true;
|
||||||
// Apply potential filter function
|
// Apply potential filter function
|
||||||
@@ -361,6 +359,7 @@ void Client::parseSnapshot(Packet& packet)
|
|||||||
ComponentWrapper currentComponent = m_World->GetComponent(localEntityID, componentType);
|
ComponentWrapper currentComponent = m_World->GetComponent(localEntityID, componentType);
|
||||||
memcpy(currentComponent.Data, newComponent.Data, componentInfo.Stride);
|
memcpy(currentComponent.Data, newComponent.Data, componentInfo.Stride);
|
||||||
}
|
}
|
||||||
|
|
||||||
//if (localEntity != m_LocalPlayer && !localEntity.IsChildOf(m_LocalPlayer)) {
|
//if (localEntity != m_LocalPlayer && !localEntity.IsChildOf(m_LocalPlayer)) {
|
||||||
// updateFields(packet, componentInfo, localEntityID);
|
// updateFields(packet, componentInfo, localEntityID);
|
||||||
//} else {
|
//} else {
|
||||||
@@ -377,7 +376,11 @@ void Client::parseSnapshot(Packet& packet)
|
|||||||
if (serverParentID == EntityID_Invalid) {
|
if (serverParentID == EntityID_Invalid) {
|
||||||
newLocalEntityID = m_World->CreateEntity(EntityID_Invalid);
|
newLocalEntityID = m_World->CreateEntity(EntityID_Invalid);
|
||||||
} else {
|
} else {
|
||||||
newLocalEntityID = m_World->CreateEntity(m_ServerIDToClientID.at(serverParentID));
|
if (serverClientMapsHasEntity(serverParentID)) {
|
||||||
|
newLocalEntityID = m_World->CreateEntity(m_ServerIDToClientID.at(serverParentID));
|
||||||
|
} else {
|
||||||
|
newLocalEntityID = m_World->CreateEntity(EntityID_Invalid);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
m_World->SetName(newLocalEntityID, serverEntityName);
|
m_World->SetName(newLocalEntityID, serverEntityName);
|
||||||
insertIntoServerClientMaps(serverEntityID, newLocalEntityID);
|
insertIntoServerClientMaps(serverEntityID, newLocalEntityID);
|
||||||
@@ -387,7 +390,7 @@ void Client::parseSnapshot(Packet& packet)
|
|||||||
}
|
}
|
||||||
// Parent logic
|
// Parent logic
|
||||||
// This should be enough beacause we know that the entities arives in pre-order (there will always be a parent)
|
// This should be enough beacause we know that the entities arives in pre-order (there will always be a parent)
|
||||||
if (serverParentID != EntityID_Invalid) {
|
if (serverParentID != EntityID_Invalid && serverClientMapsHasEntity(serverParentID)) {
|
||||||
EntityID localEntityID = m_ServerIDToClientID.at(serverEntityID);
|
EntityID localEntityID = m_ServerIDToClientID.at(serverEntityID);
|
||||||
m_World->SetParent(localEntityID, m_ServerIDToClientID.at(serverParentID));
|
m_World->SetParent(localEntityID, m_ServerIDToClientID.at(serverParentID));
|
||||||
}
|
}
|
||||||
@@ -395,18 +398,6 @@ void Client::parseSnapshot(Packet& packet)
|
|||||||
parseSpawnEvents();
|
parseSpawnEvents();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void Client::UpdateLocalCapturePointHUD(EntityWrapper capturePointHUD)
|
|
||||||
{
|
|
||||||
//auto children = m_World->GetChildren(capturePointHUD.ID);
|
|
||||||
//for (auto it = children.first; it != children.second; it++) {
|
|
||||||
// it->first
|
|
||||||
//}
|
|
||||||
//
|
|
||||||
//EntityWrapper& localHUD = m_LocalPlayer.FirstChildByName("HUD").FirstChildByName("CapturePointHUD");
|
|
||||||
//m_World->GetComponentPools()
|
|
||||||
}
|
|
||||||
|
|
||||||
void Client::disconnect()
|
void Client::disconnect()
|
||||||
{
|
{
|
||||||
m_IsConnected = false;
|
m_IsConnected = false;
|
||||||
|
|||||||
@@ -65,7 +65,7 @@ void Server::Update()
|
|||||||
PlayerDefinition localArea;
|
PlayerDefinition localArea;
|
||||||
localArea.Endpoint = boost::asio::ip::udp::endpoint();
|
localArea.Endpoint = boost::asio::ip::udp::endpoint();
|
||||||
m_ServerlistRequest.Receive(packet, localArea);
|
m_ServerlistRequest.Receive(packet, localArea);
|
||||||
if(packet.GetMessageType() == MessageType::ServerlistRequest) {
|
if (packet.GetMessageType() == MessageType::ServerlistRequest) {
|
||||||
packet.ReadPrimitive<int>(); // Pop size
|
packet.ReadPrimitive<int>(); // Pop size
|
||||||
packet.ReadPrimitive<int>(); // Pop MsgType
|
packet.ReadPrimitive<int>(); // Pop MsgType
|
||||||
packet.ReadPrimitive<int>(); // Pop packet ID
|
packet.ReadPrimitive<int>(); // Pop packet ID
|
||||||
@@ -76,7 +76,7 @@ void Server::Update()
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Check if players have disconnected
|
// Check if players have disconnected
|
||||||
for (int i = 0; i < m_PlayersToDisconnect.size(); i++) {
|
for (int i = 0; i < m_PlayersToDisconnect.size(); i++) {
|
||||||
disconnect(m_PlayersToDisconnect.at(i));
|
disconnect(m_PlayersToDisconnect.at(i));
|
||||||
}
|
}
|
||||||
m_PlayersToDisconnect.clear();
|
m_PlayersToDisconnect.clear();
|
||||||
@@ -136,7 +136,7 @@ void Server::parseMessageType(Packet& packet)
|
|||||||
parseOnPlayerDamage(packet);
|
parseOnPlayerDamage(packet);
|
||||||
break;
|
break;
|
||||||
case MessageType::PlayerTransform:
|
case MessageType::PlayerTransform:
|
||||||
parsePlayerTransform(packet);
|
parsePlayerTransform(packet);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
@@ -191,43 +191,41 @@ void Server::addPlayersToPacket(Packet & packet, EntityID entityID)
|
|||||||
// HACK: Only sync players for now, since the map turned out to be TOO LARGE to send in one snapshot and Simon's computer shits itself
|
// HACK: Only sync players for now, since the map turned out to be TOO LARGE to send in one snapshot and Simon's computer shits itself
|
||||||
// HACK: Also checked CapturePointHUD for now. (this would get out of sync);
|
// HACK: Also checked CapturePointHUD for now. (this would get out of sync);
|
||||||
EntityWrapper childEntity(m_World, childEntityID);
|
EntityWrapper childEntity(m_World, childEntityID);
|
||||||
if (!shouldSendToClient(childEntity)) {
|
if (shouldSendToClient(childEntity)) {
|
||||||
continue;
|
// Write EntityID and parentsID and Entity name
|
||||||
}
|
packet.WritePrimitive(childEntityID);
|
||||||
|
packet.WritePrimitive(entityID);
|
||||||
// Write EntityID and parentsID and Entity name
|
packet.WriteString(m_World->GetName(childEntityID));
|
||||||
packet.WritePrimitive(childEntityID);
|
// Write components to child
|
||||||
packet.WritePrimitive(entityID);
|
int numberOfComponents = 0;
|
||||||
packet.WriteString(m_World->GetName(childEntityID));
|
for (auto& i : worldComponentPools) {
|
||||||
// Write components to child
|
if (i.second->KnowsEntity(childEntityID)) {
|
||||||
int numberOfComponents = 0;
|
numberOfComponents++;
|
||||||
for (auto& i : worldComponentPools) {
|
}
|
||||||
if (i.second->KnowsEntity(childEntityID)) {
|
|
||||||
numberOfComponents++;
|
|
||||||
}
|
}
|
||||||
}
|
// Write how many components should be read
|
||||||
// Write how many components should be read
|
packet.WritePrimitive(numberOfComponents);
|
||||||
packet.WritePrimitive(numberOfComponents);
|
for (auto& i : worldComponentPools) {
|
||||||
for (auto& i : worldComponentPools) {
|
// If the entity exist in the pool
|
||||||
// If the entity exist in the pool
|
if (i.second->KnowsEntity(childEntityID)) {
|
||||||
if (i.second->KnowsEntity(childEntityID)) {
|
ComponentWrapper componentWrapper = i.second->GetByEntity(childEntityID);
|
||||||
ComponentWrapper componentWrapper = i.second->GetByEntity(childEntityID);
|
// ComponentType
|
||||||
// ComponentType
|
packet.WriteString(componentWrapper.Info.Name);
|
||||||
packet.WriteString(componentWrapper.Info.Name);
|
// Loop through fields
|
||||||
// Loop through fields
|
for (auto& componentField : componentWrapper.Info.FieldsInOrder) {
|
||||||
for (auto& componentField : componentWrapper.Info.FieldsInOrder) {
|
ComponentInfo::Field_t fieldInfo = componentWrapper.Info.Fields.at(componentField);
|
||||||
ComponentInfo::Field_t fieldInfo = componentWrapper.Info.Fields.at(componentField);
|
if (fieldInfo.Type == "string") {
|
||||||
if (fieldInfo.Type == "string") {
|
std::string& value = componentWrapper[componentField];
|
||||||
std::string& value = componentWrapper[componentField];
|
packet.WriteString(value);
|
||||||
packet.WriteString(value);
|
} else {
|
||||||
} else {
|
packet.WriteData(componentWrapper.Data + fieldInfo.Offset, fieldInfo.Stride);
|
||||||
packet.WriteData(componentWrapper.Data + fieldInfo.Offset, fieldInfo.Stride);
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Go to to your children
|
// Go to to your children
|
||||||
addChildrenToPacket(packet, childEntityID);
|
addPlayersToPacket(packet, childEntityID);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -343,7 +341,7 @@ void Server::parseTCPConnect(Packet & packet)
|
|||||||
// Read packet ID
|
// Read packet ID
|
||||||
m_PreviousPacketID = m_PacketID; // Set previous packet id
|
m_PreviousPacketID = m_PacketID; // Set previous packet id
|
||||||
m_PacketID = packet.ReadPrimitive<int>(); //Read new packet id
|
m_PacketID = packet.ReadPrimitive<int>(); //Read new packet id
|
||||||
|
|
||||||
LOG_INFO("Parsing connections");
|
LOG_INFO("Parsing connections");
|
||||||
// Check if player is already connected
|
// Check if player is already connected
|
||||||
// Ska vara till lagd i TCPServer receive
|
// Ska vara till lagd i TCPServer receive
|
||||||
@@ -455,8 +453,7 @@ bool Server::OnInputCommand(const Events::InputCommand & e)
|
|||||||
}
|
}
|
||||||
isReadingData = !isReadingData;
|
isReadingData = !isReadingData;
|
||||||
m_SaveDataTimer = std::clock();
|
m_SaveDataTimer = std::clock();
|
||||||
}
|
} else if (e.Command == "KickPlayer" && e.Value > 0) {
|
||||||
else if (e.Command == "KickPlayer" && e.Value > 0) {
|
|
||||||
kick(0);
|
kick(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -595,8 +592,15 @@ void Server::parsePlayerTransform(Packet& packet)
|
|||||||
|
|
||||||
bool Server::shouldSendToClient(EntityWrapper childEntity)
|
bool Server::shouldSendToClient(EntityWrapper childEntity)
|
||||||
{
|
{
|
||||||
|
auto children = m_World->GetChildren(childEntity.ID);
|
||||||
|
for (auto it = children.first; it != children.second; it++) {
|
||||||
|
EntityWrapper child(m_World, it->second);
|
||||||
|
if(child.HasComponent("CapturePoint")) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
return childEntity.HasComponent("Player") || childEntity.FirstParentWithComponent("Player").Valid()
|
return childEntity.HasComponent("Player") || childEntity.FirstParentWithComponent("Player").Valid()
|
||||||
|| childEntity.HasComponent("CapturePoint") || childEntity.FirstParentWithComponent("CapturePoint").Valid();
|
|| childEntity.HasComponent("CapturePoint");
|
||||||
}
|
}
|
||||||
|
|
||||||
PlayerID Server::GetPlayerIDFromEndpoint()
|
PlayerID Server::GetPlayerIDFromEndpoint()
|
||||||
|
|||||||
Reference in New Issue
Block a user