diff --git a/include/Engine/Network/Package.h b/include/Engine/Network/Package.h index a7b3c126..9b45101d 100644 --- a/include/Engine/Network/Package.h +++ b/include/Engine/Network/Package.h @@ -14,6 +14,7 @@ public: Package(MessageType type, unsigned int& packageID); // Used to create package from already existing data buffer. Package(char* data, const int sizeOfPackage); + ~Package(); // Add primitive types like int, float, char... template @@ -35,9 +36,13 @@ public: m_ReturnDataOffset += sizeof(T); return returnValue; } + // Add a string to the message void AddString(std::string str); + // Add data to the message + void AddData(char* data, int sizeOfData); // Pops the first element as if it was a string. std::string PopFrontString(); + char* PopData(int SizeOfData); int Size() { return m_Offset; }; char* Data() { return m_Data; }; diff --git a/src/Engine/Network/Client.cpp b/src/Engine/Network/Client.cpp index 52037577..3acc967f 100644 --- a/src/Engine/Network/Client.cpp +++ b/src/Engine/Network/Client.cpp @@ -5,7 +5,7 @@ using namespace boost::asio::ip; Client::Client() : m_Socket(m_IOService) { - m_ReceiverEndpoint = udp::endpoint(boost::asio::ip::address::from_string("192.168.1.6"), 13); + m_ReceiverEndpoint = udp::endpoint(boost::asio::ip::address::from_string("192.168.1.2"), 13); // Set up network stream m_NextSnapshot.InputForward = ""; m_NextSnapshot.InputRight = ""; @@ -225,12 +225,17 @@ void Client::ParseSnapshot(Package& package) } if (m_PlayerDefinitions[i].EntityID != -1) { // Read position data - glm::vec3 playerPos; - playerPos.x = package.PopFrontPrimitive(); - playerPos.y = package.PopFrontPrimitive(); - playerPos.z = package.PopFrontPrimitive(); + //glm::vec3 playerPos; + //playerPos.x = package.PopFrontPrimitive(); + //playerPos.y = package.PopFrontPrimitive(); + //playerPos.z = package.PopFrontPrimitive(); + + + // Move player to server position - m_World->GetComponent(m_PlayerDefinitions[i].EntityID, "Transform")["Position"] = playerPos; + //m_World->GetComponent(m_PlayerDefinitions[i].EntityID, "Transform")["Position"] = playerPos; + int dataSize = m_World->GetComponent(m_PlayerDefinitions[i].EntityID, "Transform").Info.Meta.Stride; + memcpy(m_World->GetComponent(m_PlayerDefinitions[i].EntityID, "Transform").Data, package.PopData(dataSize), dataSize); } } } diff --git a/src/Engine/Network/Package.cpp b/src/Engine/Network/Package.cpp index a30d3ee5..43c28837 100644 --- a/src/Engine/Network/Package.cpp +++ b/src/Engine/Network/Package.cpp @@ -33,6 +33,15 @@ void Package::AddString(std::string str) m_Offset += (str.size() + 1) * sizeof(char); } +void Package::AddData(char * data, int sizeOfData) +{ + if (m_Offset + sizeOfData > 128) { + LOG_WARNING("Package::AddData(): Data size in package exceeded maximum package size.\n"); + } + memcpy(m_Data + m_Offset, data, sizeOfData); + m_Offset += sizeOfData; +} + std::string Package::PopFrontString() { std::string returnValue(m_Data + m_ReturnDataOffset); @@ -44,3 +53,10 @@ std::string Package::PopFrontString() m_ReturnDataOffset += returnValue.size() + 1; return returnValue; } + +char * Package::PopData(int SizeOfData) +{ + unsigned int oldReturnDataOffset = m_ReturnDataOffset; + m_ReturnDataOffset += SizeOfData; + return (m_Data + oldReturnDataOffset); +} diff --git a/src/Engine/Network/Server.cpp b/src/Engine/Network/Server.cpp index 3d9d171a..d1d0c4c7 100644 --- a/src/Engine/Network/Server.cpp +++ b/src/Engine/Network/Server.cpp @@ -229,13 +229,14 @@ void Server::SendSnapshot() continue; } - - // Pack player pos into data package - glm::vec3 playerPos = m_World->GetComponent(m_PlayerDefinitions[i].EntityID, "Transform")["Position"]; - //glm::vec3 playerPos = glm::vec3(1.0f); - package.AddPrimitive(playerPos.x); - package.AddPrimitive(playerPos.y); - package.AddPrimitive(playerPos.z); + //// Pack player pos into data package + //glm::vec3 playerPos = m_World->GetComponent(m_PlayerDefinitions[i].EntityID, "Transform")["Position"]; + ////glm::vec3 playerPos = glm::vec3(1.0f); + //package.AddPrimitive(playerPos.x); + //package.AddPrimitive(playerPos.y); + //package.AddPrimitive(playerPos.z); + auto transform = m_World->GetComponent(m_PlayerDefinitions[i].EntityID, "Transform"); + package.AddData(transform.Data, transform.Info.Meta.Stride); } Broadcast(package); }