Compare commits

..

9 Commits

Author SHA1 Message Date
verysecrethero b8222c7b2e The rotation of the Pickups are now also included in the AmmoPickup.xml, HealthPickup.xml 2016-02-17 14:54:42 +01:00
verysecrethero 3e4b87da7c Merge remote-tracking branch 'origin/master' into HealthPickup
# Conflicts:
#	resources/Schema/Entities/NewMap.xml
2016-02-17 14:32:59 +01:00
verysecrethero ac9ce8ea83 Merge remote-tracking branch 'origin/master' into HealthPickup 2016-02-17 14:30:31 +01:00
Tobias Dahl 99643fd748 Merge pull request #112 from teamfisk/AssaultDash
You can now AssaultDash in the air
2016-02-17 14:24:58 +01:00
verysecrethero 8f28c760dd You can now AssaultDash in the air 2016-02-17 11:47:10 +01:00
verysecrethero b13362360a Fixed RespawnModel of Pickups 2016-02-17 11:22:42 +01:00
Jace 0af9edc6e5 Editor is properly disabled when disabled in config 2016-02-17 10:53:20 +01:00
verysecrethero ec10ef3ffc Merge remote-tracking branch 'origin/master' into HealthPickup 2016-02-17 10:32:35 +01:00
verysecrethero 503613907e Merge remote-tracking branch 'origin/master' into HealthPickup 2016-02-08 11:39:05 +01:00
15 changed files with 79 additions and 137 deletions
-2
View File
@@ -16,8 +16,6 @@ struct InputCommand : Event
std::string Command; std::string Command;
/** The value of the command. */ /** The value of the command. */
float Value = 0; float Value = 0;
/** Timestamp of the command. */
double TimeStamp = 0;
}; };
} }
@@ -202,7 +202,7 @@ void FirstPersonInputController<EventContext>::AssaultDashCheck(double dt, bool
} }
//dashing with shift //dashing with shift
if (m_ShiftDashing && m_AssaultDashCoolDownTimer <= 0.0f && !isJumping) { if (m_ShiftDashing && m_AssaultDashCoolDownTimer <= 0.0f) {
//player is dashing with shift //player is dashing with shift
//the wanted-direction is set in playermovement already so we dont need to check what direction we want to dash in! //the wanted-direction is set in playermovement already so we dont need to check what direction we want to dash in!
m_AssaultDashCoolDownTimer = assaultDashCoolDownMaxTimer; m_AssaultDashCoolDownTimer = assaultDashCoolDownMaxTimer;
@@ -227,7 +227,7 @@ void FirstPersonInputController<EventContext>::AssaultDashCheck(double dt, bool
} }
m_ValidDoubleTap = false; m_ValidDoubleTap = false;
if (!(m_AssaultDashCoolDownTimer <= 0.0f && !isJumping)) { if (!(m_AssaultDashCoolDownTimer <= 0.0f)) {
//if we cant dash at the moment, then just reset the tap-sensitivity-timer //if we cant dash at the moment, then just reset the tap-sensitivity-timer
m_AssaultDashDoubleTapDeltaTime = 0.f; m_AssaultDashDoubleTapDeltaTime = 0.f;
return; return;
+8 -7
View File
@@ -33,8 +33,8 @@ public:
~Client(); ~Client();
void Connect(std::string address, int port); void Connect(std::string address, int port);
void Update(double dt) override; void Update() override;
private:
std::vector<Events::PlayerSpawned> m_PlayerSpawnEvents; std::vector<Events::PlayerSpawned> m_PlayerSpawnEvents;
void parseSpawnEvents(); void parseSpawnEvents();
// Save for children // Save for children
@@ -56,13 +56,13 @@ private:
bool m_IsConnected = false; bool m_IsConnected = false;
EntityWrapper m_LocalPlayer = EntityWrapper::Invalid; EntityWrapper m_LocalPlayer = EntityWrapper::Invalid;
// Server Client Lookup map // Server Client Lookup map
// Assumes that root node for client and server is EntityID 0.
// Don't Add items to these two maps with insert, use insertIntoServerClientMaps(EntityID, EntityID)!!!! // Don't Add items to these two maps with insert, use insertIntoServerClientMaps(EntityID, EntityID)!!!!
std::unordered_map<EntityID, EntityID> m_ServerIDToClientID; std::unordered_map<EntityID, EntityID> m_ServerIDToClientID;
std::unordered_map<EntityID, EntityID> m_ClientIDToServerID; std::unordered_map<EntityID, EntityID> m_ClientIDToServerID;
// Network logic // Network logic
UDPClient m_Unreliable;
TCPClient m_Reliable;
PlayerDefinition m_PlayerDefinitions[8]; PlayerDefinition m_PlayerDefinitions[8];
SnapshotDefinitions m_NextSnapshot; SnapshotDefinitions m_NextSnapshot;
double m_DurationOfPingTime; double m_DurationOfPingTime;
@@ -70,9 +70,9 @@ private:
std::clock_t m_TimeSinceSentInputs; std::clock_t m_TimeSinceSentInputs;
unsigned int m_SendInputIntervalMs; unsigned int m_SendInputIntervalMs;
std::vector<Events::InputCommand> m_InputCommandBuffer; std::vector<Events::InputCommand> m_InputCommandBuffer;
std::vector<Events::InputCommand> m_ReceivedInputCommands;
// Private member functions // Private member functions
size_t receive(char* data);
void disconnect(); void disconnect();
void parseMessageType(Packet& packet); void parseMessageType(Packet& packet);
void updateFields(Packet& packet, const ComponentInfo& componentInfo, const EntityID& entityID); void updateFields(Packet& packet, const ComponentInfo& componentInfo, const EntityID& entityID);
@@ -88,8 +88,6 @@ private:
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 parseOnInputCommand(Packet& packet);
void publishInputCommands();
void identifyPacketLoss(); void identifyPacketLoss();
void hasServerTimedOut(); void hasServerTimedOut();
EntityID createPlayer(); EntityID createPlayer();
@@ -112,6 +110,9 @@ private:
EventRelay<Client, Events::PlayerSpawned> m_EPlayerSpawned; EventRelay<Client, Events::PlayerSpawned> m_EPlayerSpawned;
bool OnPlayerSpawned(const Events::PlayerSpawned& e); bool OnPlayerSpawned(const Events::PlayerSpawned& e);
void parsePlayerDamage(Packet& packet); void parsePlayerDamage(Packet& packet);
private:
UDPClient m_Unreliable;
TCPClient m_Reliable;
}; };
#endif #endif
+1 -3
View File
@@ -22,13 +22,11 @@ public:
Network(World* world, EventBroker* eventBroker); Network(World* world, EventBroker* eventBroker);
virtual ~Network() { }; virtual ~Network() { };
virtual void Update(double dt) = 0; virtual void Update() = 0;
protected: protected:
World* m_World; World* m_World;
EventBroker* m_EventBroker; EventBroker* m_EventBroker;
// for network
double m_TimeStamp = 0;
// For Debug // For Debug
bool isReadingData = false; bool isReadingData = false;
+1 -3
View File
@@ -26,7 +26,7 @@ public:
Server(World* world, EventBroker* eventBroker, int port); Server(World* world, EventBroker* eventBroker, int port);
~Server(); ~Server();
void Update(double dt) override; void Update() override;
private: private:
// Network channels // Network channels
@@ -52,7 +52,6 @@ private:
int checkTimeOutInterval = 100; int checkTimeOutInterval = 100;
int m_NextPlayerID = 0; int m_NextPlayerID = 0;
std::vector<Events::InputCommand> m_InputCommandsToBroadcast; std::vector<Events::InputCommand> m_InputCommandsToBroadcast;
std::vector<Events::InputCommand> m_InputCommandsToPublish;
//Timers //Timers
std::clock_t m_StartPingTime; std::clock_t m_StartPingTime;
@@ -83,7 +82,6 @@ private:
void parseTCPConnect(Packet & packet); void parseTCPConnect(Packet & packet);
void parseDisconnect(); void parseDisconnect();
bool shouldSendToClient(EntityWrapper childEntity); bool shouldSendToClient(EntityWrapper childEntity);
void publishInputCommands();
// Debug event // Debug event
EventRelay<Server, Events::InputCommand> m_EInputCommand; EventRelay<Server, Events::InputCommand> m_EInputCommand;
+1 -1
View File
@@ -39,5 +39,5 @@ private:
bool OnPlayerSpawned(Events::PlayerSpawned& e); bool OnPlayerSpawned(Events::PlayerSpawned& e);
void updateMovementControllers(double dt); void updateMovementControllers(double dt);
void updateVelocity(EntityWrapper player, double dt); void updateVelocity(double dt);
}; };
+6 -1
View File
@@ -5,10 +5,15 @@
<c:AABB/> <c:AABB/>
<c:AmmoPickup/> <c:AmmoPickup/>
<c:Model> <c:Model>
<Resource>Models/Core/UnitSphere.mesh</Resource> <Resource>Models/Props/PickUps/AmmoPickUp.mesh</Resource>
</c:Model> </c:Model>
<c:RaptorCopter>
<Speed>0.1</Speed>
<Axis X="0" Y="1" Z="0"/>
</c:RaptorCopter>
<c:Transform> <c:Transform>
<Position X="0" Y="1" Z="0"/> <Position X="0" Y="1" Z="0"/>
<Scale X="0.3" Y="0.3" Z="0.3"/>
</c:Transform> </c:Transform>
<c:Trigger/> <c:Trigger/>
</Components> </Components>
+6 -1
View File
@@ -5,10 +5,15 @@
<c:AABB/> <c:AABB/>
<c:HealthPickup/> <c:HealthPickup/>
<c:Model> <c:Model>
<Resource>Models/Core/UnitSphere.mesh</Resource> <Resource>Models/Props/PickUps/HealthPickUp.mesh</Resource>
</c:Model> </c:Model>
<c:RaptorCopter>
<Speed>0.1</Speed>
<Axis X="0" Y="1" Z="0"/>
</c:RaptorCopter>
<c:Transform> <c:Transform>
<Position X="0" Y="1" Z="0"/> <Position X="0" Y="1" Z="0"/>
<Scale X="0.3" Y="0.3" Z="0.3"/>
</c:Transform> </c:Transform>
<c:Trigger/> <c:Trigger/>
</Components> </Components>
+10 -10
View File
@@ -5019,7 +5019,7 @@
</Team> </Team>
</c:Team> </c:Team>
<c:Transform> <c:Transform>
<Position X="-60.3695679" Y="2.14482641" Z="-79.3789597"/> <Position X="-60.3695679" Y="5.64500046" Z="-79.3789597"/>
</c:Transform> </c:Transform>
</Components> </Components>
<Children> <Children>
@@ -5089,7 +5089,7 @@
</Team> </Team>
</c:Team> </c:Team>
<c:Transform> <c:Transform>
<Position X="60.0169258" Y="2.37972379" Z="76.2893906"/> <Position X="60.0169258" Y="5.78000021" Z="76.2893906"/>
</c:Transform> </c:Transform>
</Components> </Components>
<Children> <Children>
@@ -5165,7 +5165,7 @@
<c:Transform> <c:Transform>
<Position X="48.9189453" Y="7.06223536" Z="-78.9347992"/> <Position X="48.9189453" Y="7.06223536" Z="-78.9347992"/>
<Scale X="0.300000012" Y="0.300000012" Z="0.300000012"/> <Scale X="0.300000012" Y="0.300000012" Z="0.300000012"/>
<Orientation X="0" Y="71.4059677" Z="0"/> <Orientation X="0" Y="75.6124268" Z="0"/>
</c:Transform> </c:Transform>
<c:Trigger/> <c:Trigger/>
</Components> </Components>
@@ -5184,7 +5184,7 @@
<c:Transform> <c:Transform>
<Position X="-59.3499641" Y="7.46932745" Z="-20.6276321"/> <Position X="-59.3499641" Y="7.46932745" Z="-20.6276321"/>
<Scale X="0.300000012" Y="0.300000012" Z="0.300000012"/> <Scale X="0.300000012" Y="0.300000012" Z="0.300000012"/>
<Orientation X="0" Y="68.0603104" Z="0"/> <Orientation X="0" Y="72.2667694" Z="0"/>
</c:Transform> </c:Transform>
<c:Trigger/> <c:Trigger/>
</Components> </Components>
@@ -5203,7 +5203,7 @@
<c:Transform> <c:Transform>
<Position X="-1.13644195" Y="1.38919806" Z="38.9768829"/> <Position X="-1.13644195" Y="1.38919806" Z="38.9768829"/>
<Scale X="0.300000012" Y="0.300000012" Z="0.300000012"/> <Scale X="0.300000012" Y="0.300000012" Z="0.300000012"/>
<Orientation X="0" Y="65.6683426" Z="0"/> <Orientation X="0" Y="69.8748016" Z="0"/>
</c:Transform> </c:Transform>
<c:Trigger/> <c:Trigger/>
</Components> </Components>
@@ -5222,7 +5222,7 @@
<c:Transform> <c:Transform>
<Position X="54.7225227" Y="6.51863909" Z="29.0052128"/> <Position X="54.7225227" Y="6.51863909" Z="29.0052128"/>
<Scale X="0.300000012" Y="0.300000012" Z="0.300000012"/> <Scale X="0.300000012" Y="0.300000012" Z="0.300000012"/>
<Orientation X="0" Y="65.9822693" Z="0"/> <Orientation X="0" Y="70.1887283" Z="0"/>
</c:Transform> </c:Transform>
<c:Trigger/> <c:Trigger/>
</Components> </Components>
@@ -5241,7 +5241,7 @@
<c:Transform> <c:Transform>
<Position X="-51.6792374" Y="8.44526482" Z="32.5153465"/> <Position X="-51.6792374" Y="8.44526482" Z="32.5153465"/>
<Scale X="0.300000012" Y="0.300000012" Z="0.300000012"/> <Scale X="0.300000012" Y="0.300000012" Z="0.300000012"/>
<Orientation X="0" Y="65.4309921" Z="0"/> <Orientation X="0" Y="69.6374512" Z="0"/>
</c:Transform> </c:Transform>
<c:Trigger/> <c:Trigger/>
</Components> </Components>
@@ -5260,7 +5260,7 @@
<c:Transform> <c:Transform>
<Position X="-42.3974304" Y="7.28327894" Z="81.9305344"/> <Position X="-42.3974304" Y="7.28327894" Z="81.9305344"/>
<Scale X="0.300000012" Y="0.300000012" Z="0.300000012"/> <Scale X="0.300000012" Y="0.300000012" Z="0.300000012"/>
<Orientation X="0" Y="63.560215" Z="0"/> <Orientation X="0" Y="67.7666702" Z="0"/>
</c:Transform> </c:Transform>
<c:Trigger/> <c:Trigger/>
</Components> </Components>
@@ -5279,7 +5279,7 @@
<c:Transform> <c:Transform>
<Position X="-9.85184956" Y="8.25567532" Z="39.6119232"/> <Position X="-9.85184956" Y="8.25567532" Z="39.6119232"/>
<Scale X="0.300000012" Y="0.300000012" Z="0.300000012"/> <Scale X="0.300000012" Y="0.300000012" Z="0.300000012"/>
<Orientation X="0" Y="62.6090584" Z="0"/> <Orientation X="0" Y="66.8154602" Z="0"/>
</c:Transform> </c:Transform>
<c:Trigger/> <c:Trigger/>
</Components> </Components>
@@ -5298,7 +5298,7 @@
<c:Transform> <c:Transform>
<Position X="49.2257118" Y="7.39368248" Z="-31.1810112"/> <Position X="49.2257118" Y="7.39368248" Z="-31.1810112"/>
<Scale X="0.300000012" Y="0.300000012" Z="0.300000012"/> <Scale X="0.300000012" Y="0.300000012" Z="0.300000012"/>
<Orientation X="0" Y="59.8201942" Z="0"/> <Orientation X="0" Y="64.0265808" Z="0"/>
</c:Transform> </c:Transform>
<c:Trigger/> <c:Trigger/>
</Components> </Components>
+2
View File
@@ -43,6 +43,8 @@ EditorSystem::EditorSystem(SystemParams params, IRenderer* renderer, RenderFrame
m_Enabled = ResourceManager::Load<ConfigFile>("Config.ini")->Get<bool>("Debug.EditorEnabled", false); m_Enabled = ResourceManager::Load<ConfigFile>("Config.ini")->Get<bool>("Debug.EditorEnabled", false);
if (m_Enabled) { if (m_Enabled) {
Enable(); Enable();
} else {
Disable();
} }
} }
+20 -69
View File
@@ -41,11 +41,9 @@ void Client::Connect(std::string address, int port)
} }
} }
void Client::Update(double dt) void Client::Update()
{ {
m_EventBroker->Process<Client>(); m_EventBroker->Process<Client>();
//m_TimeStamp += dt;
publishInputCommands();
while (m_Unreliable.IsSocketAvailable()) { while (m_Unreliable.IsSocketAvailable()) {
// Packet will get real data in receive // Packet will get real data in receive
Packet packet(MessageType::Invalid); Packet packet(MessageType::Invalid);
@@ -74,8 +72,7 @@ void Client::Update(double dt)
sendInputCommands(); sendInputCommands();
m_TimeSinceSentInputs = std::clock(); m_TimeSinceSentInputs = std::clock();
} }
// HACK: Send absolute player positions for now to avoid desync until we have reliable messages. // HACK: Send absolute player positions for now to avoid desync until we have reliable messages
// Reliable messages and timestamps did not fix it.
sendLocalPlayerTransform(); sendLocalPlayerTransform();
hasServerTimedOut(); hasServerTimedOut();
@@ -125,9 +122,6 @@ void Client::parseMessageType(Packet& packet)
case MessageType::OnPlayerDamage: case MessageType::OnPlayerDamage:
parsePlayerDamage(packet); parsePlayerDamage(packet);
break; break;
case MessageType::OnInputCommand:
//parsePlayerDamage(packet);
break;
default: default:
break; break;
} }
@@ -290,30 +284,21 @@ void Client::ignoreFields(Packet& packet, const ComponentInfo& componentInfo)
void Client::parseSnapshot(Packet& packet) void Client::parseSnapshot(Packet& packet)
{ {
//// Read input commands // Read input commands
//std::size_t numInputCommands = packet.ReadPrimitive<std::size_t>(); std::size_t numInputCommands = packet.ReadPrimitive<std::size_t>();
//for (std::size_t i = 0; i < numInputCommands; ++i) { for (std::size_t i = 0; i < numInputCommands; ++i) {
// Events::InputCommand e; Events::InputCommand e;
// e.PlayerID = packet.ReadPrimitive<EntityID>(); e.PlayerID = packet.ReadPrimitive<EntityID>();
// EntityID player = packet.ReadPrimitive<EntityID>(); EntityID player = packet.ReadPrimitive<EntityID>();
// std::string command = packet.ReadString(); std::string command = packet.ReadString();
// float value = packet.ReadPrimitive<float>(); float value = packet.ReadPrimitive<float>();
// double timestamp = packet.ReadPrimitive<double>(); if (m_ServerIDToClientID.find(player) != m_ServerIDToClientID.end()) {
// if (m_ServerIDToClientID.find(player) != m_ServerIDToClientID.end()) { e.Player = EntityWrapper(m_World, m_ServerIDToClientID.at(player));
// e.Player = EntityWrapper(m_World, m_ServerIDToClientID.at(player)); e.Command = command;
// e.Command = command; e.Value = value;
// e.Value = value; m_EventBroker->Publish(e);
// e.TimeStamp = timestamp; }
// m_EventBroker->Publish(e); }
// }
//}
// Read timestamp
double remoteTimestamp = packet.ReadPrimitive<double>();
//if (abs(remoteTimestamp - m_TimeStamp) > 0.100) {
// m_TimeStamp = remoteTimestamp;
// LOG_INFO("Resynced remote and local timestamp");
//}
// Read world state // Read world state
while (packet.DataReadSize() < packet.Size()) { while (packet.DataReadSize() < packet.Size()) {
@@ -374,36 +359,6 @@ void Client::parseSnapshot(Packet& packet)
parseSpawnEvents(); parseSpawnEvents();
} }
void Client::parseOnInputCommand(Packet & packet)
{
while (packet.DataReadSize() < packet.Size()) {
Events::InputCommand e;
e.PlayerID = packet.ReadPrimitive<int>();
e.Player = EntityWrapper(m_World, packet.ReadPrimitive<int>());
e.Command = packet.ReadString();
e.Value = packet.ReadPrimitive<float>();
e.TimeStamp = packet.ReadPrimitive<double>();
m_EventBroker->Publish(e);
m_ReceivedInputCommands.push_back(e);
//LOG_INFO("Server::parseOnInputCommand: Command is %s. Value is %f. PlayerID is %i.", e.Command.c_str(), e.Value, e.PlayerID);
}
}
void Client::publishInputCommands()
{
std::vector<Events::InputCommand> notPublishedEvents;
for (int i = 0; i < m_ReceivedInputCommands.size(); i++) {
if (m_ReceivedInputCommands.at(i).TimeStamp < m_TimeStamp) {
m_EventBroker->Publish(m_ReceivedInputCommands.at(i));
}
else {
notPublishedEvents.push_back(m_ReceivedInputCommands.at(i));
}
}
m_ReceivedInputCommands = notPublishedEvents;
}
void Client::disconnect() void Client::disconnect()
{ {
m_IsConnected = false; m_IsConnected = false;
@@ -447,9 +402,7 @@ bool Client::OnInputCommand(const Events::InputCommand & e)
} }
} else { } else {
if (m_IsConnected) { if (m_IsConnected) {
Events::InputCommand setTimestamp = e; m_InputCommandBuffer.push_back(e);
setTimestamp.TimeStamp = m_TimeStamp;
m_InputCommandBuffer.push_back(setTimestamp);
} }
//LOG_DEBUG("Client::OnInputCommand: Command is %s. Value is %f. PlayerID is %i.", e.Command.c_str(), e.Value, e.PlayerID); //LOG_DEBUG("Client::OnInputCommand: Command is %s. Value is %f. PlayerID is %i.", e.Command.c_str(), e.Value, e.PlayerID);
return true; return true;
@@ -484,12 +437,11 @@ void Client::parsePlayerDamage(Packet& packet)
{ {
Events::PlayerDamage e; Events::PlayerDamage e;
PlayerID victimID = packet.ReadPrimitive<EntityID>(); PlayerID victimID = packet.ReadPrimitive<EntityID>();
PlayerID inflictorID = packet.ReadPrimitive<EntityID>(); if(serverClientMapsHasEntity(victimID)){
if(!serverClientMapsHasEntity(victimID) || !serverClientMapsHasEntity(inflictorID)){
return; return;
} }
e.Inflictor = EntityWrapper(m_World, m_ServerIDToClientID.at(victimID)); e.Inflictor = EntityWrapper(m_World, m_ServerIDToClientID.at(victimID));
e.Victim = EntityWrapper(m_World, m_ServerIDToClientID.at(inflictorID)); e.Victim = EntityWrapper(m_World, m_ServerIDToClientID.at(packet.ReadPrimitive<EntityID>()));
e.Damage = packet.ReadPrimitive<double>(); e.Damage = packet.ReadPrimitive<double>();
// Don't rebroadcast our own player damage events or we'll have an infinite loop! // Don't rebroadcast our own player damage events or we'll have an infinite loop!
if (e.Inflictor != m_LocalPlayer) { if (e.Inflictor != m_LocalPlayer) {
@@ -563,7 +515,6 @@ void Client::sendInputCommands()
for (int i = 0; i < m_InputCommandBuffer.size(); i++) { for (int i = 0; i < m_InputCommandBuffer.size(); i++) {
packet.WriteString(m_InputCommandBuffer[i].Command); packet.WriteString(m_InputCommandBuffer[i].Command);
packet.WritePrimitive(m_InputCommandBuffer[i].Value); packet.WritePrimitive(m_InputCommandBuffer[i].Value);
packet.WritePrimitive(m_InputCommandBuffer[i].TimeStamp);
} }
m_Reliable.Send(packet); m_Reliable.Send(packet);
m_InputCommandBuffer.clear(); m_InputCommandBuffer.clear();
+1 -1
View File
@@ -9,7 +9,7 @@ Network::Network(World* world, EventBroker* eventBroker)
m_TimeoutMs = config->Get<int>("Networking.TimeoutMs", 20000); m_TimeoutMs = config->Get<int>("Networking.TimeoutMs", 20000);
} }
void Network::Update(double dt) void Network::Update()
{ {
updateNetworkData(); updateNetworkData();
} }
+11 -29
View File
@@ -1,6 +1,6 @@
#include "Network/Server.h" #include "Network/Server.h"
Server::Server(World* world, EventBroker* eventBroker, int port) Server::Server(World* world, EventBroker* eventBroker, int port)
: Network(world, eventBroker) : Network(world, eventBroker)
{ {
ConfigFile* config = ResourceManager::Load<ConfigFile>("Config.ini"); ConfigFile* config = ResourceManager::Load<ConfigFile>("Config.ini");
@@ -26,12 +26,10 @@ Server::~Server()
} }
void Server::Update(double dt) void Server::Update()
{ {
m_EventBroker->Process<Server>();
m_TimeStamp += dt;
publishInputCommands();
PlayerDefinition pd; PlayerDefinition pd;
m_Reliable.AcceptNewConnections(m_NextPlayerID, m_ConnectedPlayers); m_Reliable.AcceptNewConnections(m_NextPlayerID, m_ConnectedPlayers);
for (auto& kv : m_ConnectedPlayers) { for (auto& kv : m_ConnectedPlayers) {
while (kv.second.TCPSocket->available()) { while (kv.second.TCPSocket->available()) {
@@ -82,9 +80,11 @@ void Server::Update(double dt)
checkForTimeOuts(); checkForTimeOuts();
timOutTimer = currentTime; timOutTimer = currentTime;
} }
m_EventBroker->Process<Server>();
if (isReadingData) { if (isReadingData) {
Network::Update(dt); Network::Update();
} }
} }
void Server::parseMessageType(Packet& packet) void Server::parseMessageType(Packet& packet)
@@ -146,8 +146,7 @@ void Server::unreliableBroadcast(Packet& packet)
void Server::sendSnapshot() void Server::sendSnapshot()
{ {
Packet packet(MessageType::Snapshot); Packet packet(MessageType::Snapshot);
//addInputCommandsToPacket(packet); addInputCommandsToPacket(packet);
packet.WritePrimitive(m_TimeStamp/*+ somePingvalue + offset*/);
addChildrenToPacket(packet, EntityID_Invalid); addChildrenToPacket(packet, EntityID_Invalid);
unreliableBroadcast(packet); unreliableBroadcast(packet);
} }
@@ -161,7 +160,6 @@ void Server::addInputCommandsToPacket(Packet& packet)
packet.WritePrimitive(m_ConnectedPlayers.at(command.PlayerID).EntityID); packet.WritePrimitive(m_ConnectedPlayers.at(command.PlayerID).EntityID);
packet.WriteString(command.Command); packet.WriteString(command.Command);
packet.WritePrimitive(command.Value); packet.WritePrimitive(command.Value);
packet.WritePrimitive(command.TimeStamp);
} }
m_InputCommandsToBroadcast.clear(); m_InputCommandsToBroadcast.clear();
} }
@@ -282,7 +280,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
@@ -335,7 +333,6 @@ void Server::disconnect(PlayerID playerID)
e.PlayerID = playerID; e.PlayerID = playerID;
m_EventBroker->Publish(e); m_EventBroker->Publish(e);
//m_World->DeleteEntity(m_ConnectedPlayers[playerID].EntityID); //m_World->DeleteEntity(m_ConnectedPlayers[playerID].EntityID);
// TODO Kolla Anders crashade efter timeout med break point
m_ConnectedPlayers[playerID].TCPSocket->shutdown(boost::asio::ip::tcp::socket::shutdown_both); m_ConnectedPlayers[playerID].TCPSocket->shutdown(boost::asio::ip::tcp::socket::shutdown_both);
m_ConnectedPlayers[playerID].TCPSocket->close(); m_ConnectedPlayers[playerID].TCPSocket->close();
m_World->DeleteEntity(m_ConnectedPlayers[playerID].EntityID); m_World->DeleteEntity(m_ConnectedPlayers[playerID].EntityID);
@@ -378,7 +375,8 @@ 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) { }
if (e.Command == "KickPlayer" && e.Value > 0) {
kick(0); kick(0);
} }
@@ -468,9 +466,7 @@ void Server::parseOnInputCommand(Packet& packet)
e.PlayerID = player; // Set correct player id e.PlayerID = player; // Set correct player id
e.Player = EntityWrapper(m_World, m_ConnectedPlayers.at(player).EntityID); e.Player = EntityWrapper(m_World, m_ConnectedPlayers.at(player).EntityID);
e.Value = packet.ReadPrimitive<float>(); e.Value = packet.ReadPrimitive<float>();
e.TimeStamp = packet.ReadPrimitive<double>(); m_EventBroker->Publish(e);
/* m_EventBroker->Publish(e);*/
m_InputCommandsToPublish.push_back(e);
if (e.Command == "PrimaryFire" || e.Command == "Reload") { if (e.Command == "PrimaryFire" || e.Command == "Reload") {
m_InputCommandsToBroadcast.push_back(e); m_InputCommandsToBroadcast.push_back(e);
} }
@@ -520,20 +516,6 @@ bool Server::shouldSendToClient(EntityWrapper childEntity)
return childEntity.HasComponent("Player") || childEntity.FirstParentWithComponent("Player").Valid(); return childEntity.HasComponent("Player") || childEntity.FirstParentWithComponent("Player").Valid();
} }
void Server::publishInputCommands()
{
std::vector<Events::InputCommand> notPublishedEvents;
for (int i = 0; i < m_InputCommandsToPublish.size(); i++) {
if (m_InputCommandsToPublish.at(i).TimeStamp < m_TimeStamp) {
m_EventBroker->Publish(m_InputCommandsToPublish.at(i));
} else {
LOG_INFO("Did not instantly publish command");
notPublishedEvents.push_back(m_InputCommandsToPublish.at(i));
}
}
m_InputCommandsToPublish = notPublishedEvents;
}
PlayerID Server::GetPlayerIDFromEndpoint() PlayerID Server::GetPlayerIDFromEndpoint()
{ {
// check both tcp and udp connection // check both tcp and udp connection
+2 -2
View File
@@ -199,10 +199,10 @@ void Game::Tick()
// Update network // Update network
m_EventBroker->Process<MultiplayerSnapshotFilter>(); m_EventBroker->Process<MultiplayerSnapshotFilter>();
if (m_NetworkClient != nullptr) { if (m_NetworkClient != nullptr) {
m_NetworkClient->Update(dt); m_NetworkClient->Update();
} }
if (m_NetworkServer != nullptr) { if (m_NetworkServer != nullptr) {
m_NetworkServer->Update(dt); m_NetworkServer->Update();
} }
//m_SoundManager->Update(dt); //m_SoundManager->Update(dt);
+8 -6
View File
@@ -16,9 +16,7 @@ PlayerMovementSystem::~PlayerMovementSystem()
void PlayerMovementSystem::Update(double dt) void PlayerMovementSystem::Update(double dt)
{ {
updateMovementControllers(dt); updateMovementControllers(dt);
if (LocalPlayer.Valid()) { updateVelocity(dt);
updateVelocity(LocalPlayer, dt);
}
} }
void PlayerMovementSystem::updateMovementControllers(double dt) void PlayerMovementSystem::updateMovementControllers(double dt)
@@ -223,11 +221,15 @@ void PlayerMovementSystem::updateMovementControllers(double dt)
} }
void PlayerMovementSystem::updateVelocity(EntityWrapper player, double dt) void PlayerMovementSystem::updateVelocity(double dt)
{ {
// Only apply velocity to local player // Only apply velocity to local player
ComponentWrapper& cTransform = player["Transform"]; if (!LocalPlayer.Valid()) {
ComponentWrapper& cPhysics = player["Physics"]; return;
}
ComponentWrapper& cTransform = LocalPlayer["Transform"];
ComponentWrapper& cPhysics = LocalPlayer["Physics"];
glm::vec3& velocity = cPhysics["Velocity"]; glm::vec3& velocity = cPhysics["Velocity"];
bool isOnGround = (bool)cPhysics["IsOnGround"]; bool isOnGround = (bool)cPhysics["IsOnGround"];