public override void DesignateMultiCell(IEnumerable <IntVec3> cells) { List <IntVec3> list = cells.ToList(); bool flag = false; if (list.Count == 1) { Zone zone = base.Map.zoneManager.ZoneAt(list[0]); if (zone != null) { if (zone.GetType() == zoneTypeToPlace) { SelectedZone = zone; } return; } } if (SelectedZone == null) { Zone zone2 = null; foreach (IntVec3 cell in cells) { Zone zone3 = base.Map.zoneManager.ZoneAt(cell); if (zone3 != null && zone3.GetType() == zoneTypeToPlace) { if (zone2 == null) { zone2 = zone3; } else if (zone3 != zone2) { zone2 = null; break; } } } SelectedZone = zone2; } list.RemoveAll((IntVec3 c) => base.Map.zoneManager.ZoneAt(c) != null); if (list.Count == 0 || (TutorSystem.TutorialMode && !TutorSystem.AllowAction(new EventPack(base.TutorTagDesignate, list)))) { return; } if (SelectedZone == null) { SelectedZone = MakeNewZone(); base.Map.zoneManager.RegisterZone(SelectedZone); SelectedZone.AddCell(list[0]); list.RemoveAt(0); } while (true) { flag = true; int count = list.Count; for (int num = list.Count - 1; num >= 0; num--) { bool flag2 = false; for (int i = 0; i < 4; i++) { IntVec3 c2 = list[num] + GenAdj.CardinalDirections[i]; if (c2.InBounds(base.Map) && base.Map.zoneManager.ZoneAt(c2) == SelectedZone) { flag2 = true; break; } } if (flag2) { SelectedZone.AddCell(list[num]); list.RemoveAt(num); } } if (list.Count == 0) { break; } if (list.Count == count) { SelectedZone = MakeNewZone(); base.Map.zoneManager.RegisterZone(SelectedZone); SelectedZone.AddCell(list[0]); list.RemoveAt(0); } } SelectedZone.CheckContiguous(); Finalize(flag); TutorSystem.Notify_Event(new EventPack(base.TutorTagDesignate, list)); }