42 lines
1.3 KiB
C#
42 lines
1.3 KiB
C#
using System;
|
|
using System.ComponentModel;
|
|
using System.Reactive.Linq;
|
|
using DynamicData;
|
|
using DynamicData.Binding;
|
|
using Splat;
|
|
using StarsAssistant.Model;
|
|
using StarsAssistant.ViewModels;
|
|
|
|
namespace StarsAssistant.Services;
|
|
|
|
public class PlanetManager
|
|
{
|
|
protected Services.Game Game = Locator.Current.GetService<Services.Game>()!;
|
|
|
|
/// <summary>
|
|
/// SourceCache for DynamicData views
|
|
/// </summary>
|
|
private SourceCache<Planet, string> _planets = new(p => p.Name);
|
|
|
|
/// <summary>
|
|
/// Observable changeset showing all player planets converted to view models.
|
|
/// </summary>
|
|
public IObservable<IChangeSet<PlayerPlanetViewModel, string>> PlayerPlanetsSource
|
|
=> _planets
|
|
.Connect()
|
|
.Filter(planet => planet.OwnerId == Game.Player.Name)
|
|
.Transform(planet => new PlayerPlanetViewModel(planet));
|
|
|
|
public PlanetManager() {}
|
|
|
|
/// <summary>
|
|
/// Load the planet records from the database and push them into our source cache.
|
|
/// </summary>
|
|
public void InitFromDatabase()
|
|
{
|
|
using var db = Locator.Current.GetService<StarsDatabase>()!;
|
|
var allPlanets = db.Planet.ToList();
|
|
_planets.AddOrUpdate(allPlanets);
|
|
}
|
|
}
|