public static void ProcessNewThing(List <ShipDefinition> shipDefinitions, Thing t, string name = null) { if (!(t is Building) && t.def.building?.shipPart != true) { return; } var ships = shipDefinitions.Where(s => s.ShouldAddToShip(t)).ToList(); if (ships.Count == 1) { ships[0].AddToShip(t); } else if (ships.Count > 1) { ships[0].AddToShip(t); shipDefinitions.RemoveAll(s => ships.Contains(s)); shipDefinitions.Add(ships.Aggregate((a, b) => a.MergeWith(b))); } else if (t.def.building?.shipPart == true) { var newShip = new ShipDefinition(); newShip.name = name; newShip.AddToShip(t); shipDefinitions.Add(newShip); } }
public void Register(Thing t) { if (!processUpdates || !(t is Building)) { return; } ShipDefinition.ProcessNewThing(shipDefinitions, t); }
public void RemoveWholeShip(ShipDefinition def) { shipDefinitions.Remove(def); }
public void AddWholeShip(ShipDefinition def) { shipDefinitions.Add(def); }