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;
                }
            }
        }
Exemple #2
0
 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);
     }
 }
Exemple #5
0
 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);
     }
 }
Exemple #8
0
 private static string DeityLabel(Building_SacrificialAltar altar)
 {
     if (altar.tempCurrentWorshipDeity == null)
     {
         return("None");
     }
     else
     {
         return(altar.tempCurrentWorshipDeity.LabelCap);
     }
 }
Exemple #9
0
        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());
        }
Exemple #11
0
        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));
        }
Exemple #12
0
        /*
         * 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));
        }
Exemple #13
0
 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);
     }
 }
Exemple #14
0
        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));
        }
Exemple #19
0
        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();
        }
Exemple #22
0
        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));
        }
Exemple #23
0
 public static string SpellDescription(Building_SacrificialAltar altar)
 {
     return(altar.tempCurrentSacrificeDeity == null || altar.tempCurrentSpell == null
         ? "None"
         : altar.tempCurrentSpell.description);
 }
Exemple #24
0
        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();
        }
Exemple #25
0
        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();
        }
Exemple #26
0
 public virtual void Use(bool forced)
 {
     Props.hitSound.PlayOneShot(new TargetInfo(parent.Position, parent.Map));
     Building_SacrificialAltar.GetWorshipGroup(Altar, CellsInRange, forced);
 }
Exemple #27
0
        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);
 }
Exemple #30
0
        //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));
        }