public static void OpenDeitySelectMenu(Building_SacrificialAltar altar, DeityType deityType) { var list = new List <FloatMenuOption> { new FloatMenuOption("(" + "NoneLower".Translate() + ")", delegate { altar.Map.GetComponent <MapComponent_SacrificeTracker>().lastUsedAltar = altar; altar.tempCurrentSacrificeDeity = null; }) }; foreach (var current in DeityTracker.Get.DeityCache.Keys) { if (current.discovered == false) { continue; } Action action; var localDeity = current; action = delegate { MapComponent_SacrificeTracker.Get(altar.Map).lastUsedAltar = altar; switch (deityType) { case DeityType.WorshipDeity: altar.tempCurrentWorshipDeity = localDeity; break; case DeityType.OfferingDeity: altar.tempCurrentOfferingDeity = localDeity; break; case DeityType.SacrificeDeity: altar.tempCurrentSacrificeDeity = localDeity; altar.tempCurrentSpell = null; break; } }; bool extraPartOnGUI(Rect rect) { return(DeityInfoCardButton(rect.x + 5f, rect.y + ((rect.height - 24f) / 2f), current)); } list.Add(new FloatMenuOption(localDeity.LabelCap, action, MenuOptionPriority.Default, null, null, 29f, extraPartOnGUI)); } Find.WindowStack.Add(new FloatMenu(list)); }
public static void OpenActorSelectMenu(Building_SacrificialAltar altar, ActorType actorType) { /// /// Error Handling /// if (altar == null) { Utility.ErrorReport("Altar Null Exception"); return; } if (altar.Map == null) { Utility.ErrorReport("Map Null Exception"); } if (altar.Map.mapPawns == null) { Utility.ErrorReport("mapPawns Null Exception"); return; } if (altar.Map.mapPawns.FreeColonistsSpawned == null) { Utility.ErrorReport("FreeColonistsSpawned Null Exception"); return; } //if (altar.Map.mapPawns.FreeColonistsSpawnedCount <= 0) //{ // Cthulhu.Utility.ErrorReport("Colonist Count Less Than or Equal To 0 Exception"); // return; //} /// /// Get Actor List /// var actorList = new List <Pawn>(); var s = new StringBuilder(); switch (actorType) { case ActorType.executioner: case ActorType.offerer: // Cycle through candidates foreach (var candidate in altar.Map.mapPawns.FreeColonistsSpawned) { if (!CultUtility.IsCultistAvailable(candidate)) { continue; } // Executioners must be able to use tool and move. if (candidate.health.capacities.CapableOf(PawnCapacityDefOf.Manipulation) && candidate.health.capacities.CapableOf(PawnCapacityDefOf.Moving)) { // Add the actors. actorList.Add(candidate); Utility.DebugReport("Actor List :: Added " + candidate.Name); } } Utility.DebugReport(s.ToString()); break; case ActorType.preacher: // Cycle through candidates foreach (var candidate in altar.Map.mapPawns.FreeColonistsSpawned) { if (!CultUtility.IsCultistAvailable(candidate)) { continue; } // Preachers must be able to move and talk. if (candidate.health.capacities.CapableOf(PawnCapacityDefOf.Moving) && candidate.health.capacities.CapableOf(PawnCapacityDefOf.Talking)) { // Add the actors. actorList.Add(candidate); Utility.DebugReport("Actor List :: Added " + candidate.Name); } } Utility.DebugReport(s.ToString()); break; case ActorType.prisoner: /// /// ERROR HANDLING /// if (altar.Map.mapPawns.PrisonersOfColonySpawned == null) { Messages.Message("No prisoners available.", MessageTypeDefOf.RejectInput); return; } if (altar.Map.mapPawns.PrisonersOfColonySpawnedCount <= 0) { Messages.Message("No prisoners available.", MessageTypeDefOf.RejectInput); return; } /// Cycle through possible candidates in the map's prisoner list foreach (var candidate in altar.Map.mapPawns.PrisonersOfColonySpawned) { if (!Utility.IsActorAvailable(candidate, true)) { continue; } actorList.Add(candidate); } break; case ActorType.animalSacrifice: /// /// ERROR HANDLING /// if (altar.Map.mapPawns.AllPawnsSpawned == null) { Messages.Message("No " + actorType + "s available.", MessageTypeDefOf.RejectInput); return; } if (altar.Map.mapPawns.AllPawnsSpawnedCount <= 0) { Messages.Message("No " + actorType + "s available.", MessageTypeDefOf.RejectInput); return; } /// Cycle through possible candidates in the player's owned animals list. foreach (var candidate in altar.Map.mapPawns.AllPawnsSpawned) { if (!Utility.IsActorAvailable(candidate, true)) { continue; } if (candidate.Faction != Faction.OfPlayer) { continue; } if (candidate.RaceProps == null) { continue; } if (!candidate.RaceProps.Animal) { continue; } actorList.Add(candidate); } break; } /// Let the player know there are no prisoners available. if (actorList != null) { if (actorList.Count <= 0) { Messages.Message("No " + actorType + "s available.", MessageTypeDefOf.RejectInput); return; } } /// /// Create float menus /// //There must always be a none. var list = new List <FloatMenuOption> { new FloatMenuOption("(" + "NoneLower".Translate() + ")", delegate { altar.tempExecutioner = null; }) }; foreach (var actor in actorList) { Action action; var localCol = actor; action = delegate { switch (actorType) { case ActorType.executioner: MapComponent_SacrificeTracker.Get(altar.Map).lastUsedAltar = altar; altar.tempExecutioner = localCol; break; case ActorType.preacher: altar.tempPreacher = localCol; break; case ActorType.offerer: MapComponent_SacrificeTracker.Get(altar.Map).lastUsedAltar = altar; altar.tempOfferer = localCol; break; case ActorType.prisoner: MapComponent_SacrificeTracker.Get(altar.Map).lastUsedAltar = altar; MapComponent_SacrificeTracker.Get(altar.Map).lastSacrificeType = CultUtility.SacrificeType.human; altar.tempSacrifice = localCol; break; case ActorType.animalSacrifice: MapComponent_SacrificeTracker.Get(altar.Map).lastUsedAltar = altar; MapComponent_SacrificeTracker.Get(altar.Map).lastSacrificeType = CultUtility.SacrificeType.animal; altar.tempSacrifice = localCol; break; } }; list.Add(new FloatMenuOption(localCol.LabelShort, action)); } Find.WindowStack.Add(new FloatMenu(list)); }