using System.Collections.Generic; using System.Linq; using Assets.Common; using Assets.Voronoi; namespace Assets.Cities { public class City : IHasMetadata { public List Sites { get; set; } = new List(); public Graph Roads { get; set; } = new Graph(); public Graph FieldBoundaries { get; set; } = new Graph(); public List Fields { get; set; } = new List(); public List<(int, int)> Edges = new List<(int, int)>(); public Point Center { get; set; } public float RangeOfInfluence { get; set; } = 0; public City() { } public City(List sites) { Sites = sites; } public void AddSite(MapSite site) { Sites.Add(site); FixBoundaryEdges(site); } private void FixBoundaryEdges(MapSite site) { var a = Edges; var b = site.Edges.Select(x => x.Item1 < x.Item2 ? x : (x.Item2, x.Item1)); Edges = a.Union(b).Except(a.Intersect(b)).ToList(); } public Metadata Metadata { get; } = new Metadata(); } }