Пример #1
0
        public override Evaluation GetStage(Building_BaseAltar altar)
        {
            CongregationParms parms = altar.congregationParms;

            if (parms.deity == null || parms.preacher == null)
            {
                return(null);
            }

            int stage = 0;

            foreach (Apparel apparel in parms.preacher.apparel.WornApparel)
            {
                for (int i = 0; i < parms.deity.favoredApparel.Count; i++)
                {
                    if (parms.deity.favoredApparel[i].def == apparel.def)
                    {
                        stage++;
                        break;
                    }
                }
            }

            return(evaluations[Mathf.Clamp(stage, 0, evaluations.Count - 1)]);
        }
Пример #2
0
        public override Evaluation GetStage(Building_BaseAltar altar)
        {
            Pawn pawn = this.getSacrificePawn(altar);

            if (pawn == null)
            {
                return(null);
            }

            List <Hediff_MissingPart> parts = pawn.health.hediffSet.GetMissingPartsCommonAncestors();

            if (parts.Count >= 4)
            {
                return(evaluations[0]);
            }
            if (parts.Count >= 2)
            {
                return(evaluations[1]);
            }
            if (parts.Count >= 1)
            {
                return(evaluations[2]);
            }
            return(null);
        }
Пример #3
0
        public override Evaluation GetStage(Building_BaseAltar altar)
        {
            CongregationParms parms = new CongregationParms();

            if (altar.congregationChoice == Choice.Animal || altar.congregationChoice == Choice.Human)
            {
                parms = altar.congregationParms;
            }
            if (parms.sacrifice == null || !(parms.sacrifice is Pawn))
            {
                return(null);
            }

            float health = (parms.sacrifice as Pawn).health.summaryHealth.SummaryHealthPercent;


            if (health < .4f)
            {
                return(evaluations[0]);
            }
            else if (health < .6f)
            {
                return(evaluations[1]);
            }
            else if (health < .8f)
            {
                return(evaluations[2]);
            }
            return(null);
        }
Пример #4
0
        public override Evaluation GetStage(Building_BaseAltar altar)
        {
            CongregationParms parms = altar.congregationParms;

            if (parms.preacher == null)
            {
                return(null);
            }

            Spirituality need = parms.preacher.needs.TryGetNeed <Spirituality>();

            float skill = 0.0f;

            if (need != null)
            {
                skill = need.CurLevelPercentage;
            }

            if (skill > .7f)
            {
                return(evaluations[3]);
            }
            else if (skill > .5f)
            {
                return(evaluations[2]);
            }
            else if (skill > .3f)
            {
                return(evaluations[1]);
            }
            else
            {
                return(evaluations[0]);
            }
        }
        //-------------------------------------------------
        // Reward

        public static void SelectRewardSpell(Building_BaseAltar altar, Building_BaseAltar.CongregationParms parms)
        {
            //Building_BaseAltar.Choice choice = ;
            List <FloatMenuOption> options = new List <FloatMenuOption>();
            List <SpellDef>        list    = new List <SpellDef>();

            if (parms.deity == null)
            {
                return;                     // TODO: warning message?
            }
            foreach (SpellDef def in parms.deity.spells)
            {
                if (def.hasChoice(altar.congregationChoice))
                {
                    list.Add(def);
                }
            }



            foreach (SpellDef thing in list)
            {
                options.Add(new FloatMenuOption(
                                thing.label,
                                delegate { parms.reward = thing; },
                                MenuOptionPriority.Default
                                ));
            }

            if (options.NullOrEmpty())
            {
                return;
            }
            Find.WindowStack.Add(new FloatMenu(options));
        }
        public static void OpenDeitySelectMenu(Building_BaseAltar altar)
        {
            // For worship selection
            List <FloatMenuOption> options = new List <FloatMenuOption>();
            List <CosmicEntityDef> list    = new List <CosmicEntityDef>();

            foreach (CosmicEntity candidate in CultKnowledge.deities)
            {
                if (candidate.isDiscovered)
                {
                    list.Add(candidate.def);
                }
            }

            // null option
            options.Add(new FloatMenuOption("NONE", delegate
            {
                CultKnowledge.selectedDeity = null; // deselect deity
            }, MenuOptionPriority.Default, null, null, 0f, null));

            // deity options
            foreach (CosmicEntityDef thing in list)
            {
                options.Add(new FloatMenuOption(
                                thing.label,
                                delegate { CultKnowledge.selectedDeity = thing; },
                                thing.symbolTex,
                                Color.white,
                                MenuOptionPriority.Default
                                ));
            }

            Find.WindowStack.Add(new FloatMenu(options));
        }
        //-------------------------------------------------
        // Artefact

        public static void SelectItemSacrifice(Building_BaseAltar altar, Building_BaseAltar.CongregationParms parms)
        {
            List <FloatMenuOption> options = new List <FloatMenuOption>();

            if (options.NullOrEmpty())
            {
                return;
            }
            Find.WindowStack.Add(new FloatMenu(options));
        }
Пример #8
0
        public override Evaluation GetStage(Building_BaseAltar altar)
        {
            return(null);

            /*
             * Room temple = altar.GetRoom();
             * if(temple == null) return null;
             *
             * List<Thing> sculptures = temple.ContainedAndAdjacentThings.FindAll(x => x is ThingWithComps y && y.TryGetComp<CompFavoredObject>() != null);
             */
        }
Пример #9
0
        public override void Notify_IterationCompleted(Pawn billDoer, List <Thing> ingredients)
        {
            Building_BaseAltar altar = (Building_BaseAltar)this.billStack.billGiver;

            base.Notify_IterationCompleted(billDoer, ingredients);
            Log.Message("start spell incident");
            Log.Message("giver: " + altar.LabelShort.ToString());

            // altar has required info
            // roll dice
            // do spell incident here?
        }
Пример #10
0
        protected Pawn getSacrificePawn(Building_BaseAltar altar)
        {
            CongregationParms parms = new CongregationParms();

            if (altar.congregationChoice == Choice.Animal || altar.congregationChoice == Choice.Human)
            {
                parms = altar.congregationParms;
            }
            if (parms.sacrifice == null)
            {
                return(null);
            }
            return(parms.sacrifice);
        }
        //-------------------------------------------------
        // Food

        public static void SelectFoodSacrifice(Building_BaseAltar altar, Building_BaseAltar.CongregationParms parms)
        {
            List <FloatMenuOption>       options = new List <FloatMenuOption>();
            List <CongregationRecipeDef> recipes = DefDatabase <CongregationRecipeDef> .AllDefs.Where(r => r.requiredChoice == "Food").ToList();

            if (parms.preacher == null)
            {
                return;                        // TODO: warning message?
            }
            foreach (CongregationRecipeDef r in recipes)
            {
                List <ThingCount> chosen = new List <ThingCount>();
                if (IngredientFinder.TryFindBestBillIngredients(new Bill_Production(r), parms.preacher, altar, chosen))
                {
                    if (!chosen.NullOrEmpty())
                    {
                        ThingDef  def = chosen.First().Thing.def;
                        Texture2D tex;

                        if (def.graphic is Graphic_StackCount)
                        {
                            Graphic graphic = (def.graphic as Graphic_StackCount).SubGraphicForStackCount(r.isWorthy? def.stackLimit : 3, def);
                            tex = graphic.MatSingle.GetTexture("_MainTex") as Texture2D;
                        }
                        else
                        {
                            tex = def.graphic.MatSingle.GetTexture("_MainTex") as Texture2D;
                        }

                        options.Add(new FloatMenuOption(
                                        r.label,
                                        delegate {  },// parms.sacrifice = thing;
                                        tex,
                                        new Color(1f, 1f, 1f, 1f),
                                        MenuOptionPriority.Default
                                        ));
                    }
                }
                ;
            }

            if (options.NullOrEmpty())
            {
                Messages.Message("No suitable amount of food is available", null, MessageTypeDefOf.RejectInput);
                return;
            }
            Find.WindowStack.Add(new FloatMenu(options));
        }
Пример #12
0
        public override Evaluation GetStage(Building_BaseAltar altar)
        {
            Room temple = altar.GetRoom();

            if (temple == null)
            {
                return(null);
            }

            float score_impressivness = temple.GetStat(RoomStatDefOf.Impressiveness);

            //RoomStatScoreStage stage = RoomStatDefOf.Impressiveness.GetScoreStage(score_impressivness);
            int i = RoomStatDefOf.Impressiveness.GetScoreStageIndex(score_impressivness);

            return(evaluations[Mathf.Clamp(i, 0, evaluations.Count - 1)]);
        }
        //-------------------------------------------------
        // Preacher

        public static void SelectPreacher(Building_BaseAltar altar, Building_BaseAltar.CongregationParms parms)
        {
            List <FloatMenuOption> options = new List <FloatMenuOption>();
            List <Pawn>            list    = new List <Pawn>();

            foreach (Pawn candidate in altar.Map.mapPawns.AllPawnsSpawned)
            {
                if (!candidate.IsColonist)
                {
                    continue;
                }
                list.Add(candidate);
            }

            foreach (Pawn thing in list)
            {
                options.Add(new FloatMenuOption(
                                new String(' ', 8) + thing.Name.ToString(),
                                delegate { altar.setPreacherForAllParms(thing); },
                                MenuOptionPriority.Default,
                                null,
                                null,
                                32,
                                (rect => {
                    rect.x = 0;
                    Widgets.ThingIcon(rect, thing);
                    return(false);
                })
                                ));

                /*
                 * options.Add(new FloatMenuOption(
                 *  thing.Name.ToString(),
                 *  delegate { parms.sacrifice = thing; },
                 *  MenuOptionPriority.Default
                 * ));
                 */
            }

            if (options.NullOrEmpty())
            {
                return;
            }
            Find.WindowStack.Add(new FloatMenu(options));
        }
        public static void DrawOptions()
        {
            Building_BaseAltar selected = Find.Selector.SingleSelectedThing as Building_BaseAltar;
            Rect rect;

            rect      = new Rect(secondColumnX, 86f, 75f, 25f);
            Text.Font = GameFont.Small;
            Widgets.Label(rect, "Worship");

            rect = new Rect(secondColumnX + 60f, 85f, 120f, 25f);

            string text = CultKnowledge.selectedDeity == null? "-" : CultKnowledge.selectedDeity.label;

            if (Widgets.ButtonText(rect, text, true, false, true))
            {
                OpenDeitySelectMenu(selected);
            }


            rect = new Rect(255f, 100f, 180f, 40f);
            Widgets.CheckboxLabeled(rect.BottomHalf(), "Perform sermons", ref CultKnowledge.performSermons, false);
        }
        //-------------------------------------------------
        // Deity

        public static void SelectDeity(Building_BaseAltar altar, Building_BaseAltar.CongregationParms parms)
        {
            // For congregation
            List <FloatMenuOption> options = new List <FloatMenuOption>();
            List <CosmicEntityDef> list    = new List <CosmicEntityDef>();

            foreach (CosmicEntity candidate in CultKnowledge.deities)
            {
                if (candidate.isDiscovered)
                {
                    list.Add(candidate.def);
                }
            }

            foreach (CosmicEntityDef thing in list)
            {
                options.Add(new FloatMenuOption(
                                thing.label,
                                delegate
                {
                    if (parms.deity != thing)
                    {
                        altar.setRewardForAllParms(null);
                    }
                    altar.setDeityForAllParms(thing);
                },
                                thing.symbolTex,
                                Color.white,
                                MenuOptionPriority.Default
                                ));
            }

            if (options.NullOrEmpty())
            {
                return;
            }
            Find.WindowStack.Add(new FloatMenu(options));
        }
        //-------------------------------------------------
        // Animal

        public static void SelectAnimalSacrifice(Building_BaseAltar altar, Building_BaseAltar.CongregationParms parms)
        {
            List <FloatMenuOption> options = new List <FloatMenuOption>();
            List <Pawn>            list    = new List <Pawn>();

            foreach (Pawn candidate in altar.Map.mapPawns.AllPawnsSpawned)
            {
                if (candidate.Faction != Faction.OfPlayer)
                {
                    continue;
                }
                if (candidate.RaceProps == null)
                {
                    continue;
                }
                if (candidate.RaceProps.Humanlike)
                {
                    continue;
                }
                list.Add(candidate);
            }

            foreach (Pawn thing in list)
            {
                options.Add(new FloatMenuOption(
                                thing.Name.ToString(),
                                delegate { parms.sacrifice = thing; },
                                thing.def,
                                MenuOptionPriority.Default
                                ));
            }

            if (options.NullOrEmpty())
            {
                return;
            }
            Find.WindowStack.Add(new FloatMenu(options));
        }
Пример #17
0
        public static List <Evaluation> EvaluateAltar(Building_BaseAltar altar)
        {
            List <Evaluation> stages = new List <Evaluation>();

            foreach (EvaluationDef def in defs)
            {
                try
                {
                    Evaluation stage = def.worker.GetStage(altar);
                    if (stage != null)
                    {
                        stages.Add(stage);               //  && stage.score != 0
                    }
                }
                catch (Exception e)
                {
                    Log.Warning("Evaluation exception: " + e.ToString());
                }
            }

            stages.Sort((e1, e2) => e2.score.CompareTo(e1.score));
            return(stages);
        }
Пример #18
0
        public override Evaluation GetStage(Building_BaseAltar altar)
        {
            CongregationParms parms = altar.congregationParms;

            if (parms.preacher == null)
            {
                return(null);
            }

            float talking = parms.preacher.health.capacities.GetLevel(PawnCapacityDefOf.Talking);

            if (talking > .90f)
            {
                return(evaluations[1]);
            }
            else if (talking > .70f)
            {
                return(evaluations[0]);
            }
            else
            {
                return(null);
            }
        }
Пример #19
0
 public override Evaluation GetStage(Building_BaseAltar altar)
 {
     return(altar.Map.GameConditionManager.GetActiveCondition(GameConditionDefOf.Aurora) != null?evaluations.First() : null);
 }
Пример #20
0
 public virtual Evaluation GetStage(Building_BaseAltar altar)
 {
     return(def.stages.NullOrEmpty()? new Evaluation() : def.stages.First());
 }
Пример #21
0
 public override Evaluation GetStage(Building_BaseAltar altar)
 {
     return(altar.Map.GameConditionManager.GetActiveCondition(CultsDefOf.Cults_GameCondition_StarsAreWrong) != null?evaluations.First() : null);
 }