diff --git a/include/Engine/Network/Client.h b/include/Engine/Network/Client.h index 025a1259..ce71b1b1 100644 --- a/include/Engine/Network/Client.h +++ b/include/Engine/Network/Client.h @@ -42,6 +42,7 @@ private: void ParseSnapshot(Package& package); void CreateNewPlayer(int i); void IdentifyPacketLoss(); + bool IsConnected(); // UDP logic boost::asio::ip::udp::endpoint m_ReceiverEndpoint; diff --git a/include/Engine/Network/PlayerDefinition.h b/include/Engine/Network/PlayerDefinition.h index b35ff463..dbacda95 100644 --- a/include/Engine/Network/PlayerDefinition.h +++ b/include/Engine/Network/PlayerDefinition.h @@ -3,7 +3,7 @@ #include struct PlayerDefinition { - unsigned int EntityID = -1; + int EntityID = -1; std::string Name = ""; boost::asio::ip::udp::endpoint Endpoint; }; diff --git a/include/Engine/Network/Server.h b/include/Engine/Network/Server.h index fb49e707..65a69bba 100644 --- a/include/Engine/Network/Server.h +++ b/include/Engine/Network/Server.h @@ -50,7 +50,7 @@ private: void ReadFromClients(); void InputLoop(); - + // Network functions int Receive(char* data, size_t length); void Send(Package& package, int playerID); void Send(Package& package); diff --git a/src/Engine/Network/Client.cpp b/src/Engine/Network/Client.cpp index c2c486ab..dd0a02bb 100644 --- a/src/Engine/Network/Client.cpp +++ b/src/Engine/Network/Client.cpp @@ -78,7 +78,9 @@ void Client::ReadFromServer() } std::clock_t currentTime = std::clock(); if (snapshotInterval < (1000 * (currentTime - previousSnapshotMessage) / (double)CLOCKS_PER_SEC)) { - SendSnapshotToServer(); + if (IsConnected()) { + SendSnapshotToServer(); + } previousSnapshotMessage = currentTime; } } @@ -221,7 +223,8 @@ void Client::ParseSnapshot(Package& package) // Not a connected player break; } - // Read position data + if (m_PlayerDefinitions[i].EntityID != -1) { + // Read position data //glm::vec3 playerPos; //playerPos.x = package.PopFrontPrimitive(); //playerPos.y = package.PopFrontPrimitive(); @@ -229,8 +232,7 @@ void Client::ParseSnapshot(Package& package) - // Move player to server position - if (m_PlayerDefinitions[i].EntityID != -1) { + // Move player to server position //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); @@ -293,25 +295,27 @@ void Client::MoveMessageHead(char*& data, size_t& length, size_t stepSize) bool Client::OnInputCommand(const Events::InputCommand & e) { - ComponentWrapper& player = m_World->GetComponent(m_PlayerDefinitions[m_PlayerID].EntityID, "Player"); - if (e.Command == "Forward") { - if (e.Value > 0) { - (bool&)player["Forward"] = true; - } else if (e.Value < 0) { - (bool&)player["Back"] = true; - } else { - (bool&)player["Forward"] = false; - (bool&)player["Back"] = false; + if (m_PlayerID != -1) { + ComponentWrapper& player = m_World->GetComponent(m_PlayerDefinitions[m_PlayerID].EntityID, "Player"); + if (e.Command == "Forward") { + if (e.Value > 0) { + (bool&)player["Forward"] = true; + } else if (e.Value < 0) { + (bool&)player["Back"] = true; + } else { + (bool&)player["Forward"] = false; + (bool&)player["Back"] = false; + } } - } - if (e.Command == "Right") { - if (e.Value > 0) { - (bool&)player["Right"] = true; - } else if (e.Value < 0) { - (bool&)player["Left"] = true; - } else { - (bool&)player["Left"] = false; - (bool&)player["Right"] = false; + if (e.Command == "Right") { + if (e.Value > 0) { + (bool&)player["Right"] = true; + } else if (e.Value < 0) { + (bool&)player["Left"] = true; + } else { + (bool&)player["Left"] = false; + (bool&)player["Right"] = false; + } } } if (e.Command == "Sprint") { // Connect for now @@ -336,3 +340,13 @@ void Client::IdentifyPacketLoss() LOG_INFO("%i Packet(s) were lost...", difference); } } + +bool Client::IsConnected() +{ + if (m_PlayerID != -1) { + if (m_PlayerDefinitions[m_PlayerID].EntityID != -1) { + return true; + } + } + return false; +}