- server doesn't create a new EntityEvent if there's a duplicate event waiting to be sent

- hull, radar, steering & pump syncing
This commit is contained in:
Regalis
2016-11-14 16:58:21 +02:00
parent 44d87613b9
commit 0c9a55e9e0
10 changed files with 166 additions and 51 deletions

View File

@@ -12,7 +12,7 @@ namespace Barotrauma.Networking
private List<ServerEntityEvent> events;
private UInt32 ID;
public ServerEntityEventManager(GameServer server)
{
events = new List<ServerEntityEvent>();
@@ -26,11 +26,18 @@ namespace Barotrauma.Networking
return;
}
ID++;
var newEvent = new ServerEntityEvent(entity, ID);
var newEvent = new ServerEntityEvent(entity, ID + 1);
if (extraData != null) newEvent.SetData(extraData);
for (int i = events.Count - 1; i >= 0 && !events[i].Sent; i--)
{
//we already have an identical event that's waiting to be sent
// -> no need to add a new one
if (events[i].IsDuplicate(newEvent)) return;
}
ID++;
events.Add(newEvent);
}
@@ -51,13 +58,14 @@ namespace Barotrauma.Networking
{
break;
}
eventsToSync.Insert(0, events[i]);
}
if (eventsToSync.Count == 0) return;
foreach (NetEntityEvent entityEvent in eventsToSync)
{
(entityEvent as ServerEntityEvent).Sent = true;
client.entityEventLastSent[entityEvent.ID] = (float)NetTime.Now;
}