Merge remote-tracking branch 'origin/Networking' into Networking

# Conflicts:
#	include/Engine/Network/Client.h
#	src/Engine/Network/Client.cpp
This commit is contained in:
stiffly
2015-12-17 11:24:34 +01:00
4 changed files with 39 additions and 24 deletions
+1
View File
@@ -42,6 +42,7 @@ private:
void ParseSnapshot(Package& package); void ParseSnapshot(Package& package);
void CreateNewPlayer(int i); void CreateNewPlayer(int i);
void IdentifyPacketLoss(); void IdentifyPacketLoss();
bool IsConnected();
// UDP logic // UDP logic
boost::asio::ip::udp::endpoint m_ReceiverEndpoint; boost::asio::ip::udp::endpoint m_ReceiverEndpoint;
+1 -1
View File
@@ -3,7 +3,7 @@
#include <string> #include <string>
struct PlayerDefinition { struct PlayerDefinition {
unsigned int EntityID = -1; int EntityID = -1;
std::string Name = ""; std::string Name = "";
boost::asio::ip::udp::endpoint Endpoint; boost::asio::ip::udp::endpoint Endpoint;
}; };
+1 -1
View File
@@ -50,7 +50,7 @@ private:
void ReadFromClients(); void ReadFromClients();
void InputLoop(); void InputLoop();
// Network functions
int Receive(char* data, size_t length); int Receive(char* data, size_t length);
void Send(Package& package, int playerID); void Send(Package& package, int playerID);
void Send(Package& package); void Send(Package& package);
+36 -22
View File
@@ -78,7 +78,9 @@ void Client::ReadFromServer()
} }
std::clock_t currentTime = std::clock(); std::clock_t currentTime = std::clock();
if (snapshotInterval < (1000 * (currentTime - previousSnapshotMessage) / (double)CLOCKS_PER_SEC)) { if (snapshotInterval < (1000 * (currentTime - previousSnapshotMessage) / (double)CLOCKS_PER_SEC)) {
SendSnapshotToServer(); if (IsConnected()) {
SendSnapshotToServer();
}
previousSnapshotMessage = currentTime; previousSnapshotMessage = currentTime;
} }
} }
@@ -221,7 +223,8 @@ void Client::ParseSnapshot(Package& package)
// Not a connected player // Not a connected player
break; break;
} }
// Read position data if (m_PlayerDefinitions[i].EntityID != -1) {
// Read position data
//glm::vec3 playerPos; //glm::vec3 playerPos;
//playerPos.x = package.PopFrontPrimitive<float>(); //playerPos.x = package.PopFrontPrimitive<float>();
//playerPos.y = package.PopFrontPrimitive<float>(); //playerPos.y = package.PopFrontPrimitive<float>();
@@ -229,8 +232,7 @@ void Client::ParseSnapshot(Package& package)
// Move player to server position // Move player to server position
if (m_PlayerDefinitions[i].EntityID != -1) {
//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; 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); 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) bool Client::OnInputCommand(const Events::InputCommand & e)
{ {
ComponentWrapper& player = m_World->GetComponent(m_PlayerDefinitions[m_PlayerID].EntityID, "Player"); if (m_PlayerID != -1) {
if (e.Command == "Forward") { ComponentWrapper& player = m_World->GetComponent(m_PlayerDefinitions[m_PlayerID].EntityID, "Player");
if (e.Value > 0) { if (e.Command == "Forward") {
(bool&)player["Forward"] = true; if (e.Value > 0) {
} else if (e.Value < 0) { (bool&)player["Forward"] = true;
(bool&)player["Back"] = true; } else if (e.Value < 0) {
} else { (bool&)player["Back"] = true;
(bool&)player["Forward"] = false; } else {
(bool&)player["Back"] = false; (bool&)player["Forward"] = false;
(bool&)player["Back"] = false;
}
} }
} if (e.Command == "Right") {
if (e.Command == "Right") { if (e.Value > 0) {
if (e.Value > 0) { (bool&)player["Right"] = true;
(bool&)player["Right"] = true; } else if (e.Value < 0) {
} else if (e.Value < 0) { (bool&)player["Left"] = true;
(bool&)player["Left"] = true; } else {
} else { (bool&)player["Left"] = false;
(bool&)player["Left"] = false; (bool&)player["Right"] = false;
(bool&)player["Right"] = false; }
} }
} }
if (e.Command == "Sprint") { // Connect for now if (e.Command == "Sprint") { // Connect for now
@@ -336,3 +340,13 @@ void Client::IdentifyPacketLoss()
LOG_INFO("%i Packet(s) were lost...", difference); 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;
}