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)]); }
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); }
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); }
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)); }
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); */ }
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? }
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)); }
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)); }
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); }
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); } }
public override Evaluation GetStage(Building_BaseAltar altar) { return(altar.Map.GameConditionManager.GetActiveCondition(GameConditionDefOf.Aurora) != null?evaluations.First() : null); }
public virtual Evaluation GetStage(Building_BaseAltar altar) { return(def.stages.NullOrEmpty()? new Evaluation() : def.stages.First()); }
public override Evaluation GetStage(Building_BaseAltar altar) { return(altar.Map.GameConditionManager.GetActiveCondition(CultsDefOf.Cults_GameCondition_StarsAreWrong) != null?evaluations.First() : null); }