diff --git a/SMT/Overlay.xaml.cs b/SMT/Overlay.xaml.cs
index dfca66d..ae73aea 100644
--- a/SMT/Overlay.xaml.cs
+++ b/SMT/Overlay.xaml.cs
@@ -18,6 +18,7 @@
using System.Windows.Threading;
using Windows.Services;
using Microsoft.IdentityModel.Tokens;
+using Microsoft.VisualBasic.Logging;
using NHotkey;
using SMT.EVEData;
using static SMT.EVEData.Navigation;
@@ -487,10 +488,12 @@ private float CalculatedOverlaySystemSize(string systemName)
if (gathererMode)
return overlaySystemSizeGatherer;
- if (systemName == currentPlayersSystemData[OverlayCharacter]?.system?.Name)
+ if (OverlayCharacter != null &&
+ currentPlayersSystemData[OverlayCharacter].system != null &&
+ systemName == currentPlayersSystemData[OverlayCharacter]?.system?.Name)
return overlaySystemSizeHunter * overlayCurrentSystemSizeHunterModifier;
- if (currentPlayersSystemData.Any(s => s.Value.system.Name == systemName))
+ if (currentPlayersSystemData.Where(s => s.Value.system != null).Any(s => s.Value.system.Name == systemName))
{
return overlaySystemSizeHunter * overlayAdditionalCharacterSystemSizeHunterModifier;
}
@@ -642,37 +645,81 @@ private void UpdateCharacterData()
}
}
- private void UpdatePlayerLocations(object sender, EventArgs e)
+ ///
+ /// Check if all chars in the internal list are still registered
+ /// with the main window. Clean up or close if not.
+ ///
+ private void ValidateCharacters()
{
- if (OverlayCharacter != null)
+ // It is ok to have the overlay character be null.
+ if (OverlayCharacter == null)
{
- if (currentPlayersSystemData[OverlayCharacter].system == null)
- {
- RefreshCurrentView();
- }
- else if (OverlayCharacter.Location != currentPlayersSystemData[OverlayCharacter].system.Name || routeLines.Count > 0 && (routeLines.Count != OverlayCharacter.ActiveRoute.Count - 1))
+ return;
+ }
+
+ if (!mainWindow.EVEManager.LocalCharacters.Contains(OverlayCharacter))
+ {
+ Close();
+ }
+
+ List pruneCharacters = new();
+ foreach (KeyValuePair characterPair in currentPlayersSystemData)
+ {
+ if (!mainWindow.EVEManager.LocalCharacters.Contains(characterPair.Key))
{
- RefreshCurrentView();
+ pruneCharacters.Add(characterPair.Key);
}
- else
+ }
+
+ foreach (LocalCharacter pruneCharacter in pruneCharacters)
+ {
+ currentPlayersSystemData.Remove(pruneCharacter);
+ }
+ }
+
+ private void UpdatePlayerLocations(object sender, EventArgs e)
+ {
+ ValidateCharacters();
+
+ try
+ {
+ if (OverlayCharacter != null)
{
- foreach (LocalCharacter additionalCharacter in mainWindow.EVEManager.LocalCharacters)
+ if (currentPlayersSystemData[OverlayCharacter].system == null)
{
- if (additionalCharacter != OverlayCharacter)
+ RefreshCurrentView();
+ }
+ else if (OverlayCharacter.Location != currentPlayersSystemData[OverlayCharacter].system.Name ||
+ routeLines.Count > 0 && (routeLines.Count != OverlayCharacter.ActiveRoute.Count - 1))
+ {
+ RefreshCurrentView();
+ }
+ else
+ {
+ foreach (LocalCharacter additionalCharacter in mainWindow.EVEManager.LocalCharacters)
{
- if (additionalCharacter.Location != currentPlayersSystemData[additionalCharacter].system.Name)
+ if (additionalCharacter != OverlayCharacter)
{
- RefreshCurrentView();
- break;
+ if (additionalCharacter.Location !=
+ currentPlayersSystemData[additionalCharacter].system.Name)
+ {
+ RefreshCurrentView();
+ break;
+ }
}
}
- }
+ }
}
}
+ catch (Exception)
+ {
+ }
}
private void UpdateDataOverlay(object sender, EventArgs e)
{
+ ValidateCharacters();
+
try
{
UpdateIntelData();
@@ -1002,14 +1049,16 @@ private void UpdateSystemList()
// Gather data
currentPlayersSystemData.Clear();
string currentLocation = OverlayCharacter.Location;
- EVEData.System currentSystem = mainWindow.EVEManager.GetEveSystem(currentLocation);
- currentPlayersSystemData.Add(OverlayCharacter, new OverlaySystemData(currentSystem));
- foreach (LocalCharacter additionalChar in mainWindow.EVEManager.LocalCharacters)
+
+ // Bail out if the system name is empty or null. May happen during update.
+ if (String.IsNullOrEmpty(currentLocation))
{
- if (!currentPlayersSystemData.ContainsKey(additionalChar))
- currentPlayersSystemData.Add(additionalChar, new OverlaySystemData(mainWindow.EVEManager.GetEveSystem(additionalChar.Location)));
+ ClearView();
+ return;
}
-
+
+ EVEData.System currentSystem = mainWindow.EVEManager.GetEveSystem(currentLocation);
+
// Bail out if the system does not exist. I.e. wormhole systems.
if (currentSystem == null)
{
@@ -1017,6 +1066,15 @@ private void UpdateSystemList()
ClearView();
return;
}
+
+ currentPlayersSystemData.Add(OverlayCharacter, new OverlaySystemData(currentSystem));
+ foreach (LocalCharacter additionalChar in mainWindow.EVEManager.LocalCharacters)
+ {
+ if (!currentPlayersSystemData.ContainsKey(additionalChar))
+ currentPlayersSystemData.Add(additionalChar, new OverlaySystemData(mainWindow.EVEManager.GetEveSystem(additionalChar.Location)));
+ }
+
+
List> hierarchie = new List>();