Skip to content

Commit

Permalink
Merge remote-tracking branch 'origin/DevBranch' into DevBranch
Browse files Browse the repository at this point in the history
  • Loading branch information
se5a committed Apr 21, 2024
2 parents b9ed645 + 5512ab6 commit c241077
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 34 deletions.
16 changes: 10 additions & 6 deletions Pulsar4X/Pulsar4X.Client/MapRendering/SystemMapRendering.cs
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,7 @@ internal void Initialize(StarSystem starSys)
_sensorChanges = _sensorMgr.Changes.Subscribe();
_sysState.OnEntityAdded += OnSystemStateEntityAdded;
_sysState.OnEntityUpdated += OnSystemStateEntityUpdated;
_sysState.OnEntityRemoved += OnSystemStateEntityRemoved;

foreach (var entityItem in _sysState.EntityStatesWithPosition.Values)
{
Expand Down Expand Up @@ -361,8 +362,16 @@ private void OnSystemStateEntityAdded(SystemState systemState, Entity entity)
private void OnSystemStateEntityUpdated(SystemState systemState, int entityId, Message message)
{
// Refreseh the icons for the updated entity
if(systemState.EntityStatesWithPosition.ContainsKey(entityId))
{
RemoveIconable(entityId);
AddIconable(systemState.EntityStatesWithPosition[entityId]);
}
}

private void OnSystemStateEntityRemoved(SystemState systemState, int entityId)
{
RemoveIconable(entityId);
AddIconable(systemState.EntityStatesWithPosition[entityId]);
}

internal void Draw()
Expand All @@ -377,11 +386,6 @@ internal void Draw()
HandleChanges(item);
}
}
foreach (var item in _sysState.EntitiesToBin)
{
if(_sysState.EntityStatesWithPosition.ContainsKey(item))
RemoveIconable(item);
}
}

byte oR, oG, oB, oA;
Expand Down
49 changes: 21 additions & 28 deletions Pulsar4X/Pulsar4X.Client/MapRendering/SystemState.cs
Original file line number Diff line number Diff line change
Expand Up @@ -34,8 +34,8 @@ public class SystemState
internal List<Message> SensorChanges = new List<Message>();
ManagerSubPulse PulseMgr;

public SafeList<int> EntitiesToAdd = new ();
public SafeDictionary<int, SafeList<Message>> EntitiesToUpdate = new ();
public ConcurrentQueue<int> EntitiesToAdd = new ();
public ConcurrentQueue<(int, Message)> EntitiesToUpdate = new ();
public SafeList<int> EntitiesToBin = new ();
public List<Message> SystemChanges = new List<Message>();
public SafeDictionary<int, EntityState> EntityStatesWithNames = new ();
Expand Down Expand Up @@ -126,7 +126,7 @@ async Task OnEntityAddedMessage(Message message)
await Task.Run(() =>
{
if(message.EntityId == null) return;
EntitiesToAdd.Add(message.EntityId.Value);
EntitiesToAdd.Enqueue(message.EntityId.Value);
});
}

Expand All @@ -135,7 +135,8 @@ async Task OnEntityRemovedMessage(Message message)
await Task.Run(() =>
{
if(message.EntityId == null) return;
EntitiesToBin.Add(message.EntityId.Value);
if(!EntitiesToBin.Contains(message.EntityId.Value))
EntitiesToBin.Add(message.EntityId.Value);
});
}

Expand All @@ -144,11 +145,7 @@ async Task OnEntityUpdatedMessage(Message message)
await Task.Run(() =>
{
if(message.EntityId == null) return;
if(!EntitiesToUpdate.ContainsKey(message.EntityId.Value))
{
EntitiesToUpdate[message.EntityId.Value] = new ();
}
EntitiesToUpdate[message.EntityId.Value].Add(message);
EntitiesToUpdate.Enqueue((message.EntityId.Value, message));
});
}

Expand All @@ -158,7 +155,7 @@ await Task.Run(() =>
/// </summary>
public void PreFrameSetup()
{
foreach(var entityToAdd in EntitiesToAdd)
while(EntitiesToAdd.TryDequeue(out var entityToAdd))
{
if(StarSystem.TryGetEntityById(entityToAdd, out var entity))
{
Expand All @@ -167,22 +164,9 @@ public void PreFrameSetup()
}
}

foreach(var (entityId, messages) in EntitiesToUpdate)
while(EntitiesToUpdate.TryDequeue(out var entityToUpdate))
{
foreach(var message in messages)
{
OnEntityUpdated?.Invoke(this, entityId, message);
}
}
EntitiesToUpdate.Clear();

foreach (var item in EntityStatesWithPosition.Values)
{
if (item.IsDestroyed) //items get flagged via an event triggered by worker threads.
{
if(!EntitiesToBin.Contains(item.Entity.Id))
EntitiesToBin.Add(item.Entity.Id);
}
OnEntityUpdated?.Invoke(this, entityToUpdate.Item1, entityToUpdate.Item2);
}
}

Expand All @@ -192,14 +176,23 @@ public void PreFrameSetup()
/// </summary>
public void PostFrameCleanup()
{
foreach(var item in EntityStatesWithPosition.Values)
{
if(item.IsDestroyed)
{
if(!EntitiesToBin.Contains(item.Entity.Id))
EntitiesToBin.Add(item.Entity.Id);
}
}

foreach (var entityToRemove in EntitiesToBin)
{
EntityStatesWithPosition.Remove(entityToRemove);
OnEntityRemoved?.Invoke(this, entityToRemove);
}
EntitiesToBin = new SafeList<int>();
SensorChanges = new List<Message>();
SystemChanges = new List<Message>();
EntitiesToBin.Clear();
SensorChanges.Clear();
SystemChanges.Clear();
foreach (var item in EntityStatesWithPosition.Values)
{
item.PostFrameCleanup();
Expand Down

0 comments on commit c241077

Please sign in to comment.