public void TryChangeWorshipValues(ChangeWorshipType type, bool value) { Cthulhu.Utility.DebugReport("Attempting to change worship values: " + type.ToString() + " " + value.ToString()); //Disabling auto-worship is not a hard thing. if (value == false) { if (type == ChangeWorshipType.EveningWorship) { this.OptionEvening = false; } if (type == ChangeWorshipType.MorningWorship) { this.OptionMorning = false; } return; } bool canChange = true; //Check if another altar exists. foreach (Building bld in Map.listerBuildings.allBuildingsColonist) { //Check all other altars if (bld is Building_SacrificialAltar) { Building_SacrificialAltar altar2 = bld as Building_SacrificialAltar; //You want to enable evening worship here? if (type == ChangeWorshipType.EveningWorship) { if (altar2.OptionEvening) { canChange = false; } } if (type == ChangeWorshipType.MorningWorship) { if (altar2.OptionMorning) { canChange = false; } } } } if (canChange) { if (type == ChangeWorshipType.MorningWorship) { this.OptionMorning = true; } if (type == ChangeWorshipType.EveningWorship) { this.OptionEvening = true; } } }
private static string AmountLabel(Building_SacrificialAltar altar) { if (altar.tempOfferingSize == CultUtility.OfferingSize.none) { return("None"); } else { return(altar.tempOfferingSize.ToString().CapitalizeFirst()); } }
private static string SpellDescription(Building_SacrificialAltar altar) { if (altar.tempCurrentSacrificeDeity == null || altar.tempCurrentSpell == null) { return("None"); } else { return(altar.tempCurrentSpell.description); } }
private static string SacrificeLabel(Building_SacrificialAltar altar) { if (altar.tempSacrifice == null) { return("None"); } else { return(altar.tempSacrifice.Name.ToStringShort); } }
public bool IsOffering(Thing thingToCheck, Building_SacrificialAltar altarDictionary) { foreach (ThingCount dictionary in altarDictionary.determinedOfferings) { if (thingToCheck.def == dictionary.Thing.def) { return(true); } } return(false); }
private static string SpellLabel(Building_SacrificialAltar altar) { if (altar.tempCurrentSacrificeDeity == null || altar.tempCurrentSpell == null) { return("None"); } else { return(altar.tempCurrentSpell.LabelCap); } }
private static string ExecutionerLabel(Building_SacrificialAltar altar) { if (altar.tempExecutioner == null) { return("None"); } else { return(altar.tempExecutioner.Name.ToStringShort); } }
private static string DeityLabel(Building_SacrificialAltar altar) { if (altar.tempCurrentWorshipDeity == null) { return("None"); } else { return(altar.tempCurrentWorshipDeity.LabelCap); } }
private static string DeityDescription(Building_SacrificialAltar altar) { if (altar.tempCurrentWorshipDeity == null) { return("None"); } var stringBuilder = new StringBuilder(); stringBuilder.Append(altar.tempCurrentWorshipDeity.def.description); return(stringBuilder.ToString()); }
public static string DeityDescription(Building_SacrificialAltar altar) { if (altar.tempCurrentSacrificeDeity == null) { return("None"); } StringBuilder stringBuilder = new StringBuilder(); stringBuilder.AppendLine(); stringBuilder.Append(altar.tempCurrentSacrificeDeity.def.description); return(stringBuilder.ToString()); }
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)); }
/* * private static void ForceListenersTest(Building_SacrificialAltar altar) * { * * IntVec3 result; * Building chair; * foreach (Pawn p in Find.MapPawns.AllPawnsSpawned.FindAll(x => x.RaceProps.intelligence == Intelligence.Humanlike)) * { * if (!SermonUtility.IsPreacher(p)) * { * if (!WatchBuildingUtility.TryFindBestWatchCell(altar, p, true, out result, out chair)) * { * * if (!WatchBuildingUtility.TryFindBestWatchCell(altar as Thing, p, false, out result, out chair)) * { * return; * } * } * if (chair != null) * { * Job J = new Job(CorruptionDefOfs.AttendSermon, altar.preacher, altar, chair); * p.QueueJob(J); * p.CurJob.EndCurrentJob(JobCondition.InterruptForced); * } * else * { * Job J = new Job(CorruptionDefOfs.AttendSermon, altar.preacher, altar, result); * p.QueueJob(J); * p.CurJob.EndCurrentJob(JobCondition.InterruptForced); * } * } * } * } */ public static void OpenAmountSelectMenu(Building_SacrificialAltar altar) { List <FloatMenuOption> list = new List <FloatMenuOption>(); list.Add(new FloatMenuOption("(" + "NoneLower".Translate() + ")", delegate { altar.tempOfferingSize = CultUtility.OfferingSize.none; }, MenuOptionPriority.Default, null, null, 0f, null)); Action action; action = delegate { altar.tempOfferingSize = CultUtility.OfferingSize.meagre; }; list.Add(new FloatMenuOption("Meagre".Translate(), action, MenuOptionPriority.Default, null, null, 0f, null)); Action action2; action2 = delegate { altar.tempOfferingSize = CultUtility.OfferingSize.decent; }; list.Add(new FloatMenuOption("Decent".Translate(), action2, MenuOptionPriority.Default, null, null, 0f, null)); Action action3; action3 = delegate { altar.tempOfferingSize = CultUtility.OfferingSize.sizable; }; list.Add(new FloatMenuOption("Sizable".Translate(), action3, MenuOptionPriority.Default, null, null, 0f, null)); Action action4; action4 = delegate { altar.tempOfferingSize = CultUtility.OfferingSize.worthy; }; list.Add(new FloatMenuOption("Worthy".Translate(), action4, MenuOptionPriority.Default, null, null, 0f, null)); Action action5; action5 = delegate { altar.tempOfferingSize = CultUtility.OfferingSize.impressive; }; list.Add(new FloatMenuOption("Impressive".Translate(), action5, MenuOptionPriority.Default, null, null, 0f, null)); Find.WindowStack.Add(new FloatMenu(list)); }
private static string PreacherLabel(Building_SacrificialAltar altar) { if (altar.tempPreacher == null) { altar.tempPreacher = CultUtility.DetermineBestPreacher(altar.Map); if (altar.tempPreacher == null) { return("None"); } return(altar.tempPreacher.Name.ToStringShort); } else { return(altar.tempPreacher.Name.ToStringShort); } }
public void ReceiveOffering(Pawn offerer, Building_SacrificialAltar altar, List <Thing> offerings) { StringBuilder s = new StringBuilder(); s.Append("Offering Report"); s.AppendLine(); s.Append("==============="); foreach (Thing offering in offerings) { s.AppendLine(); s.Append(offering.stackCount + " " + offering.ToString() + ": $" + offering.MarketValue.ToString() + " each. Total: $" + (offering.MarketValue * (float)offering.stackCount).ToString()); ConsumeOfferings(offering); } Cthulhu.Utility.DebugReport(s.ToString()); }
/* * private static void ForceListenersTest(Building_SacrificialAltar altar) * { * * IntVec3 result; * Building chair; * foreach (Pawn p in Find.MapPawns.AllPawnsSpawned.FindAll(x => x.RaceProps.intelligence == Intelligence.Humanlike)) * { * if (!SermonUtility.IsPreacher(p)) * { * if (!WatchBuildingUtility.TryFindBestWatchCell(altar, p, true, out result, out chair)) * { * * if (!WatchBuildingUtility.TryFindBestWatchCell(altar as Thing, p, false, out result, out chair)) * { * return; * } * } * if (chair != null) * { * Job J = new Job(CorruptionDefOfs.AttendSermon, altar.preacher, altar, chair); * p.QueueJob(J); * p.CurJob.EndCurrentJob(JobCondition.InterruptForced); * } * else * { * Job J = new Job(CorruptionDefOfs.AttendSermon, altar.preacher, altar, result); * p.QueueJob(J); * p.CurJob.EndCurrentJob(JobCondition.InterruptForced); * } * } * } * } */ public static void OpenAmountSelectMenu(Building_SacrificialAltar altar) { var list = new List <FloatMenuOption> { new FloatMenuOption("(" + "NoneLower".Translate() + ")", delegate { altar.tempOfferingSize = CultUtility.OfferingSize.none; }) }; void action() { altar.tempOfferingSize = CultUtility.OfferingSize.meagre; } list.Add(new FloatMenuOption("Meagre".Translate(), action)); void action2() { altar.tempOfferingSize = CultUtility.OfferingSize.decent; } list.Add(new FloatMenuOption("Decent".Translate(), action2)); void action3() { altar.tempOfferingSize = CultUtility.OfferingSize.sizable; } list.Add(new FloatMenuOption("Sizable".Translate(), action3)); void action4() { altar.tempOfferingSize = CultUtility.OfferingSize.worthy; } list.Add(new FloatMenuOption("Worthy".Translate(), action4)); void action5() { altar.tempOfferingSize = CultUtility.OfferingSize.impressive; } list.Add(new FloatMenuOption("Impressive".Translate(), action5)); Find.WindowStack.Add(new FloatMenu(list)); }
public void ClearSacrificeVariables() { lastUsedAltar.tempSacrifice = null; lastResult = CultUtility.SacrificeResult.none; // Default lastSacrificeType = CultUtility.SacrificeType.none; lastUsedAltar = null; //Default lastSideEffect = null; lastLocation = IntVec3.Invalid; wasDoubleTheFun = false; lastDoubleSideEffect = null; //lastSacrificeCongregation = null; lastRelation = null; lastSacrificeName = ""; ASMwasPet = false; ASMwasBonded = false; ASMwasExcMaster = false; HSMwasFamily = false; }
private static string DeityDescription(Building_SacrificialAltar altar) { if (altar.tempCurrentOfferingDeity == null) { return("None"); } var stringBuilder = new StringBuilder(); //stringBuilder.Append(altar.tempCurrentSacrificeDeity.LabelCap); stringBuilder.AppendLine(); stringBuilder.Append(altar.tempCurrentOfferingDeity.def.description); //stringBuilder.AppendLine(); //stringBuilder.Append("Standing: " + altar.tempCurrentSacrificeDeity.PlayerFavor.ToString()); //stringBuilder.AppendLine(); //stringBuilder.Append("Tier: " + altar.tempCurrentSacrificeDeity.PlayerTier.ToString()); return(stringBuilder.ToString()); }
public static void OpenExecutionerSelectMenu(Building_SacrificialAltar altar) { List <FloatMenuOption> list = new List <FloatMenuOption>(); list.Add(new FloatMenuOption("(" + "NoneLower".Translate() + ")", delegate { altar.tempExecutioner = null; }, MenuOptionPriority.Medium, null, null, 0f, null)); foreach (Pawn current in Find.MapPawns.FreeColonists) { Action action; Pawn localCol = current; action = delegate { MapComponent_SacrificeTracker.Get.lastUsedAltar = altar; altar.tempExecutioner = localCol; }; list.Add(new FloatMenuOption(localCol.LabelShort, action, MenuOptionPriority.Medium, null, null, 0f, null)); } Find.WindowStack.Add(new FloatMenu(list)); }
public static void OpenDeitySelectMenu(Building_SacrificialAltar altar) { var list = new List <FloatMenuOption> { new FloatMenuOption("(" + "NoneLower".Translate() + ")", delegate { //Map.GetComponent<MapComponent_SacrificeTracker>().lastUsedAltar = altar; altar.tempCurrentWorshipDeity = null; }) }; foreach (var current in DeityTracker.Get.DeityCache.Keys) { if (!current.discovered) { continue; } var localDeity = current; void Action() { //Map.GetComponent<MapComponent_SacrificeTracker>().lastUsedAltar = altar; altar.tempCurrentWorshipDeity = localDeity; //altar.tempCurrentSpell = null; } 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 OpenSpellSelectMenu(Building_SacrificialAltar altar) { List <FloatMenuOption> list = new List <FloatMenuOption>(); list.Add(new FloatMenuOption("(" + "NoneLower".Translate() + ")", delegate { altar.tempCurrentSpell = null; }, MenuOptionPriority.Medium, null, null, 0f, null)); if (altar.tempCurrentSacrificeDeity != null) { if (altar.tempCurrentSacrificeDeity.tier1Spells != null && altar.tempCurrentSacrificeDeity.PlayerTier > 0) { foreach (IncidentDef spell in altar.tempCurrentSacrificeDeity.tier1Spells) { Action action; IncidentDef localSpell = spell; action = delegate { MapComponent_SacrificeTracker.Get.lastUsedAltar = altar; altar.tempCurrentSpell = localSpell; }; list.Add(new FloatMenuOption(localSpell.LabelCap, action, MenuOptionPriority.Medium, null, null, 0f, null)); } } if (altar.tempCurrentSacrificeDeity.tier2Spells != null && altar.tempCurrentSacrificeDeity.PlayerTier > CosmicEntity.Tier.One) { foreach (IncidentDef spell in altar.tempCurrentSacrificeDeity.tier2Spells) { Action action2; IncidentDef localSpell = spell; action2 = delegate { MapComponent_SacrificeTracker.Get.lastUsedAltar = altar; altar.tempCurrentSpell = localSpell; }; list.Add(new FloatMenuOption(localSpell.LabelCap, action2, MenuOptionPriority.Medium, null, null, 0f, null)); } } if (altar.tempCurrentSacrificeDeity.tier3Spells != null && altar.tempCurrentSacrificeDeity.PlayerTier > CosmicEntity.Tier.Two) { foreach (IncidentDef spell in altar.tempCurrentSacrificeDeity.tier3Spells) { Action action3; IncidentDef localSpell = spell; action3 = delegate { MapComponent_SacrificeTracker.Get.lastUsedAltar = altar; altar.tempCurrentSpell = localSpell; }; list.Add(new FloatMenuOption(localSpell.LabelCap, action3, MenuOptionPriority.Medium, null, null, 0f, null)); } } if (altar.tempCurrentSacrificeDeity.finalSpell != null && altar.tempCurrentSacrificeDeity.PlayerTier > CosmicEntity.Tier.Three) { Action action4; IncidentDef localSpell = altar.tempCurrentSacrificeDeity.finalSpell; action4 = delegate { MapComponent_SacrificeTracker.Get.lastUsedAltar = altar; altar.tempCurrentSpell = localSpell; }; list.Add(new FloatMenuOption(localSpell.LabelCap, action4, MenuOptionPriority.Medium, null, null, 0f, null)); } } Find.WindowStack.Add(new FloatMenu(list)); }
public static void DrawTempleCard(Rect rect, Building_SacrificialAltar altar) { GUI.BeginGroup(rect); Rect rect2 = new Rect(rect.x + 2f, rect.y + 20f, 250f, 55f); Text.Font = GameFont.Medium; Widgets.Label(rect2, altar.RoomName); Text.Font = GameFont.Small; DrawRename(altar); Rect rect3 = rect2; //rect3.x += 2f; rect3.y = rect2.yMax + 30f; rect3.width = 210f; rect3.height = 25f; Widgets.Label(rect3, "Deity".Translate() + ": "); rect3.xMin = rect3.center.x - 15f; string label2 = DeityLabel(altar); if (Widgets.ButtonText(rect3, label2, true, false, true)) { ITab_AltarSacrificeCardUtility.OpenDeitySelectMenu(altar); } Rect secondBox = rect3; secondBox.x += rect3.x + 10f + 30f; secondBox.xMax += 125f; secondBox.height = 35f; Text.Font = GameFont.Medium; Widgets.Label(secondBox, DeityLabel(altar)); Text.Font = GameFont.Small; ITab_CardUtility.DrawTier(altar.tempCurrentSacrificeDeity, new Vector2(secondBox.x, secondBox.y + 30f)); Rect secondBoxUnder = secondBox; secondBoxUnder.y += 40f; secondBoxUnder.width -= 15f; secondBoxUnder.height = 70f; Widgets.Label(secondBoxUnder, DeityDescription(altar)); Rect secondBoxUnder2 = secondBoxUnder; secondBoxUnder2.y += 70; secondBoxUnder2.height = 250f; Widgets.Label(secondBoxUnder2, SpellDescription(altar)); Rect rect4 = rect3; rect4.y += 35f; rect4.width = 210f; rect4.x -= (rect3.x - 5); rect4.x += 2f; Widgets.Label(rect4, "Executioner".Translate() + ": "); rect4.xMin = rect4.center.x - 15f; string label3 = ExecutionerLabel(altar); if (Widgets.ButtonText(rect4, label3, true, false, true)) { ITab_AltarSacrificeCardUtility.OpenExecutionerSelectMenu(altar); } Rect rect5 = rect4; rect5.y += 35f; rect5.x -= (rect4.x - 5); rect5.x += 2f; rect5.width = 210f; Widgets.Label(rect5, "Sacrifice".Translate() + ": "); rect5.xMin = rect5.center.x - 15f; string label4 = SacrificeLabel(altar); if (Widgets.ButtonText(rect5, label4, true, false, true)) { ITab_AltarSacrificeCardUtility.OpenSacrificeSelectMenu(altar); } Rect rect6 = rect5; rect6.y += 35f; rect6.x -= (rect5.x - 5); rect6.x += 2f; rect6.width = 210f; rect6.yMax += 35f; Widgets.Label(rect6, "Spell".Translate() + ": "); rect6.xMin = rect6.center.x - 15f; string label5 = SpellLabel(altar); if (Widgets.ButtonText(rect6, label5, true, false, true)) { ITab_AltarSacrificeCardUtility.OpenSpellSelectMenu(altar); } /* * Rect rect4 = rect3; * rect4.y += 35f; * rect4.width = 150f; * if (Widgets.ButtonText(rect4, "RenameTemple".Translate(), true, false, true)) * { * Find.WindowStack.Add(new Dialog_RenameTemple(altar)); * } * Rect rectDebug1 = rect4; * rectDebug1.y += 25f; * if (DebugSettings.godMode) * { * if (Widgets.ButtonText(rectDebug1, "ForceSermonDebug".Translate(), true, false, true)) * { * SermonUtility.ForceSermon(altar); * } * Rect rectDebug2 = rectDebug1; * rectDebug2.y += 25f; * if (Widgets.ButtonText(rectDebug2, "ForceListenersDebug".Translate(), true, false, true)) * { * TempleCardUtility.ForceListenersTest(altar); * } * } * * Rect rect5 = rect4; * rect5.x = rect4.xMax + 5f; * rect5.width = 200f; * rect5.y -= 20f; * Widgets.CheckboxLabeled(rect5, "MorningSermons".Translate(), ref altar.OptionMorning, false); * Rect rect6 = rect5; * rect6.y += 20f; * Widgets.CheckboxLabeled(rect6, "EveningSermons".Translate(), ref altar.OptionEvening, false); * */ GUI.EndGroup(); }
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)); }
public static string SpellDescription(Building_SacrificialAltar altar) { return(altar.tempCurrentSacrificeDeity == null || altar.tempCurrentSpell == null ? "None" : altar.tempCurrentSpell.description); }
public static void DrawTempleCard(Rect rect, Building_SacrificialAltar altar) { GUI.BeginGroup(rect); if (CultTracker.Get.PlayerCult != null) { var cultLabelWidth = Text.CalcSize(CultTracker.Get.PlayerCult.name).x + 15; //Headings _ = new Rect(rect); var rect1 = rect.ContractedBy(14f); rect1.height = 30f; //Unnamed Temple Text.Font = GameFont.Medium; Widgets.Label(rect1, altar.RoomName); Text.Font = GameFont.Small; //Rename Icon ITab_AltarCardUtility.DrawRename(altar); var rect2 = new Rect(rect1) { yMin = rect1.yMax + 10, height = 25f, width = cultLabelWidth + 5 }; //Esoteric Order of Dagon Widgets.Label(rect2, CultTracker.Get.PlayerCult.name); if (Mouse.IsOver(rect2)) { Widgets.DrawHighlight(rect2); } if (Mouse.IsOver(rect2) && Event.current.type == EventType.MouseDown) { Find.WindowStack.Add(new Dialog_RenameCult(altar.Map)); } Widgets.DrawLineHorizontal(rect2.x - 10, rect2.yMax, rect.width - 15f); //--------------------------------------------------------------------- var rectMain = new Rect(0 + 15f, 0 + 30f, TempleCardSize.x, ITab_AltarSacrificesCardUtility.ButtonSize * 1.15f); //Deity -> Cthulhu var rect4 = rectMain; rect4.yMin = rectMain.yMax + 5f; rect4.y = rectMain.yMax + 20f; rect4.x += 5f; rect4.width = ITab_AltarSacrificesCardUtility.ColumnSize; rect4.height = ITab_AltarSacrificesCardUtility.ButtonSize; Widgets.Label(rect4, "Deity".Translate() + ": "); rect4.xMin = rect4.center.x; var label4 = DeityLabel(altar); if (Widgets.ButtonText(rect4, label4, true, false)) { OpenDeitySelectMenu(altar); } TooltipHandler.TipRegion(rect4, "DeityDesc".Translate()); //Cthulhu - He who waits dreaming. ITab_AltarCardUtility.DrawDeity(altar.tempCurrentWorshipDeity, rect4, null, -30f); //Preacher var rect5 = rect4; rect5.y += ITab_AltarSacrificesCardUtility.ButtonSize + 15f; //rect5.y = rect4.yMax + 30f; rect5.x -= rect4.x - 5; rect5.x += 15f; rect5.width = ITab_AltarSacrificesCardUtility.ColumnSize; Widgets.Label(rect5, "Preacher".Translate() + ": "); rect5.xMin = rect5.center.x; var label2 = PreacherLabel(altar); if (Widgets.ButtonText(rect5, label2, true, false)) { OpenPreacherSelectMenu(altar); } TooltipHandler.TipRegion(rect5, "PreacherDesc".Translate()); var rect6 = rect5; rect6.y += ITab_AltarSacrificesCardUtility.ButtonSize + ITab_AltarSacrificesCardUtility.SpacingOffset; rect6.height = ITab_AltarSacrificesCardUtility.ButtonSize * 2; rect6.width = ITab_AltarSacrificesCardUtility.ColumnSize; rect6.x -= rect5.x - 5; rect6.x += 15f; if (altar.tempCurrentWorshipDeity != null) { Widgets.Label(rect6.BottomHalf(), "Cults_SeasonDays".Translate()); Text.Font = GameFont.Tiny; //Text.Anchor = TextAnchor.LowerLeft; var num = 15f; var num2 = 270f; var hourWidth = 20.833334f; for (var day = 0; day <= 14; day++) { var rect9 = new Rect(num + 4f, num2 + 0f, hourWidth, 20f); Widgets.Label(rect9, (day + 1).ToString()); var rect10 = new Rect(num, num2 + 20f, hourWidth, 30f); rect10 = rect10.ContractedBy(1f); var texture = TimeAssignmentDefOf.Anything.ColorTexture; switch (altar.seasonSchedule[day]) { case 1: texture = SolidColorMaterials.NewSolidColorTexture(Color.red); break; case 2: texture = SolidColorMaterials.NewSolidColorTexture(Color.blue); break; case 3: texture = SolidColorMaterials.NewSolidColorTexture(Color.magenta); break; } GUI.DrawTexture(rect10, texture); if (Mouse.IsOver(rect10)) { Widgets.DrawBox(rect10, 2); //if (Input.GetMouseButton(0)) if (Widgets.ButtonInvisible(rect10)) { altar.seasonSchedule[day] = (altar.seasonSchedule[day] % 4) + 1; SoundDefOf.Designate_DragStandard_Changed.PlayOneShotOnCamera(); //p.timetable.SetAssignment(hour, this.selectedAssignment); } } num += hourWidth; } num2 += 60f; var rect11 = new Rect(15f, num2 + 3, hourWidth / 2, hourWidth / 2); rect11 = rect11.ContractedBy(1f); GUI.DrawTexture(rect11, TimeAssignmentDefOf.Anything.ColorTexture); var rect12 = new Rect(15f + hourWidth, num2, 150f, (hourWidth / 2) + 6); Widgets.Label(rect12, "NoSermonLabel".Translate()); var rect13 = new Rect(15f + 170f, num2 + 3, hourWidth / 2, hourWidth / 2); rect13 = rect13.ContractedBy(1f); GUI.DrawTexture(rect13, SolidColorMaterials.NewSolidColorTexture(Color.magenta)); var rect14 = new Rect(15f + hourWidth + 170f, num2, 150f, (hourWidth / 2) + 6); Widgets.Label(rect14, "BothSermonLabel".Translate()); num2 += 30f; var rect15 = new Rect(15f, num2 + 3, hourWidth / 2, hourWidth / 2); rect15 = rect15.ContractedBy(1f); GUI.DrawTexture(rect15, SolidColorMaterials.NewSolidColorTexture(Color.red)); var rect16 = new Rect(15f + hourWidth, num2, 150f, (hourWidth / 2) + 6); Widgets.Label(rect16, "MorningSermonLabel".Translate()); var rect17 = new Rect(15f + 170f, num2 + 3, hourWidth / 2, hourWidth / 2); rect17 = rect17.ContractedBy(1f); GUI.DrawTexture(rect17, SolidColorMaterials.NewSolidColorTexture(Color.blue)); var rect18 = new Rect(15f + hourWidth + 170f, num2, 150f, (hourWidth / 2) + 6); Widgets.Label(rect18, "EveningSermonLabel".Translate()); num2 += 35f; var rect19 = new Rect(15f, num2, 150f, (hourWidth / 2) + 6); Widgets.Label(rect19, "Cults_SermonStartLabel".Translate()); var dist = 5f; var button3 = new Rect(rect6.x + dist, rect6.y + 215f, 140f, 30f); var morningHour = altar.morningHour + ":00h"; if (Widgets.ButtonText(button3, "Cults_MorningSermonStart".Translate() + morningHour, true, false)) { listHours(altar, true); } var button4 = new Rect(rect6.x + dist + 150f, rect6.y + 215f, 140f, 30f); var eveningHour = altar.eveningHour + ":00h"; if (Widgets.ButtonText(button4, "Cults_EveningSermonStart".Translate() + eveningHour, true, false)) { listHours(altar, false); } } // Old code with only morning/evening setting //Widgets.CheckboxLabeled(rect6.BottomHalf(), "MorningSermons".Translate(), ref altar.OptionMorning, disabled); //if (Mouse.IsOver(rect6) && Event.current.type == EventType.MouseDown && !disabled) //{ // altar.TryChangeWorshipValues(Building_SacrificialAltar.ChangeWorshipType.MorningWorship, altar.OptionMorning); //} //Rect rect7 = rect6; //rect7.y += ITab_AltarSacrificesCardUtility.ButtonSize + ITab_AltarSacrificesCardUtility.SpacingOffset; //rect7.height = ITab_AltarSacrificesCardUtility.ButtonSize; //Widgets.CheckboxLabeled(rect7.TopHalf(), "EveningSermons".Translate(), ref altar.OptionEvening, disabled); //if (Mouse.IsOver(rect7) && Event.current.type == EventType.MouseDown && !disabled) //{ // altar.TryChangeWorshipValues(Building_SacrificialAltar.ChangeWorshipType.EveningWorship, altar.OptionEvening); //} //TooltipHandler.TipRegion(rect6, "MorningSermonsDesc".Translate()); //TooltipHandler.TipRegion(rect7, "EveningSermonsDesc".Translate()); } else { var newRect = new Rect(rect); newRect = newRect.ContractedBy(14f); newRect.height = 30f; Text.Font = GameFont.Medium; Widgets.Label(newRect, "Cults_NoPlayerCultAvailable".Translate()); Text.Font = GameFont.Small; } GUI.EndGroup(); }
public static void DrawTempleCard(Rect rect, Building_SacrificialAltar altar) { GUI.BeginGroup(rect); if (CultTracker.Get.PlayerCult != null) { float cultLabelWidth = Text.CalcSize(CultTracker.Get.PlayerCult.name).x + 15; //Headings Rect rect1 = new Rect(rect); rect1 = rect.ContractedBy(14f); rect1.height = 30f; //Unnamed Temple Text.Font = GameFont.Medium; Widgets.Label(rect1, altar.RoomName); Text.Font = GameFont.Small; //Rename Icon ITab_AltarCardUtility.DrawRename(altar); Rect rect2 = new Rect(rect1); rect2.yMin = rect1.yMax + 10; rect2.height = 25f; rect2.width = cultLabelWidth + 5; //Esoteric Order of Dagon Widgets.Label(rect2, CultTracker.Get.PlayerCult.name); if (Mouse.IsOver(rect2)) { Widgets.DrawHighlight(rect2); } if (Mouse.IsOver(rect2) && Event.current.type == EventType.MouseDown) { Find.WindowStack.Add(new Dialog_RenameCult(altar.Map)); } Widgets.DrawLineHorizontal(rect2.x - 10, rect2.yMax, rect.width - 15f); //--------------------------------------------------------------------- Rect rectMain = new Rect(0 + 15f, 0 + 30f, TempleCardSize.x, ITab_AltarSacrificesCardUtility.ButtonSize * 1.15f); //Deity -> Cthulhu Rect rect4 = rectMain; rect4.yMin = rectMain.yMax + 5f; rect4.y = rectMain.yMax + 20f; rect4.x += 5f; rect4.width = ITab_AltarSacrificesCardUtility.ColumnSize; rect4.height = ITab_AltarSacrificesCardUtility.ButtonSize; Widgets.Label(rect4, "Deity".Translate() + ": "); rect4.xMin = rect4.center.x; string label4 = DeityLabel(altar); if (Widgets.ButtonText(rect4, label4, true, false, true)) { ITab_AltarWorshipCardUtility.OpenDeitySelectMenu(altar); } TooltipHandler.TipRegion(rect4, "DeityDesc".Translate()); //Cthulhu - He who waits dreaming. ITab_AltarCardUtility.DrawDeity(altar.tempCurrentWorshipDeity, rect4, null, -30f); //Preacher Rect rect5 = rect4; rect5.y += ITab_AltarSacrificesCardUtility.ButtonSize + 15f; //rect5.y = rect4.yMax + 30f; rect5.x -= (rect4.x - 5); rect5.x += 15f; rect5.width = ITab_AltarSacrificesCardUtility.ColumnSize; Widgets.Label(rect5, "Preacher".Translate() + ": "); rect5.xMin = rect5.center.x; string label2 = PreacherLabel(altar); if (Widgets.ButtonText(rect5, label2, true, false, true)) { ITab_AltarWorshipCardUtility.OpenPreacherSelectMenu(altar); } TooltipHandler.TipRegion(rect5, "PreacherDesc".Translate()); Rect rect6 = rect5; rect6.y += ITab_AltarSacrificesCardUtility.ButtonSize + ITab_AltarSacrificesCardUtility.SpacingOffset; rect6.height = ITab_AltarSacrificesCardUtility.ButtonSize; rect6.width = ITab_AltarSacrificesCardUtility.ColumnSize; rect6.x -= (rect5.x - 5); rect6.x += 15f; bool disabled = (altar.tempCurrentWorshipDeity == null); Widgets.CheckboxLabeled(rect6.BottomHalf(), "MorningSermons".Translate(), ref altar.OptionMorning, disabled); if (Mouse.IsOver(rect6) && Event.current.type == EventType.MouseDown && !disabled) { altar.TryChangeWorshipValues(Building_SacrificialAltar.ChangeWorshipType.MorningWorship, altar.OptionMorning); } Rect rect7 = rect6; rect7.y += ITab_AltarSacrificesCardUtility.ButtonSize + ITab_AltarSacrificesCardUtility.SpacingOffset; rect7.height = ITab_AltarSacrificesCardUtility.ButtonSize; Widgets.CheckboxLabeled(rect7.TopHalf(), "EveningSermons".Translate(), ref altar.OptionEvening, disabled); if (Mouse.IsOver(rect7) && Event.current.type == EventType.MouseDown && !disabled) { altar.TryChangeWorshipValues(Building_SacrificialAltar.ChangeWorshipType.EveningWorship, altar.OptionEvening); } TooltipHandler.TipRegion(rect6, "MorningSermonsDesc".Translate()); TooltipHandler.TipRegion(rect7, "EveningSermonsDesc".Translate()); } else { Rect newRect = new Rect(rect); newRect = newRect.ContractedBy(14f); newRect.height = 30f; Text.Font = GameFont.Medium; Widgets.Label(newRect, "Cults_NoPlayerCultAvailable".Translate()); Text.Font = GameFont.Small; } GUI.EndGroup(); }
public virtual void Use(bool forced) { Props.hitSound.PlayOneShot(new TargetInfo(parent.Position, parent.Map)); Building_SacrificialAltar.GetWorshipGroup(Altar, CellsInRange, forced); }
public static void DrawTempleCard(Rect rect, Building_SacrificialAltar altar) { GUI.BeginGroup(rect); var rect3 = new Rect(2f, 0f, ITab_AltarSacrificesCardUtility.ColumnSize, ITab_AltarSacrificesCardUtility.ButtonSize); Widgets.Label(rect3, "Deity".Translate() + ": "); rect3.xMin = rect3.center.x - 15f; var label2 = ITab_AltarCardUtility.DeityLabel(altar, ITab_AltarCardUtility.DeityType.SacrificeDeity); if (Widgets.ButtonText(rect3, label2, true, false)) { ITab_AltarCardUtility.OpenDeitySelectMenu(altar, ITab_AltarCardUtility.DeityType.SacrificeDeity); } TooltipHandler.TipRegion(rect3, "DeityDesc".Translate()); ITab_AltarCardUtility.DrawDeity(altar.tempCurrentSacrificeDeity, rect3, SpellDescription(altar)); var rect4 = rect3; rect4.y += ITab_AltarSacrificesCardUtility.ButtonSize + 15f; rect4.width = ITab_AltarSacrificesCardUtility.ColumnSize; rect4.x -= rect3.x; rect4.x += 2f; Widgets.Label(rect4, "Executioner".Translate() + ": "); rect4.xMin = rect4.center.x - 15f; var label3 = ITab_AltarCardUtility.ExecutionerLabel(altar); if (Widgets.ButtonText(rect4, label3, true, false)) { ITab_AltarCardUtility.OpenActorSelectMenu(altar, ITab_AltarCardUtility.ActorType.executioner); } TooltipHandler.TipRegion(rect4, "ExecutionerDesc".Translate()); var rect5 = rect4; rect5.y += ITab_AltarSacrificesCardUtility.ButtonSize + 15f; rect5.x -= rect4.x; rect5.x += 2f; rect5.width = ITab_AltarSacrificesCardUtility.ColumnSize; Widgets.Label(rect5, "Sacrifice".Translate() + ": "); rect5.xMin = rect5.center.x - 15f; var label4 = ITab_AltarCardUtility.SacrificeLabel(altar); if (Widgets.ButtonText(rect5, label4, true, false)) { ITab_AltarCardUtility.OpenActorSelectMenu(altar, ITab_AltarCardUtility.ActorType.prisoner); } TooltipHandler.TipRegion(rect5, "SacrificeDesc".Translate()); var rect6 = rect5; rect6.y += ITab_AltarSacrificesCardUtility.ButtonSize + 15f; rect6.x -= rect5.x; rect6.x += 2f; rect6.width = ITab_AltarSacrificesCardUtility.ColumnSize; rect6.yMax += ITab_AltarSacrificesCardUtility.ButtonSize + 15f; Widgets.Label(rect6, "Cults_Spell".Translate() + ": "); rect6.xMin = rect6.center.x - 15f; var label5 = SpellLabel(altar); if (Widgets.ButtonText(rect6, label5, true, false)) { OpenSpellSelectMenu(altar); } TooltipHandler.TipRegion(rect6, "Cults_SpellDesc".Translate()); GUI.EndGroup(); }
public Dialog_RenameTemple(Building_SacrificialAltar altar) { this.altar = altar; curName = altar.RoomName; map = altar.Map; }
public static void GetWorshipGroup(Building_SacrificialAltar altar, IEnumerable <IntVec3> inRangeCells, bool forced = false) { altar.GetWorshipGroup(inRangeCells); }
//private static string DeityDescription(Building_SacrificialAltar altar) //{ // if (altar.tempCurrentSacrificeDeity == null) // { // return "None"; // } // else // { // StringBuilder stringBuilder = new StringBuilder(); // //stringBuilder.Append(altar.tempCurrentSacrificeDeity.LabelCap); // stringBuilder.AppendLine(); // stringBuilder.Append(altar.tempCurrentSacrificeDeity.def.description); // //stringBuilder.AppendLine(); // //stringBuilder.Append("Standing: " + altar.tempCurrentSacrificeDeity.PlayerFavor.ToString()); // //stringBuilder.AppendLine(); // //stringBuilder.Append("Tier: " + altar.tempCurrentSacrificeDeity.PlayerTier.ToString()); // return stringBuilder.ToString(); // } //} /* * private static void ForceListenersTest(Building_SacrificialAltar altar) * { * * IntVec3 result; * Building chair; * foreach (Pawn p in Find.MapPawns.AllPawnsSpawned.FindAll(x => x.RaceProps.intelligence == Intelligence.Humanlike)) * { * if (!SermonUtility.IsPreacher(p)) * { * if (!WatchBuildingUtility.TryFindBestWatchCell(altar, p, true, out result, out chair)) * { * * if (!WatchBuildingUtility.TryFindBestWatchCell(altar as Thing, p, false, out result, out chair)) * { * return; * } * } * if (chair != null) * { * Job J = new Job(CorruptionDefOfs.AttendSermon, altar.preacher, altar, chair); * p.QueueJob(J); * p.CurJob.EndCurrentJob(JobCondition.InterruptForced); * } * else * { * Job J = new Job(CorruptionDefOfs.AttendSermon, altar.preacher, altar, result); * p.QueueJob(J); * p.CurJob.EndCurrentJob(JobCondition.InterruptForced); * } * } * } * } */ //public static void OpenSacrificeSelectMenu(Building_SacrificialAltar altar) //{ // List<FloatMenuOption> list = new List<FloatMenuOption>(); // list.Add(new FloatMenuOption("(" + "NoneLower".Translate() + ")", delegate // { // altar.tempSacrifice = null; // }, MenuOptionPriority.Default, null, null, 0f, null)); // foreach (Pawn current in altar.Map.mapPawns.PrisonersOfColonySpawned) // { // if (!current.Dead && !current.InAggroMentalState) // { // Action action; // Pawn localCol = current; // action = delegate // { // altar.Map.GetComponent<MapComponent_SacrificeTracker>().lastUsedAltar = altar; // altar.Map.GetComponent<MapComponent_SacrificeTracker>().lastSacrificeType = CultUtility.SacrificeType.human; // altar.tempSacrifice = localCol; // }; // list.Add(new FloatMenuOption(localCol.LabelShort, action, MenuOptionPriority.Default, null, null, 0f, null)); // } // } // Find.WindowStack.Add(new FloatMenu(list)); //} //public static void OpenExecutionerSelectMenu(Building_SacrificialAltar altar) //{ // List<FloatMenuOption> list = new List<FloatMenuOption>(); // list.Add(new FloatMenuOption("(" + "NoneLower".Translate() + ")", delegate // { // altar.tempExecutioner = null; // }, MenuOptionPriority.Default, null, null, 0f, null)); // if (altar != null) // { // list.Add(new FloatMenuOption("(" + "NoneLower".Translate() + ")", delegate // { // altar.tempExecutioner = null; // }, MenuOptionPriority.Default, null, null, 0f, null)); // foreach (Pawn current in altar.Map.mapPawns.FreeColonists) // { // if (CultUtility.IsCultMinded(current)) // { // if (current == null) continue; // if (current.Dead) continue; // if (current.IsPrisoner) continue; // if (current.health.capacities.CapableOf(PawnCapacityDefOf.Manipulation) && // current.health.capacities.CapableOf(PawnCapacityDefOf.Moving)) // { // Action action; // Pawn localCol = current; // action = delegate // { // altar.Map.GetComponent<MapComponent_SacrificeTracker>().lastUsedAltar = altar; // altar.tempExecutioner = localCol; // }; // list.Add(new FloatMenuOption(localCol.LabelShort, action, MenuOptionPriority.Default, null, null, 0f, null)); // } // } // } // } // Find.WindowStack.Add(new FloatMenu(list)); //} //public static void OpenDeitySelectMenu(Building_SacrificialAltar altar) //{ // List<FloatMenuOption> list = new List<FloatMenuOption>(); // list.Add(new FloatMenuOption("(" + "NoneLower".Translate() + ")", delegate // { // altar.Map.GetComponent<MapComponent_SacrificeTracker>().lastUsedAltar = altar; // altar.tempCurrentSacrificeDeity = null; // }, MenuOptionPriority.Default, null, null, 0f, null)); // foreach (CosmicEntity current in DeityTracker.Get.DeityCache.Keys) // { // if (current.discovered == false) continue; // Action action; // CosmicEntity localDeity = current; // action = delegate // { // altar.Map.GetComponent<MapComponent_SacrificeTracker>().lastUsedAltar = altar; // altar.tempCurrentSacrificeDeity = localDeity; // altar.tempCurrentSpell = null; // }; // list.Add(new FloatMenuOption(localDeity.LabelCap, action, MenuOptionPriority.Default, null, null, 0f, null)); // } // Find.WindowStack.Add(new FloatMenu(list)); //} public static void OpenSpellSelectMenu(Building_SacrificialAltar altar) { var list = new List <FloatMenuOption> { new FloatMenuOption("(" + "NoneLower".Translate() + ")", delegate { altar.tempCurrentSpell = null; }) }; if (altar.tempCurrentSacrificeDeity != null) { if (altar.tempCurrentSacrificeDeity.tier1Spells != null && altar.tempCurrentSacrificeDeity.PlayerTier > 0) { foreach (var spell in altar.tempCurrentSacrificeDeity.tier1Spells) { var localSpell = spell; void Action() { altar.Map.GetComponent <MapComponent_SacrificeTracker>().lastUsedAltar = altar; altar.tempCurrentSpell = localSpell; } list.Add(new FloatMenuOption(localSpell.LabelCap, Action)); } } if (altar.tempCurrentSacrificeDeity.tier2Spells != null && altar.tempCurrentSacrificeDeity.PlayerTier > CosmicEntity.Tier.One) { foreach (var spell in altar.tempCurrentSacrificeDeity.tier2Spells) { var localSpell = spell; void Action2() { altar.Map.GetComponent <MapComponent_SacrificeTracker>().lastUsedAltar = altar; altar.tempCurrentSpell = localSpell; } list.Add(new FloatMenuOption(localSpell.LabelCap, Action2)); } } if (altar.tempCurrentSacrificeDeity.tier3Spells != null && altar.tempCurrentSacrificeDeity.PlayerTier > CosmicEntity.Tier.Two) { foreach (var spell in altar.tempCurrentSacrificeDeity.tier3Spells) { var localSpell = spell; void Action3() { altar.Map.GetComponent <MapComponent_SacrificeTracker>().lastUsedAltar = altar; altar.tempCurrentSpell = localSpell; } list.Add(new FloatMenuOption(localSpell.LabelCap, Action3)); } } if (altar.tempCurrentSacrificeDeity.finalSpell != null && altar.tempCurrentSacrificeDeity.PlayerTier > CosmicEntity.Tier.Three) { var localSpell = altar.tempCurrentSacrificeDeity.finalSpell; void Action4() { altar.Map.GetComponent <MapComponent_SacrificeTracker>().lastUsedAltar = altar; altar.tempCurrentSpell = localSpell; } list.Add(new FloatMenuOption(localSpell.LabelCap, Action4)); } } Find.WindowStack.Add(new FloatMenu(list)); }