Intermediate commit rewrite player planet cache
This commit is contained in:
		@@ -30,6 +30,11 @@ public class PlanetManager : IDisposable, IEnableLogger
 | 
			
		||||
                .Filter(planet => planet.OwnerId == Game.Player.Name)
 | 
			
		||||
                .Transform(planet => new PlayerPlanetViewModel(planet));
 | 
			
		||||
 | 
			
		||||
    /// <summary>
 | 
			
		||||
    /// Cache with all player planets, indexed by planet name.
 | 
			
		||||
    /// </summary>
 | 
			
		||||
    private SourceCache<PlayerPlanetViewModel, string> _playerPlanets = new(p => p.Planet.Name);
 | 
			
		||||
    
 | 
			
		||||
    /// <summary>
 | 
			
		||||
    /// Observable subject to trigger when we update the planet cache, allows the
 | 
			
		||||
    /// UI to react to it.
 | 
			
		||||
@@ -64,6 +69,27 @@ public class PlanetManager : IDisposable, IEnableLogger
 | 
			
		||||
                innerCache.AddOrUpdate(allPlanets);
 | 
			
		||||
            }
 | 
			
		||||
        );
 | 
			
		||||
        
 | 
			
		||||
        var allPlayerPlanets = allPlanets.Where(planet => planet.OwnerId == Game.Player.Name);
 | 
			
		||||
        var allPlayerCacheKeys = _playerPlanets.Keys.ToList();
 | 
			
		||||
        var playerPlanetNames = from p in allPlayerPlanets select p.Name;
 | 
			
		||||
        var playerPlanetsToDelete = allPlayerCacheKeys.Except(playerPlanetNames);
 | 
			
		||||
        
 | 
			
		||||
        _playerPlanets.Edit(innerCache => 
 | 
			
		||||
            {
 | 
			
		||||
                foreach (var name in playerPlanetsToDelete)
 | 
			
		||||
                    innerCache.RemoveKey(name);
 | 
			
		||||
                foreach (var planet in allPlayerPlanets)
 | 
			
		||||
                {
 | 
			
		||||
                    var playerPlanet = innerCache.Lookup(planet.Name);
 | 
			
		||||
                    if (playerPlanet.HasValue)
 | 
			
		||||
                        playerPlanet.Value.Planet = planet;
 | 
			
		||||
                    else
 | 
			
		||||
                        innerCache.Add(new PlayerPlanetViewModel(planet));
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        );
 | 
			
		||||
        
 | 
			
		||||
        _planetsReloadedSubject.OnNext(Unit.Default);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user