public static void Notify_ZoneStockpileRemoved(Zone_Stockpile stockpile) { foreach (Bill current in BillUtility.GlobalBills()) { current.ValidateSettings(); } }
public static void Notify_ZoneStockpileRemoved(Zone_Stockpile stockpile) { foreach (Bill item in GlobalBills()) { item.ValidateSettings(); } }
public override void SetStoreMode(BillStoreModeDef mode, Zone_Stockpile zone = null) { storeMode = mode; storeZone = zone; if (storeMode == BillStoreModeDefOf.SpecificStockpile != (storeZone != null)) { Log.ErrorOnce("Inconsistent bill StoreMode data set", 75645354); } }
private IEnumerable <Widgets.DropdownMenuElement <Zone_Stockpile> > GenerateStockpileInclusion() { yield return(new Widgets.DropdownMenuElement <Zone_Stockpile> { option = new FloatMenuOption("IncludeFromAll".Translate(), delegate() { this.bill.includeFromZone = null; }, MenuOptionPriority.Default, null, null, 0f, null, null), payload = null }); List <SlotGroup> groupList = this.bill.billStack.billGiver.Map.haulDestinationManager.AllGroupsListInPriorityOrder; int groupCount = groupList.Count; for (int i = 0; i < groupCount; i++) { SlotGroup group = groupList[i]; Zone_Stockpile stockpile = group.parent as Zone_Stockpile; if (stockpile != null) { if (!this.bill.recipe.WorkerCounter.CanPossiblyStoreInStockpile(this.bill, stockpile)) { yield return(new Widgets.DropdownMenuElement <Zone_Stockpile> { option = new FloatMenuOption(string.Format("{0} ({1})", "IncludeSpecific".Translate(new object[] { group.parent.SlotYielderLabel() }), "IncompatibleLower".Translate()), null, MenuOptionPriority.Default, null, null, 0f, null, null), payload = stockpile }); } else { yield return(new Widgets.DropdownMenuElement <Zone_Stockpile> { option = new FloatMenuOption("IncludeSpecific".Translate(new object[] { group.parent.SlotYielderLabel() }), delegate() { this.bill.includeFromZone = stockpile; }, MenuOptionPriority.Default, null, null, 0f, null, null), payload = stockpile }); } } } yield break; }
public override void ValidateSettings() { base.ValidateSettings(); if (storeZone != null) { if (!storeZone.zoneManager.AllZones.Contains(storeZone)) { if (this != BillUtility.Clipboard) { Messages.Message("MessageBillValidationStoreZoneDeleted".Translate(LabelCap, billStack.billGiver.LabelShort.CapitalizeFirst(), storeZone.label), billStack.billGiver as Thing, MessageTypeDefOf.NegativeEvent); } SetStoreMode(BillStoreModeDefOf.DropOnFloor); } else if (base.Map != null && !base.Map.zoneManager.AllZones.Contains(storeZone)) { if (this != BillUtility.Clipboard) { Messages.Message("MessageBillValidationStoreZoneUnavailable".Translate(LabelCap, billStack.billGiver.LabelShort.CapitalizeFirst(), storeZone.label), billStack.billGiver as Thing, MessageTypeDefOf.NegativeEvent); } SetStoreMode(BillStoreModeDefOf.DropOnFloor); } } else if (storeMode == BillStoreModeDefOf.SpecificStockpile) { SetStoreMode(BillStoreModeDefOf.DropOnFloor); Log.ErrorOnce("Found SpecificStockpile bill store mode without associated stockpile, recovering", 46304128); } if (includeFromZone == null) { return; } if (!includeFromZone.zoneManager.AllZones.Contains(includeFromZone)) { if (this != BillUtility.Clipboard) { Messages.Message("MessageBillValidationIncludeZoneDeleted".Translate(LabelCap, billStack.billGiver.LabelShort.CapitalizeFirst(), includeFromZone.label), billStack.billGiver as Thing, MessageTypeDefOf.NegativeEvent); } includeFromZone = null; } else if (base.Map != null && !base.Map.zoneManager.AllZones.Contains(includeFromZone)) { if (this != BillUtility.Clipboard) { Messages.Message("MessageBillValidationIncludeZoneUnavailable".Translate(LabelCap, billStack.billGiver.LabelShort.CapitalizeFirst(), includeFromZone.label), billStack.billGiver as Thing, MessageTypeDefOf.NegativeEvent); } includeFromZone = null; } }
private IEnumerable <Widgets.DropdownMenuElement <Zone_Stockpile> > GenerateStockpileInclusion() { Widgets.DropdownMenuElement <Zone_Stockpile> dropdownMenuElement = new Widgets.DropdownMenuElement <Zone_Stockpile> { option = new FloatMenuOption("IncludeFromAll".Translate(), delegate { bill.includeFromZone = null; }), payload = null }; yield return(dropdownMenuElement); List <SlotGroup> groupList = bill.billStack.billGiver.Map.haulDestinationManager.AllGroupsListInPriorityOrder; int groupCount = groupList.Count; int i = 0; while (i < groupCount) { SlotGroup slotGroup = groupList[i]; Zone_Stockpile stockpile = slotGroup.parent as Zone_Stockpile; if (stockpile != null) { if (!bill.recipe.WorkerCounter.CanPossiblyStoreInStockpile(bill, stockpile)) { dropdownMenuElement = new Widgets.DropdownMenuElement <Zone_Stockpile> { option = new FloatMenuOption(string.Format("{0} ({1})", "IncludeSpecific".Translate(slotGroup.parent.SlotYielderLabel()), "IncompatibleLower".Translate()), null), payload = stockpile }; yield return(dropdownMenuElement); } else { dropdownMenuElement = new Widgets.DropdownMenuElement <Zone_Stockpile> { option = new FloatMenuOption("IncludeSpecific".Translate(slotGroup.parent.SlotYielderLabel()), delegate { bill.includeFromZone = stockpile; }), payload = stockpile }; yield return(dropdownMenuElement); } } int num = i + 1; i = num; } }
public virtual void SetStoreMode(BillStoreModeDef mode, Zone_Stockpile zone = null) { Log.ErrorOnce("Tried to set store mode of a non-production bill", 27190980, false); }
public static void MakeColony(params ColonyMakerFlag[] flags) { bool godMode = DebugSettings.godMode; DebugSettings.godMode = true; Thing.allowDestroyNonDestroyable = true; if (Autotests_ColonyMaker.usedCells == null) { Autotests_ColonyMaker.usedCells = new BoolGrid(Autotests_ColonyMaker.Map); } else { Autotests_ColonyMaker.usedCells.ClearAndResizeTo(Autotests_ColonyMaker.Map); } Autotests_ColonyMaker.overRect = new CellRect(Autotests_ColonyMaker.Map.Center.x - 50, Autotests_ColonyMaker.Map.Center.z - 50, 100, 100); Autotests_ColonyMaker.DeleteAllSpawnedPawns(); GenDebug.ClearArea(Autotests_ColonyMaker.overRect, Find.VisibleMap); if (flags.Contains(ColonyMakerFlag.Animals)) { foreach (PawnKindDef current in from k in DefDatabase <PawnKindDef> .AllDefs where k.RaceProps.Animal select k) { CellRect cellRect; if (!Autotests_ColonyMaker.TryGetFreeRect(6, 3, out cellRect)) { return; } cellRect = cellRect.ContractedBy(1); foreach (IntVec3 current2 in cellRect) { Autotests_ColonyMaker.Map.terrainGrid.SetTerrain(current2, TerrainDefOf.Concrete); } GenSpawn.Spawn(PawnGenerator.GeneratePawn(current, null), cellRect.Cells.ElementAt(0), Autotests_ColonyMaker.Map); IntVec3 intVec = cellRect.Cells.ElementAt(1); Pawn p = (Pawn)GenSpawn.Spawn(PawnGenerator.GeneratePawn(current, null), intVec, Autotests_ColonyMaker.Map); HealthUtility.DamageUntilDead(p); Corpse thing = (Corpse)intVec.GetThingList(Find.VisibleMap).First((Thing t) => t is Corpse); CompRottable compRottable = thing.TryGetComp <CompRottable>(); if (compRottable != null) { compRottable.RotProgress += 1200000f; } if (current.RaceProps.leatherDef != null) { GenSpawn.Spawn(current.RaceProps.leatherDef, cellRect.Cells.ElementAt(2), Autotests_ColonyMaker.Map); } if (current.RaceProps.meatDef != null) { GenSpawn.Spawn(current.RaceProps.meatDef, cellRect.Cells.ElementAt(3), Autotests_ColonyMaker.Map); } } } if (flags.Contains(ColonyMakerFlag.ConduitGrid)) { Designator_Build designator_Build = new Designator_Build(ThingDefOf.PowerConduit); for (int i = Autotests_ColonyMaker.overRect.minX; i < Autotests_ColonyMaker.overRect.maxX; i++) { for (int j = Autotests_ColonyMaker.overRect.minZ; j < Autotests_ColonyMaker.overRect.maxZ; j += 7) { designator_Build.DesignateSingleCell(new IntVec3(i, 0, j)); } } for (int k2 = Autotests_ColonyMaker.overRect.minZ; k2 < Autotests_ColonyMaker.overRect.maxZ; k2++) { for (int l = Autotests_ColonyMaker.overRect.minX; l < Autotests_ColonyMaker.overRect.maxX; l += 7) { designator_Build.DesignateSingleCell(new IntVec3(l, 0, k2)); } } } if (flags.Contains(ColonyMakerFlag.PowerPlants)) { List <ThingDef> list = new List <ThingDef> { ThingDefOf.SolarGenerator, ThingDefOf.WindTurbine }; for (int m = 0; m < 8; m++) { if (Autotests_ColonyMaker.TryMakeBuilding(list[m % list.Count]) == null) { Log.Message("Could not make solar generator."); break; } } } if (flags.Contains(ColonyMakerFlag.Batteries)) { for (int n = 0; n < 6; n++) { Thing thing2 = Autotests_ColonyMaker.TryMakeBuilding(ThingDefOf.Battery); if (thing2 == null) { Log.Message("Could not make battery."); break; } ((Building_Battery)thing2).GetComp <CompPowerBattery>().AddEnergy(999999f); } } if (flags.Contains(ColonyMakerFlag.WorkTables)) { IEnumerable <ThingDef> enumerable = from def in DefDatabase <ThingDef> .AllDefs where typeof(Building_WorkTable).IsAssignableFrom(def.thingClass) select def; foreach (ThingDef current3 in enumerable) { Thing thing3 = Autotests_ColonyMaker.TryMakeBuilding(current3); if (thing3 == null) { Log.Message("Could not make worktable: " + current3.defName); break; } Building_WorkTable building_WorkTable = thing3 as Building_WorkTable; if (building_WorkTable != null) { foreach (RecipeDef current4 in building_WorkTable.def.AllRecipes) { building_WorkTable.billStack.AddBill(current4.MakeNewBill()); } } } } if (flags.Contains(ColonyMakerFlag.AllBuildings)) { IEnumerable <ThingDef> enumerable2 = from def in DefDatabase <ThingDef> .AllDefs where def.category == ThingCategory.Building && def.designationCategory != null select def; foreach (ThingDef current5 in enumerable2) { if (current5 != ThingDefOf.PowerConduit) { if (Autotests_ColonyMaker.TryMakeBuilding(current5) == null) { Log.Message("Could not make building: " + current5.defName); break; } } } } CellRect rect; if (!Autotests_ColonyMaker.TryGetFreeRect(33, 33, out rect)) { Log.Error("Could not get wallable rect"); } rect = rect.ContractedBy(1); if (flags.Contains(ColonyMakerFlag.AllItems)) { List <ThingDef> itemDefs = (from def in DefDatabase <ThingDef> .AllDefs where DebugThingPlaceHelper.IsDebugSpawnable(def) && def.category == ThingCategory.Item select def).ToList <ThingDef>(); Autotests_ColonyMaker.FillWithItems(rect, itemDefs); } else if (flags.Contains(ColonyMakerFlag.ItemsRawFood)) { List <ThingDef> list2 = new List <ThingDef>(); list2.Add(ThingDefOf.RawPotatoes); Autotests_ColonyMaker.FillWithItems(rect, list2); } if (flags.Contains(ColonyMakerFlag.Filth)) { foreach (IntVec3 current6 in rect) { GenSpawn.Spawn(ThingDefOf.FilthDirt, current6, Autotests_ColonyMaker.Map); } } if (flags.Contains(ColonyMakerFlag.ItemsWall)) { CellRect cellRect2 = rect.ExpandedBy(1); Designator_Build designator_Build2 = new Designator_Build(ThingDefOf.Wall); designator_Build2.SetStuffDef(ThingDefOf.WoodLog); foreach (IntVec3 current7 in cellRect2.EdgeCells) { designator_Build2.DesignateSingleCell(current7); } } if (flags.Contains(ColonyMakerFlag.ColonistsMany)) { Autotests_ColonyMaker.MakeColonists(15, Autotests_ColonyMaker.overRect.CenterCell); } else if (flags.Contains(ColonyMakerFlag.ColonistOne)) { Autotests_ColonyMaker.MakeColonists(1, Autotests_ColonyMaker.overRect.CenterCell); } if (flags.Contains(ColonyMakerFlag.Fire)) { CellRect cellRect3; if (!Autotests_ColonyMaker.TryGetFreeRect(30, 30, out cellRect3)) { Log.Error("Could not get free rect for fire."); } ThingDef plantTreeOak = ThingDefOf.PlantTreeOak; foreach (IntVec3 current8 in cellRect3) { GenSpawn.Spawn(plantTreeOak, current8, Autotests_ColonyMaker.Map); } foreach (IntVec3 current9 in cellRect3) { if (current9.x % 7 == 0 && current9.z % 7 == 0) { GenExplosion.DoExplosion(current9, Find.VisibleMap, 3.9f, DamageDefOf.Flame, null, -1, null, null, null, null, 0f, 1, false, null, 0f, 1, 0f, false); } } } if (flags.Contains(ColonyMakerFlag.ColonistsHungry)) { Autotests_ColonyMaker.DoToColonists(0.4f, delegate(Pawn col) { col.needs.food.CurLevel = Mathf.Max(0f, Rand.Range(-0.05f, 0.05f)); }); } if (flags.Contains(ColonyMakerFlag.ColonistsTired)) { Autotests_ColonyMaker.DoToColonists(0.4f, delegate(Pawn col) { col.needs.rest.CurLevel = Mathf.Max(0f, Rand.Range(-0.05f, 0.05f)); }); } if (flags.Contains(ColonyMakerFlag.ColonistsInjured)) { Autotests_ColonyMaker.DoToColonists(0.4f, delegate(Pawn col) { DamageDef def = (from d in DefDatabase <DamageDef> .AllDefs where d.externalViolence select d).RandomElement <DamageDef>(); col.TakeDamage(new DamageInfo(def, 10, -1f, null, null, null, DamageInfo.SourceCategory.ThingOrUnknown)); }); } if (flags.Contains(ColonyMakerFlag.ColonistsDiseased)) { foreach (HediffDef current10 in from d in DefDatabase <HediffDef> .AllDefs where d.hediffClass != typeof(Hediff_AddedPart) && (d.HasComp(typeof(HediffComp_Immunizable)) || d.HasComp(typeof(HediffComp_GrowthMode))) select d) { Pawn pawn = PawnGenerator.GeneratePawn(Faction.OfPlayer.def.basicMemberKind, Faction.OfPlayer); CellRect cellRect4; Autotests_ColonyMaker.TryGetFreeRect(1, 1, out cellRect4); GenSpawn.Spawn(pawn, cellRect4.CenterCell, Autotests_ColonyMaker.Map); pawn.health.AddHediff(current10, null, null); } } if (flags.Contains(ColonyMakerFlag.Beds)) { IEnumerable <ThingDef> source = from def in DefDatabase <ThingDef> .AllDefs where def.thingClass == typeof(Building_Bed) select def; int freeColonistsCount = Autotests_ColonyMaker.Map.mapPawns.FreeColonistsCount; for (int num = 0; num < freeColonistsCount; num++) { if (Autotests_ColonyMaker.TryMakeBuilding(source.RandomElement <ThingDef>()) == null) { Log.Message("Could not make beds."); break; } } } if (flags.Contains(ColonyMakerFlag.Stockpiles)) { Designator_ZoneAddStockpile_Resources designator_ZoneAddStockpile_Resources = new Designator_ZoneAddStockpile_Resources(); foreach (StoragePriority priority in Enum.GetValues(typeof(StoragePriority))) { CellRect cellRect5; Autotests_ColonyMaker.TryGetFreeRect(7, 7, out cellRect5); cellRect5 = cellRect5.ContractedBy(1); designator_ZoneAddStockpile_Resources.DesignateMultiCell(cellRect5.Cells); Zone_Stockpile zone_Stockpile = (Zone_Stockpile)Autotests_ColonyMaker.Map.zoneManager.ZoneAt(cellRect5.CenterCell); zone_Stockpile.settings.Priority = priority; } } if (flags.Contains(ColonyMakerFlag.GrowingZones)) { Zone_Growing dummyZone = new Zone_Growing(Autotests_ColonyMaker.Map.zoneManager); foreach (ThingDef current11 in from d in DefDatabase <ThingDef> .AllDefs where d.plant != null && GenPlant.CanSowOnGrower(d, dummyZone) select d) { CellRect cellRect6; if (!Autotests_ColonyMaker.TryGetFreeRect(6, 6, out cellRect6)) { Log.Error("Could not get growing zone rect."); } cellRect6 = cellRect6.ContractedBy(1); foreach (IntVec3 current12 in cellRect6) { Autotests_ColonyMaker.Map.terrainGrid.SetTerrain(current12, TerrainDefOf.Soil); } Designator_ZoneAdd_Growing designator_ZoneAdd_Growing = new Designator_ZoneAdd_Growing(); designator_ZoneAdd_Growing.DesignateMultiCell(cellRect6.Cells); Zone_Growing zone_Growing = (Zone_Growing)Autotests_ColonyMaker.Map.zoneManager.ZoneAt(cellRect6.CenterCell); zone_Growing.SetPlantDefToGrow(current11); } dummyZone.Delete(); } Autotests_ColonyMaker.ClearAllHomeArea(); Autotests_ColonyMaker.FillWithHomeArea(Autotests_ColonyMaker.overRect); DebugSettings.godMode = godMode; Thing.allowDestroyNonDestroyable = false; }
public static void MakeColony(params ColonyMakerFlag[] flags) { bool godMode = DebugSettings.godMode; DebugSettings.godMode = true; Thing.allowDestroyNonDestroyable = true; if (usedCells == null) { usedCells = new BoolGrid(Map); } else { usedCells.ClearAndResizeTo(Map); } IntVec3 center = Map.Center; int minX = center.x - 50; IntVec3 center2 = Map.Center; overRect = new CellRect(minX, center2.z - 50, 100, 100); DeleteAllSpawnedPawns(); GenDebug.ClearArea(overRect, Find.CurrentMap); if (flags.Contains(ColonyMakerFlag.Animals)) { foreach (PawnKindDef item in from k in DefDatabase <PawnKindDef> .AllDefs where k.RaceProps.Animal select k) { if (!TryGetFreeRect(6, 3, out CellRect result)) { return; } result = result.ContractedBy(1); foreach (IntVec3 item2 in result) { Map.terrainGrid.SetTerrain(item2, TerrainDefOf.Concrete); } GenSpawn.Spawn(PawnGenerator.GeneratePawn(item), result.Cells.ElementAt(0), Map); IntVec3 intVec = result.Cells.ElementAt(1); Pawn p = (Pawn)GenSpawn.Spawn(PawnGenerator.GeneratePawn(item), intVec, Map); HealthUtility.DamageUntilDead(p); Corpse thing = (Corpse)intVec.GetThingList(Find.CurrentMap).First((Thing t) => t is Corpse); CompRottable compRottable = thing.TryGetComp <CompRottable>(); if (compRottable != null) { compRottable.RotProgress += 1200000f; } if (item.RaceProps.leatherDef != null) { GenSpawn.Spawn(item.RaceProps.leatherDef, result.Cells.ElementAt(2), Map); } if (item.RaceProps.meatDef != null) { GenSpawn.Spawn(item.RaceProps.meatDef, result.Cells.ElementAt(3), Map); } } } if (flags.Contains(ColonyMakerFlag.ConduitGrid)) { Designator_Build designator_Build = new Designator_Build(ThingDefOf.PowerConduit); for (int i = overRect.minX; i < overRect.maxX; i++) { for (int j = overRect.minZ; j < overRect.maxZ; j += 7) { designator_Build.DesignateSingleCell(new IntVec3(i, 0, j)); } } for (int l = overRect.minZ; l < overRect.maxZ; l++) { for (int m = overRect.minX; m < overRect.maxX; m += 7) { designator_Build.DesignateSingleCell(new IntVec3(m, 0, l)); } } } if (flags.Contains(ColonyMakerFlag.PowerPlants)) { List <ThingDef> list = new List <ThingDef>(); list.Add(ThingDefOf.SolarGenerator); list.Add(ThingDefOf.WindTurbine); List <ThingDef> list2 = list; for (int n = 0; n < 8; n++) { if (TryMakeBuilding(list2[n % list2.Count]) == null) { Log.Message("Could not make solar generator."); break; } } } if (flags.Contains(ColonyMakerFlag.Batteries)) { for (int num = 0; num < 6; num++) { Thing thing2 = TryMakeBuilding(ThingDefOf.Battery); if (thing2 == null) { Log.Message("Could not make battery."); break; } ((Building_Battery)thing2).GetComp <CompPowerBattery>().AddEnergy(999999f); } } if (flags.Contains(ColonyMakerFlag.WorkTables)) { IEnumerable <ThingDef> enumerable = from def in DefDatabase <ThingDef> .AllDefs where typeof(Building_WorkTable).IsAssignableFrom(def.thingClass) select def; foreach (ThingDef item3 in enumerable) { Thing thing3 = TryMakeBuilding(item3); if (thing3 == null) { Log.Message("Could not make worktable: " + item3.defName); break; } Building_WorkTable building_WorkTable = thing3 as Building_WorkTable; if (building_WorkTable != null) { foreach (RecipeDef allRecipe in building_WorkTable.def.AllRecipes) { building_WorkTable.billStack.AddBill(allRecipe.MakeNewBill()); } } } } if (flags.Contains(ColonyMakerFlag.AllBuildings)) { IEnumerable <ThingDef> enumerable2 = from def in DefDatabase <ThingDef> .AllDefs where def.category == ThingCategory.Building && def.BuildableByPlayer select def; foreach (ThingDef item4 in enumerable2) { if (item4 != ThingDefOf.PowerConduit) { Thing thing4 = TryMakeBuilding(item4); if (thing4 == null) { Log.Message("Could not make building: " + item4.defName); break; } } } } if (!TryGetFreeRect(33, 33, out CellRect result2)) { Log.Error("Could not get wallable rect"); } result2 = result2.ContractedBy(1); if (flags.Contains(ColonyMakerFlag.AllItems)) { List <ThingDef> itemDefs = (from def in DefDatabase <ThingDef> .AllDefs where DebugThingPlaceHelper.IsDebugSpawnable(def) && def.category == ThingCategory.Item select def).ToList(); FillWithItems(result2, itemDefs); } else if (flags.Contains(ColonyMakerFlag.ItemsRawFood)) { List <ThingDef> list3 = new List <ThingDef>(); list3.Add(ThingDefOf.RawPotatoes); FillWithItems(result2, list3); } if (flags.Contains(ColonyMakerFlag.Filth)) { foreach (IntVec3 item5 in result2) { GenSpawn.Spawn(ThingDefOf.Filth_Dirt, item5, Map); } } if (flags.Contains(ColonyMakerFlag.ItemsWall)) { CellRect cellRect = result2.ExpandedBy(1); Designator_Build designator_Build2 = new Designator_Build(ThingDefOf.Wall); designator_Build2.SetStuffDef(ThingDefOf.WoodLog); foreach (IntVec3 edgeCell in cellRect.EdgeCells) { designator_Build2.DesignateSingleCell(edgeCell); } } if (flags.Contains(ColonyMakerFlag.ColonistsMany)) { MakeColonists(15, overRect.CenterCell); } else if (flags.Contains(ColonyMakerFlag.ColonistOne)) { MakeColonists(1, overRect.CenterCell); } if (flags.Contains(ColonyMakerFlag.Fire)) { if (!TryGetFreeRect(30, 30, out CellRect result3)) { Log.Error("Could not get free rect for fire."); } ThingDef plant_TreeOak = ThingDefOf.Plant_TreeOak; foreach (IntVec3 item6 in result3) { GenSpawn.Spawn(plant_TreeOak, item6, Map); } foreach (IntVec3 item7 in result3) { IntVec3 current9 = item7; if (current9.x % 7 == 0 && current9.z % 7 == 0) { GenExplosion.DoExplosion(current9, Find.CurrentMap, 3.9f, DamageDefOf.Flame, null); } } } if (flags.Contains(ColonyMakerFlag.ColonistsHungry)) { DoToColonists(0.4f, delegate(Pawn col) { col.needs.food.CurLevel = Mathf.Max(0f, Rand.Range(-0.05f, 0.05f)); }); } if (flags.Contains(ColonyMakerFlag.ColonistsTired)) { DoToColonists(0.4f, delegate(Pawn col) { col.needs.rest.CurLevel = Mathf.Max(0f, Rand.Range(-0.05f, 0.05f)); }); } if (flags.Contains(ColonyMakerFlag.ColonistsInjured)) { DoToColonists(0.4f, delegate(Pawn col) { DamageDef def2 = (from d in DefDatabase <DamageDef> .AllDefs where d.ExternalViolenceFor(null) select d).RandomElement(); col.TakeDamage(new DamageInfo(def2, 10f)); }); } if (flags.Contains(ColonyMakerFlag.ColonistsDiseased)) { foreach (HediffDef item8 in from d in DefDatabase <HediffDef> .AllDefs where d.hediffClass != typeof(Hediff_AddedPart) && (d.HasComp(typeof(HediffComp_Immunizable)) || d.HasComp(typeof(HediffComp_GrowthMode))) select d) { Pawn pawn = PawnGenerator.GeneratePawn(Faction.OfPlayer.def.basicMemberKind, Faction.OfPlayer); TryGetFreeRect(1, 1, out CellRect result4); GenSpawn.Spawn(pawn, result4.CenterCell, Map); pawn.health.AddHediff(item8); } } if (flags.Contains(ColonyMakerFlag.Beds)) { IEnumerable <ThingDef> source = from def in DefDatabase <ThingDef> .AllDefs where def.thingClass == typeof(Building_Bed) select def; int freeColonistsCount = Map.mapPawns.FreeColonistsCount; for (int num2 = 0; num2 < freeColonistsCount; num2++) { if (TryMakeBuilding(source.RandomElement()) == null) { Log.Message("Could not make beds."); break; } } } if (flags.Contains(ColonyMakerFlag.Stockpiles)) { Designator_ZoneAddStockpile_Resources designator_ZoneAddStockpile_Resources = new Designator_ZoneAddStockpile_Resources(); IEnumerator enumerator11 = Enum.GetValues(typeof(StoragePriority)).GetEnumerator(); try { while (enumerator11.MoveNext()) { StoragePriority priority = (StoragePriority)enumerator11.Current; TryGetFreeRect(7, 7, out CellRect result5); result5 = result5.ContractedBy(1); designator_ZoneAddStockpile_Resources.DesignateMultiCell(result5.Cells); Zone_Stockpile zone_Stockpile = (Zone_Stockpile)Map.zoneManager.ZoneAt(result5.CenterCell); zone_Stockpile.settings.Priority = priority; } } finally { IDisposable disposable; if ((disposable = (enumerator11 as IDisposable)) != null) { disposable.Dispose(); } } } if (flags.Contains(ColonyMakerFlag.GrowingZones)) { Zone_Growing dummyZone = new Zone_Growing(Map.zoneManager); Map.zoneManager.RegisterZone(dummyZone); foreach (ThingDef item9 in from d in DefDatabase <ThingDef> .AllDefs where d.plant != null && PlantUtility.CanSowOnGrower(d, dummyZone) select d) { if (!TryGetFreeRect(6, 6, out CellRect result6)) { Log.Error("Could not get growing zone rect."); } result6 = result6.ContractedBy(1); foreach (IntVec3 item10 in result6) { Map.terrainGrid.SetTerrain(item10, TerrainDefOf.Soil); } Designator_ZoneAdd_Growing designator_ZoneAdd_Growing = new Designator_ZoneAdd_Growing(); designator_ZoneAdd_Growing.DesignateMultiCell(result6.Cells); (Map.zoneManager.ZoneAt(result6.CenterCell) as Zone_Growing)?.SetPlantDefToGrow(item9); } dummyZone.Delete(); } ClearAllHomeArea(); FillWithHomeArea(overRect); DebugSettings.godMode = godMode; Thing.allowDestroyNonDestroyable = false; }
public override void DoWindowContents(Rect inRect) { Text.Font = GameFont.Medium; Rect rect = new Rect(0f, 0f, 400f, 50f); Widgets.Label(rect, this.bill.LabelCap); float width = (float)((int)((inRect.width - 34f) / 3f)); Rect rect2 = new Rect(0f, 80f, width, inRect.height - 80f); Rect rect3 = new Rect(rect2.xMax + 17f, 50f, width, inRect.height - 50f - this.CloseButSize.y); Rect rect4 = new Rect(rect3.xMax + 17f, 50f, 0f, inRect.height - 50f - this.CloseButSize.y); rect4.xMax = inRect.xMax; Text.Font = GameFont.Small; Listing_Standard listing_Standard = new Listing_Standard(); listing_Standard.Begin(rect3); Listing_Standard listing_Standard2 = listing_Standard.BeginSection((float)Dialog_BillConfig.RepeatModeSubdialogHeight); if (listing_Standard2.ButtonText(this.bill.repeatMode.LabelCap, null)) { BillRepeatModeUtility.MakeConfigFloatMenu(this.bill); } listing_Standard2.Gap(12f); if (this.bill.repeatMode == BillRepeatModeDefOf.RepeatCount) { listing_Standard2.Label("RepeatCount".Translate(new object[] { this.bill.repeatCount }), -1f, null); listing_Standard2.IntEntry(ref this.bill.repeatCount, ref this.repeatCountEditBuffer, 1); } else if (this.bill.repeatMode == BillRepeatModeDefOf.TargetCount) { string text = "CurrentlyHave".Translate() + ": "; text += this.bill.recipe.WorkerCounter.CountProducts(this.bill); text += " / "; text += ((this.bill.targetCount >= 999999) ? "Infinite".Translate().ToLower() : this.bill.targetCount.ToString()); string text2 = this.bill.recipe.WorkerCounter.ProductsDescription(this.bill); if (!text2.NullOrEmpty()) { string text3 = text; text = string.Concat(new string[] { text3, "\n", "CountingProducts".Translate(), ": ", text2 }); } listing_Standard2.Label(text, -1f, null); int targetCount = this.bill.targetCount; listing_Standard2.IntEntry(ref this.bill.targetCount, ref this.targetCountEditBuffer, this.bill.recipe.targetCountAdjustment); this.bill.unpauseWhenYouHave = Mathf.Max(0, this.bill.unpauseWhenYouHave + (this.bill.targetCount - targetCount)); ThingDef producedThingDef = this.bill.recipe.ProducedThingDef; if (producedThingDef != null) { if (producedThingDef.IsWeapon || producedThingDef.IsApparel) { listing_Standard2.CheckboxLabeled("IncludeEquipped".Translate(), ref this.bill.includeEquipped, null); } if (producedThingDef.IsApparel && producedThingDef.apparel.careIfWornByCorpse) { listing_Standard2.CheckboxLabeled("IncludeTainted".Translate(), ref this.bill.includeTainted, null); } Widgets.Dropdown <Bill_Production, Zone_Stockpile>(listing_Standard2.GetRect(30f), this.bill, (Bill_Production b) => b.includeFromZone, (Bill_Production b) => this.GenerateStockpileInclusion(), (this.bill.includeFromZone != null) ? "IncludeSpecific".Translate(new object[] { this.bill.includeFromZone.label }) : "IncludeFromAll".Translate(), null, null, null, null, false); Widgets.FloatRange(listing_Standard2.GetRect(28f), 10, ref this.bill.hpRange, 0f, 1f, "HitPoints", ToStringStyle.PercentZero); if (producedThingDef.HasComp(typeof(CompQuality))) { Widgets.QualityRange(listing_Standard2.GetRect(28f), 2, ref this.bill.qualityRange); } if (producedThingDef.MadeFromStuff) { listing_Standard2.CheckboxLabeled("LimitToAllowedStuff".Translate(), ref this.bill.limitToAllowedStuff, null); } } } if (this.bill.repeatMode == BillRepeatModeDefOf.TargetCount) { listing_Standard2.Gap(12f); listing_Standard2.Gap(12f); listing_Standard2.CheckboxLabeled("PauseWhenSatisfied".Translate(), ref this.bill.pauseWhenSatisfied, null); if (this.bill.pauseWhenSatisfied) { listing_Standard2.Label("UnpauseWhenYouHave".Translate() + ": " + this.bill.unpauseWhenYouHave.ToString("F0"), -1f, null); listing_Standard2.IntEntry(ref this.bill.unpauseWhenYouHave, ref this.unpauseCountEditBuffer, this.bill.recipe.targetCountAdjustment); if (this.bill.unpauseWhenYouHave >= this.bill.targetCount) { this.bill.unpauseWhenYouHave = this.bill.targetCount - 1; this.unpauseCountEditBuffer = this.bill.unpauseWhenYouHave.ToStringCached(); } } } listing_Standard.EndSection(listing_Standard2); listing_Standard.Gap(12f); Listing_Standard listing_Standard3 = listing_Standard.BeginSection((float)Dialog_BillConfig.StoreModeSubdialogHeight); string text4 = string.Format(this.bill.GetStoreMode().LabelCap, (this.bill.GetStoreZone() == null) ? "" : this.bill.GetStoreZone().SlotYielderLabel()); if (this.bill.GetStoreZone() != null && !this.bill.recipe.WorkerCounter.CanPossiblyStoreInStockpile(this.bill, this.bill.GetStoreZone())) { text4 += string.Format(" ({0})", "IncompatibleLower".Translate()); Text.Font = GameFont.Tiny; } if (listing_Standard3.ButtonText(text4, null)) { Text.Font = GameFont.Small; List <FloatMenuOption> list = new List <FloatMenuOption>(); foreach (BillStoreModeDef billStoreModeDef in from bsm in DefDatabase <BillStoreModeDef> .AllDefs orderby bsm.listOrder select bsm) { if (billStoreModeDef == BillStoreModeDefOf.SpecificStockpile) { List <SlotGroup> allGroupsListInPriorityOrder = this.bill.billStack.billGiver.Map.haulDestinationManager.AllGroupsListInPriorityOrder; int count = allGroupsListInPriorityOrder.Count; for (int i = 0; i < count; i++) { SlotGroup group = allGroupsListInPriorityOrder[i]; Zone_Stockpile zone_Stockpile = group.parent as Zone_Stockpile; if (zone_Stockpile != null) { if (!this.bill.recipe.WorkerCounter.CanPossiblyStoreInStockpile(this.bill, zone_Stockpile)) { list.Add(new FloatMenuOption(string.Format("{0} ({1})", string.Format(billStoreModeDef.LabelCap, group.parent.SlotYielderLabel()), "IncompatibleLower".Translate()), null, MenuOptionPriority.Default, null, null, 0f, null, null)); } else { list.Add(new FloatMenuOption(string.Format(billStoreModeDef.LabelCap, group.parent.SlotYielderLabel()), delegate() { this.bill.SetStoreMode(BillStoreModeDefOf.SpecificStockpile, (Zone_Stockpile)group.parent); }, MenuOptionPriority.Default, null, null, 0f, null, null)); } } } } else { BillStoreModeDef smLocal = billStoreModeDef; list.Add(new FloatMenuOption(smLocal.LabelCap, delegate() { this.bill.SetStoreMode(smLocal, null); }, MenuOptionPriority.Default, null, null, 0f, null, null)); } } Find.WindowStack.Add(new FloatMenu(list)); } Text.Font = GameFont.Small; listing_Standard.EndSection(listing_Standard3); listing_Standard.Gap(12f); Listing_Standard listing_Standard4 = listing_Standard.BeginSection((float)Dialog_BillConfig.WorkerSelectionSubdialogHeight); Widgets.Dropdown <Bill_Production, Pawn>(listing_Standard4.GetRect(30f), this.bill, (Bill_Production b) => b.pawnRestriction, (Bill_Production b) => this.GeneratePawnRestrictionOptions(), (this.bill.pawnRestriction != null) ? this.bill.pawnRestriction.LabelShortCap : "AnyWorker".Translate(), null, null, null, null, false); if (this.bill.pawnRestriction == null && this.bill.recipe.workSkill != null) { listing_Standard4.Label("AllowedSkillRange".Translate(new object[] { this.bill.recipe.workSkill.label }), -1f, null); listing_Standard4.IntRange(ref this.bill.allowedSkillRange, 0, 20); } listing_Standard.EndSection(listing_Standard4); listing_Standard.End(); Rect rect5 = rect4; rect5.yMin = rect5.yMax - (float)Dialog_BillConfig.IngredientRadiusSubdialogHeight; rect4.yMax = rect5.yMin - 17f; bool flag = this.bill.GetStoreZone() == null || this.bill.recipe.WorkerCounter.CanPossiblyStoreInStockpile(this.bill, this.bill.GetStoreZone()); ThingFilterUI.DoThingFilterConfigWindow(rect4, ref this.thingFilterScrollPosition, this.bill.ingredientFilter, this.bill.recipe.fixedIngredientFilter, 4, null, this.bill.recipe.forceHiddenSpecialFilters, this.bill.recipe.GetPremultipliedSmallIngredients(), this.bill.Map); bool flag2 = this.bill.GetStoreZone() == null || this.bill.recipe.WorkerCounter.CanPossiblyStoreInStockpile(this.bill, this.bill.GetStoreZone()); if (flag && !flag2) { Messages.Message("MessageBillValidationStoreZoneInsufficient".Translate(new object[] { this.bill.LabelCap, this.bill.billStack.billGiver.LabelShort.CapitalizeFirst(), this.bill.GetStoreZone().label }), this.bill.billStack.billGiver as Thing, MessageTypeDefOf.RejectInput, false); } Listing_Standard listing_Standard5 = new Listing_Standard(); listing_Standard5.Begin(rect5); listing_Standard5.Label("IngredientSearchRadius".Translate() + ": " + ((this.bill.ingredientSearchRadius != 999f) ? this.bill.ingredientSearchRadius.ToString("F0") : "Unlimited".Translate()), -1f, null); this.bill.ingredientSearchRadius = listing_Standard5.Slider(this.bill.ingredientSearchRadius, 3f, 100f); if (this.bill.ingredientSearchRadius >= 100f) { this.bill.ingredientSearchRadius = 999f; } listing_Standard5.End(); Listing_Standard listing_Standard6 = new Listing_Standard(); listing_Standard6.Begin(rect2); if (this.bill.suspended) { if (listing_Standard6.ButtonText("Suspended".Translate(), null)) { this.bill.suspended = false; SoundDefOf.Click.PlayOneShotOnCamera(null); } } else if (listing_Standard6.ButtonText("NotSuspended".Translate(), null)) { this.bill.suspended = true; SoundDefOf.Click.PlayOneShotOnCamera(null); } StringBuilder stringBuilder = new StringBuilder(); if (this.bill.recipe.description != null) { stringBuilder.AppendLine(this.bill.recipe.description); stringBuilder.AppendLine(); } stringBuilder.AppendLine("WorkAmount".Translate() + ": " + this.bill.recipe.WorkAmountTotal(null).ToStringWorkAmount()); for (int j = 0; j < this.bill.recipe.ingredients.Count; j++) { IngredientCount ingredientCount = this.bill.recipe.ingredients[j]; if (!ingredientCount.filter.Summary.NullOrEmpty()) { stringBuilder.AppendLine(this.bill.recipe.IngredientValueGetter.BillRequirementsDescription(this.bill.recipe, ingredientCount)); } } stringBuilder.AppendLine(); string text5 = this.bill.recipe.IngredientValueGetter.ExtraDescriptionLine(this.bill.recipe); if (text5 != null) { stringBuilder.AppendLine(text5); stringBuilder.AppendLine(); } if (!this.bill.recipe.skillRequirements.NullOrEmpty <SkillRequirement>()) { stringBuilder.AppendLine("MinimumSkills".Translate()); stringBuilder.AppendLine(this.bill.recipe.MinSkillString); } Text.Font = GameFont.Small; string text6 = stringBuilder.ToString(); if (Text.CalcHeight(text6, rect2.width) > rect2.height) { Text.Font = GameFont.Tiny; } listing_Standard6.Label(text6, -1f, null); Text.Font = GameFont.Small; listing_Standard6.End(); if (this.bill.recipe.products.Count == 1) { ThingDef thingDef = this.bill.recipe.products[0].thingDef; Widgets.InfoCardButton(rect2.x, rect4.y, thingDef, GenStuff.DefaultStuffFor(thingDef)); } }
public override void DoWindowContents(Rect inRect) { Text.Font = GameFont.Medium; Widgets.Label(new Rect(0f, 0f, 400f, 50f), bill.LabelCap); float width = (int)((inRect.width - 34f) / 3f); Rect rect = new Rect(0f, 80f, width, inRect.height - 80f); Rect rect2 = new Rect(rect.xMax + 17f, 50f, width, inRect.height - 50f - CloseButSize.y); Rect rect3 = new Rect(rect2.xMax + 17f, 50f, 0f, inRect.height - 50f - CloseButSize.y); rect3.xMax = inRect.xMax; Text.Font = GameFont.Small; Listing_Standard listing_Standard = new Listing_Standard(); listing_Standard.Begin(rect2); Listing_Standard listing_Standard2 = listing_Standard.BeginSection(RepeatModeSubdialogHeight); if (listing_Standard2.ButtonText(bill.repeatMode.LabelCap)) { BillRepeatModeUtility.MakeConfigFloatMenu(bill); } listing_Standard2.Gap(); if (bill.repeatMode == BillRepeatModeDefOf.RepeatCount) { listing_Standard2.Label("RepeatCount".Translate(bill.repeatCount)); listing_Standard2.IntEntry(ref bill.repeatCount, ref repeatCountEditBuffer); } else if (bill.repeatMode == BillRepeatModeDefOf.TargetCount) { string arg = "CurrentlyHave".Translate() + ": "; arg += bill.recipe.WorkerCounter.CountProducts(bill); arg += " / "; arg += ((bill.targetCount < 999999) ? bill.targetCount.ToString() : "Infinite".Translate().ToLower().ToString()); string str = bill.recipe.WorkerCounter.ProductsDescription(bill); if (!str.NullOrEmpty()) { arg += "\n" + "CountingProducts".Translate() + ": " + str.CapitalizeFirst(); } listing_Standard2.Label(arg); int targetCount = bill.targetCount; listing_Standard2.IntEntry(ref bill.targetCount, ref targetCountEditBuffer, bill.recipe.targetCountAdjustment); bill.unpauseWhenYouHave = Mathf.Max(0, bill.unpauseWhenYouHave + (bill.targetCount - targetCount)); ThingDef producedThingDef = bill.recipe.ProducedThingDef; if (producedThingDef != null) { if (producedThingDef.IsWeapon || producedThingDef.IsApparel) { listing_Standard2.CheckboxLabeled("IncludeEquipped".Translate(), ref bill.includeEquipped); } if (producedThingDef.IsApparel && producedThingDef.apparel.careIfWornByCorpse) { listing_Standard2.CheckboxLabeled("IncludeTainted".Translate(), ref bill.includeTainted); } Widgets.Dropdown(listing_Standard2.GetRect(30f), bill, (Bill_Production b) => b.includeFromZone, (Bill_Production b) => GenerateStockpileInclusion(), (bill.includeFromZone == null) ? "IncludeFromAll".Translate() : "IncludeSpecific".Translate(bill.includeFromZone.label)); if (bill.recipe.products.Any((ThingDefCountClass prod) => prod.thingDef.useHitPoints)) { Widgets.FloatRange(listing_Standard2.GetRect(28f), 975643279, ref bill.hpRange, 0f, 1f, "HitPoints", ToStringStyle.PercentZero); bill.hpRange.min = Mathf.Round(bill.hpRange.min * 100f) / 100f; bill.hpRange.max = Mathf.Round(bill.hpRange.max * 100f) / 100f; } if (producedThingDef.HasComp(typeof(CompQuality))) { Widgets.QualityRange(listing_Standard2.GetRect(28f), 1098906561, ref bill.qualityRange); } if (producedThingDef.MadeFromStuff) { listing_Standard2.CheckboxLabeled("LimitToAllowedStuff".Translate(), ref bill.limitToAllowedStuff); } } } if (bill.repeatMode == BillRepeatModeDefOf.TargetCount) { listing_Standard2.CheckboxLabeled("PauseWhenSatisfied".Translate(), ref bill.pauseWhenSatisfied); if (bill.pauseWhenSatisfied) { listing_Standard2.Label("UnpauseWhenYouHave".Translate() + ": " + bill.unpauseWhenYouHave.ToString("F0")); listing_Standard2.IntEntry(ref bill.unpauseWhenYouHave, ref unpauseCountEditBuffer, bill.recipe.targetCountAdjustment); if (bill.unpauseWhenYouHave >= bill.targetCount) { bill.unpauseWhenYouHave = bill.targetCount - 1; unpauseCountEditBuffer = bill.unpauseWhenYouHave.ToStringCached(); } } } listing_Standard.EndSection(listing_Standard2); listing_Standard.Gap(); Listing_Standard listing_Standard3 = listing_Standard.BeginSection(StoreModeSubdialogHeight); string text = string.Format(bill.GetStoreMode().LabelCap, (bill.GetStoreZone() != null) ? bill.GetStoreZone().SlotYielderLabel() : ""); if (bill.GetStoreZone() != null && !bill.recipe.WorkerCounter.CanPossiblyStoreInStockpile(bill, bill.GetStoreZone())) { text += string.Format(" ({0})", "IncompatibleLower".Translate()); Text.Font = GameFont.Tiny; } if (listing_Standard3.ButtonText(text)) { Text.Font = GameFont.Small; List <FloatMenuOption> list = new List <FloatMenuOption>(); foreach (BillStoreModeDef item in DefDatabase <BillStoreModeDef> .AllDefs.OrderBy((BillStoreModeDef bsm) => bsm.listOrder)) { if (item == BillStoreModeDefOf.SpecificStockpile) { List <SlotGroup> allGroupsListInPriorityOrder = bill.billStack.billGiver.Map.haulDestinationManager.AllGroupsListInPriorityOrder; int count = allGroupsListInPriorityOrder.Count; for (int i = 0; i < count; i++) { SlotGroup group = allGroupsListInPriorityOrder[i]; Zone_Stockpile zone_Stockpile = group.parent as Zone_Stockpile; if (zone_Stockpile != null) { if (!bill.recipe.WorkerCounter.CanPossiblyStoreInStockpile(bill, zone_Stockpile)) { list.Add(new FloatMenuOption(string.Format("{0} ({1})", string.Format(item.LabelCap, group.parent.SlotYielderLabel()), "IncompatibleLower".Translate()), null)); } else { list.Add(new FloatMenuOption(string.Format(item.LabelCap, group.parent.SlotYielderLabel()), delegate { bill.SetStoreMode(BillStoreModeDefOf.SpecificStockpile, (Zone_Stockpile)group.parent); })); } } } } else { BillStoreModeDef smLocal = item; list.Add(new FloatMenuOption(smLocal.LabelCap, delegate { bill.SetStoreMode(smLocal); })); } } Find.WindowStack.Add(new FloatMenu(list)); } Text.Font = GameFont.Small; listing_Standard.EndSection(listing_Standard3); listing_Standard.Gap(); Listing_Standard listing_Standard4 = listing_Standard.BeginSection(WorkerSelectionSubdialogHeight); Widgets.Dropdown(listing_Standard4.GetRect(30f), bill, (Bill_Production b) => b.pawnRestriction, (Bill_Production b) => GeneratePawnRestrictionOptions(), (bill.pawnRestriction == null) ? "AnyWorker".TranslateSimple() : bill.pawnRestriction.LabelShortCap); if (bill.pawnRestriction == null && bill.recipe.workSkill != null) { listing_Standard4.Label("AllowedSkillRange".Translate(bill.recipe.workSkill.label)); listing_Standard4.IntRange(ref bill.allowedSkillRange, 0, 20); } listing_Standard.EndSection(listing_Standard4); listing_Standard.End(); Rect rect4 = rect3; bool flag = true; for (int j = 0; j < bill.recipe.ingredients.Count; j++) { if (!bill.recipe.ingredients[j].IsFixedIngredient) { flag = false; break; } } if (!flag) { rect4.yMin = rect4.yMax - (float)IngredientRadiusSubdialogHeight; rect3.yMax = rect4.yMin - 17f; bool num = bill.GetStoreZone() == null || bill.recipe.WorkerCounter.CanPossiblyStoreInStockpile(bill, bill.GetStoreZone()); ThingFilterUI.DoThingFilterConfigWindow(rect3, ref thingFilterScrollPosition, bill.ingredientFilter, bill.recipe.fixedIngredientFilter, 4, null, bill.recipe.forceHiddenSpecialFilters, forceHideHitPointsConfig: false, bill.recipe.GetPremultipliedSmallIngredients(), bill.Map); bool flag2 = bill.GetStoreZone() == null || bill.recipe.WorkerCounter.CanPossiblyStoreInStockpile(bill, bill.GetStoreZone()); if (num && !flag2) { Messages.Message("MessageBillValidationStoreZoneInsufficient".Translate(bill.LabelCap, bill.billStack.billGiver.LabelShort.CapitalizeFirst(), bill.GetStoreZone().label), bill.billStack.billGiver as Thing, MessageTypeDefOf.RejectInput, historical: false); } } else { rect4.yMin = 50f; } Listing_Standard listing_Standard5 = new Listing_Standard(); listing_Standard5.Begin(rect4); string str2 = "IngredientSearchRadius".Translate().Truncate(rect4.width * 0.6f); string str3 = (bill.ingredientSearchRadius == 999f) ? "Unlimited".TranslateSimple().Truncate(rect4.width * 0.3f) : bill.ingredientSearchRadius.ToString("F0"); listing_Standard5.Label(str2 + ": " + str3); bill.ingredientSearchRadius = listing_Standard5.Slider((bill.ingredientSearchRadius > 100f) ? 100f : bill.ingredientSearchRadius, 3f, 100f); if (bill.ingredientSearchRadius >= 100f) { bill.ingredientSearchRadius = 999f; } listing_Standard5.End(); Listing_Standard listing_Standard6 = new Listing_Standard(); listing_Standard6.Begin(rect); if (bill.suspended) { if (listing_Standard6.ButtonText("Suspended".Translate())) { bill.suspended = false; SoundDefOf.Click.PlayOneShotOnCamera(); } } else if (listing_Standard6.ButtonText("NotSuspended".Translate())) { bill.suspended = true; SoundDefOf.Click.PlayOneShotOnCamera(); } StringBuilder stringBuilder = new StringBuilder(); if (bill.recipe.description != null) { stringBuilder.AppendLine(bill.recipe.description); stringBuilder.AppendLine(); } stringBuilder.AppendLine("WorkAmount".Translate() + ": " + bill.recipe.WorkAmountTotal(null).ToStringWorkAmount()); for (int k = 0; k < bill.recipe.ingredients.Count; k++) { IngredientCount ingredientCount = bill.recipe.ingredients[k]; if (!ingredientCount.filter.Summary.NullOrEmpty()) { stringBuilder.AppendLine(bill.recipe.IngredientValueGetter.BillRequirementsDescription(bill.recipe, ingredientCount)); } } stringBuilder.AppendLine(); string text2 = bill.recipe.IngredientValueGetter.ExtraDescriptionLine(bill.recipe); if (text2 != null) { stringBuilder.AppendLine(text2); stringBuilder.AppendLine(); } if (!bill.recipe.skillRequirements.NullOrEmpty()) { stringBuilder.AppendLine("MinimumSkills".Translate()); stringBuilder.AppendLine(bill.recipe.MinSkillString); } Text.Font = GameFont.Small; string text3 = stringBuilder.ToString(); if (Text.CalcHeight(text3, rect.width) > rect.height) { Text.Font = GameFont.Tiny; } listing_Standard6.Label(text3); Text.Font = GameFont.Small; listing_Standard6.End(); if (bill.recipe.products.Count == 1) { ThingDef thingDef = bill.recipe.products[0].thingDef; Widgets.InfoCardButton(rect.x, rect3.y, thingDef, GenStuff.DefaultStuffFor(thingDef)); } }
public override void DoWindowContents(Rect inRect) { Text.Font = GameFont.Medium; Rect rect = new Rect(0f, 0f, 400f, 50f); Widgets.Label(rect, bill.LabelCap); float num = (float)(int)((inRect.width - 34f) / 3f); Rect rect2 = new Rect(0f, 80f, num, inRect.height - 80f); float x = rect2.xMax + 17f; float width = num; float num2 = inRect.height - 50f; Vector2 closeButSize = CloseButSize; Rect rect3 = new Rect(x, 50f, width, num2 - closeButSize.y); float x2 = rect3.xMax + 17f; float num3 = inRect.height - 50f; Vector2 closeButSize2 = CloseButSize; Rect rect4 = new Rect(x2, 50f, 0f, num3 - closeButSize2.y); rect4.xMax = inRect.xMax; Text.Font = GameFont.Small; Listing_Standard listing_Standard = new Listing_Standard(); listing_Standard.Begin(rect3); Listing_Standard listing_Standard2 = listing_Standard.BeginSection((float)RepeatModeSubdialogHeight); if (listing_Standard2.ButtonText(bill.repeatMode.LabelCap)) { BillRepeatModeUtility.MakeConfigFloatMenu(bill); } listing_Standard2.Gap(); if (bill.repeatMode == BillRepeatModeDefOf.RepeatCount) { listing_Standard2.Label("RepeatCount".Translate(bill.repeatCount)); listing_Standard2.IntEntry(ref bill.repeatCount, ref repeatCountEditBuffer); } else if (bill.repeatMode == BillRepeatModeDefOf.TargetCount) { string arg = "CurrentlyHave".Translate() + ": "; arg += bill.recipe.WorkerCounter.CountProducts(bill); arg += " / "; arg += ((bill.targetCount >= 999999) ? "Infinite".Translate().ToLower() : bill.targetCount.ToString()); string str = bill.recipe.WorkerCounter.ProductsDescription(bill); if (!str.NullOrEmpty()) { string text = arg; arg = text + "\n" + "CountingProducts".Translate() + ": " + str.CapitalizeFirst(); } listing_Standard2.Label(arg); int targetCount = bill.targetCount; listing_Standard2.IntEntry(ref bill.targetCount, ref targetCountEditBuffer, bill.recipe.targetCountAdjustment); bill.unpauseWhenYouHave = Mathf.Max(0, bill.unpauseWhenYouHave + (bill.targetCount - targetCount)); ThingDef producedThingDef = bill.recipe.ProducedThingDef; if (producedThingDef != null) { if (producedThingDef.IsWeapon || producedThingDef.IsApparel) { listing_Standard2.CheckboxLabeled("IncludeEquipped".Translate(), ref bill.includeEquipped); } if (producedThingDef.IsApparel && producedThingDef.apparel.careIfWornByCorpse) { listing_Standard2.CheckboxLabeled("IncludeTainted".Translate(), ref bill.includeTainted); } Widgets.Dropdown(listing_Standard2.GetRect(30f), bill, (Bill_Production b) => b.includeFromZone, (Bill_Production b) => GenerateStockpileInclusion(), (bill.includeFromZone != null) ? "IncludeSpecific".Translate(bill.includeFromZone.label) : "IncludeFromAll".Translate()); Widgets.FloatRange(listing_Standard2.GetRect(28f), 975643279, ref bill.hpRange, 0f, 1f, "HitPoints", ToStringStyle.PercentZero); if (producedThingDef.HasComp(typeof(CompQuality))) { Widgets.QualityRange(listing_Standard2.GetRect(28f), 1098906561, ref bill.qualityRange); } if (producedThingDef.MadeFromStuff) { listing_Standard2.CheckboxLabeled("LimitToAllowedStuff".Translate(), ref bill.limitToAllowedStuff); } } } if (bill.repeatMode == BillRepeatModeDefOf.TargetCount) { listing_Standard2.CheckboxLabeled("PauseWhenSatisfied".Translate(), ref bill.pauseWhenSatisfied); if (bill.pauseWhenSatisfied) { listing_Standard2.Label("UnpauseWhenYouHave".Translate() + ": " + bill.unpauseWhenYouHave.ToString("F0")); listing_Standard2.IntEntry(ref bill.unpauseWhenYouHave, ref unpauseCountEditBuffer, bill.recipe.targetCountAdjustment); if (bill.unpauseWhenYouHave >= bill.targetCount) { bill.unpauseWhenYouHave = bill.targetCount - 1; unpauseCountEditBuffer = bill.unpauseWhenYouHave.ToStringCached(); } } } listing_Standard.EndSection(listing_Standard2); listing_Standard.Gap(); Listing_Standard listing_Standard3 = listing_Standard.BeginSection((float)StoreModeSubdialogHeight); string text2 = string.Format(bill.GetStoreMode().LabelCap, (bill.GetStoreZone() == null) ? string.Empty : bill.GetStoreZone().SlotYielderLabel()); if (bill.GetStoreZone() != null && !bill.recipe.WorkerCounter.CanPossiblyStoreInStockpile(bill, bill.GetStoreZone())) { text2 += string.Format(" ({0})", "IncompatibleLower".Translate()); Text.Font = GameFont.Tiny; } if (listing_Standard3.ButtonText(text2)) { Text.Font = GameFont.Small; List <FloatMenuOption> list = new List <FloatMenuOption>(); foreach (BillStoreModeDef item in from bsm in DefDatabase <BillStoreModeDef> .AllDefs orderby bsm.listOrder select bsm) { if (item == BillStoreModeDefOf.SpecificStockpile) { List <SlotGroup> allGroupsListInPriorityOrder = bill.billStack.billGiver.Map.haulDestinationManager.AllGroupsListInPriorityOrder; int count = allGroupsListInPriorityOrder.Count; for (int i = 0; i < count; i++) { SlotGroup group = allGroupsListInPriorityOrder[i]; Zone_Stockpile zone_Stockpile = group.parent as Zone_Stockpile; if (zone_Stockpile != null) { if (!bill.recipe.WorkerCounter.CanPossiblyStoreInStockpile(bill, zone_Stockpile)) { list.Add(new FloatMenuOption(string.Format("{0} ({1})", string.Format(item.LabelCap, group.parent.SlotYielderLabel()), "IncompatibleLower".Translate()), null)); } else { list.Add(new FloatMenuOption(string.Format(item.LabelCap, group.parent.SlotYielderLabel()), delegate { bill.SetStoreMode(BillStoreModeDefOf.SpecificStockpile, (Zone_Stockpile)group.parent); })); } } } } else { BillStoreModeDef smLocal = item; list.Add(new FloatMenuOption(smLocal.LabelCap, delegate { bill.SetStoreMode(smLocal); })); } } Find.WindowStack.Add(new FloatMenu(list)); } Text.Font = GameFont.Small; listing_Standard.EndSection(listing_Standard3); listing_Standard.Gap(); Listing_Standard listing_Standard4 = listing_Standard.BeginSection((float)WorkerSelectionSubdialogHeight); Widgets.Dropdown(listing_Standard4.GetRect(30f), bill, (Bill_Production b) => b.pawnRestriction, (Bill_Production b) => GeneratePawnRestrictionOptions(), (bill.pawnRestriction != null) ? bill.pawnRestriction.LabelShortCap : "AnyWorker".Translate()); if (bill.pawnRestriction == null && bill.recipe.workSkill != null) { listing_Standard4.Label("AllowedSkillRange".Translate(bill.recipe.workSkill.label)); listing_Standard4.IntRange(ref bill.allowedSkillRange, 0, 20); } listing_Standard.EndSection(listing_Standard4); listing_Standard.End(); Rect rect5 = rect4; rect5.yMin = rect5.yMax - (float)IngredientRadiusSubdialogHeight; rect4.yMax = rect5.yMin - 17f; bool flag = bill.GetStoreZone() == null || bill.recipe.WorkerCounter.CanPossiblyStoreInStockpile(bill, bill.GetStoreZone()); Rect rect6 = rect4; ref Vector2 scrollPosition = ref thingFilterScrollPosition;