private List <FloatMenuOption> GetFloatMenuOptions(ScheduledDay day) { List <FloatMenuOption> list = new List <FloatMenuOption>(); foreach (ReligionProperty property in SelFacility.AssignedReligion.GetSettings <ReligionSettings_ReligionActivity>(SettingsTagDefOf.ActivityTag).Properties) { ActivityTaskDef taskDef = property.GetObject <ActivityTaskDef>(); list.Add(new FloatMenuOption(taskDef.label, (Action)(() => { if (!this.SelFacility.Map.mapPawns.FreeColonists.Any <Pawn>(x => x.GetReligionComponent().Religion == SelFacility.AssignedReligion)) { CreateNoPawnsOfReligionDialog(SelFacility.AssignedReligion); } ActivityTask task = new ActivityTask(day, property); if (TaskManager.DefaultPawn != null) { task.PawnRestriction = TaskManager.DefaultPawn; } day.Add(task); day.Reorder(); }), MenuOptionPriority.Default, (Action)null, (Thing)null, 29f, (Func <Rect, bool>)(rect => Widgets.InfoCardButton(rect.x + 5f, rect.y + (float)(((double)rect.height - 24.0) / 2.0), taskDef)), (WorldObject)null)); } if (!list.Any <FloatMenuOption>()) { list.Add(new FloatMenuOption("NoneBrackets".Translate(), (Action)null, MenuOptionPriority.Default, (Action)null, (Thing)null, 0.0f, (Func <Rect, bool>)null, (WorldObject)null)); } return(list); }
private Job TryStartNewDoBillJob(Pawn pawn, ActivityTask task, Building_ReligiousBuildingFacility giver) { Job job1 = HaulStuffOffBillGiverJob(pawn, giver, (Thing)null); if (job1 != null) { return(job1); } ActivityJob job2 = new ActivityJob() { def = MiscDefOf.DoReligionActivity, targetA = (LocalTargetInfo)((Thing)giver) }; job2.targetQueueB = new List <LocalTargetInfo>(this.chosenIngThings.Count); job2.countQueue = new List <int>(this.chosenIngThings.Count); for (int index = 0; index < this.chosenIngThings.Count; ++index) { job2.targetQueueB.Add((LocalTargetInfo)this.chosenIngThings[index].Thing); job2.countQueue.Add(this.chosenIngThings[index].Count); } job2.haulMode = HaulMode.ToCellNonStorage; job2.activityTask = task; return(job2); }
public ActivityTask(ActivityTask task) { this.dayOfTask = task.dayOfTask; this.startHour = task.startHour; this.property = task.property; this.loadID = Find.UniqueIDsManager.GetNextBillID(); this.humanlike = task.humanlike; this.animal = task.humanlike; this.filter = task.filter; }
public Dialog_ActivityTaskConfig(ActivityTask task) { this.task = task; this.forcePause = true; this.doCloseX = true; this.doCloseButton = true; this.absorbInputAroundWindow = true; this.closeOnClickedOutside = true; }
public bool ShouldDoNow(ActivityTask task) { if (tasks.Contains(task)) { if (GenLocalDate.DayOfSeason(Find.CurrentMap) == dayNumber && task.ShouldDoNow()) { return(true); } } return(false); }
public ReligionActivityData(Religion religion, Pawn organizer, ActivityTask task, IEnumerable <LocalTargetInfo> relics = null) { if (Scribe.mode == LoadSaveMode.Inactive) { this.relics = new List <LocalTargetInfo>(); if (relics != null) { this.relics.AddRange(relics); } this.activityJobNodes = new List <ActivityJobNode>(); this.activityJobNodes.Add(new ActivityJobNode(MiscDefOf.ReligionActivityPreparations, null)); this.activityJobNodes.AddRange(task.ActivityTaskDef.ActivityQueue.ActivityNodes); } this.religion = religion; this.organizer = organizer; this.task = task; }
private void DrawDayInterFace(Rect rect, ScheduledDay day) { float curY = rect.y; float height = rect.height / 5; Text.Font = GameFont.Tiny; for (int i = 0; i < 3; ++i) { if (i < day.Tasks.Count()) { ActivityTask task = day.Tasks.ElementAt(i); Widgets.Label(new Rect(rect.x, curY, rect.width, height), task.StartHour.ToString() + ". " + task.Label); curY += height; } } if (day.Tasks.Count() > 3) { Widgets.Label(new Rect(rect.x, curY, rect.width, height), "ReligionInfo_AndXTasksMore".Translate((NamedArgument)(day.Tasks.Count() - 3).ToString())); } Text.Font = GameFont.Small; }
public void DoListing(Rect rect) { GUI.BeginGroup(rect); Text.Font = GameFont.Small; WidgetRow widgetRow = new WidgetRow(0.0f, 0.0f, UIDirection.RightThenDown, 99999f, 4f); if (widgetRow.ButtonText("ReligionInfo_AddTask".Translate())) { Find.WindowStack.Add((Window) new FloatMenu(menuOptions)); } Text.Anchor = TextAnchor.UpperLeft; GUI.color = Color.white; Rect outRect = new Rect(0.0f, 35f, rect.width, rect.height - 35f); Rect viewRect = new Rect(0.0f, 0.0f, outRect.width - 16f, 1300f); Widgets.BeginScrollView(outRect, ref scrollPosition, viewRect, true); float y = 0.0f; for (int index = 0; index < day.Tasks.Count(); ++index) { ActivityTask task = day.Tasks.ElementAt(index); Rect rect1 = task.DoInterface(0.0f, y, viewRect.width, index); Rect deleteRect = new Rect(rect1.width - 24f, y, 24f, 24f); if (Widgets.ButtonImage(deleteRect, GraphicsCache.DeleteX, Color.white, Color.white * GenUI.SubtleMouseoverColor)) { day.Remove(task); SoundDefOf.Click.PlayOneShotOnCamera((Map)null); } //TooltipHandler.TipRegion(deleteRect, (TipSignal)"DeleteBillTip".Translate()); y += rect1.height + 6f; } if (Event.current.type == EventType.Layout) { viewRect.height = y + 60f; } Widgets.EndScrollView(); GUI.EndGroup(); }
private static bool TryFindRestrictedIngridients(ActivityTask task, Pawn pawn, Thing giver, List <ThingCount> chosenIngThings) { chosenIngThings.Clear(); newRelevantThings.Clear(); if (task.HumanlikeIngredient.ConcretePawn == null && task.AnimalIngredient.ConcretePawn == null) { return(false); } Predicate <Thing> baseValidator = (Predicate <Thing>)(t => { if (t.Spawned && !t.IsForbidden(pawn) && ((double)(t.Position - giver.Position).LengthHorizontalSquared < (double)task.IngredientSearchRadius * (double)task.IngredientSearchRadius && task.ThingFilter.Allows(t.def))) { return(pawn.CanReserve((LocalTargetInfo)t, 1, -1, (ReservationLayerDef)null, false)); } return(false); }); if (task.HumanlikeIngredient.ConcretePawn != null) { if (baseValidator(task.HumanlikeIngredient.ConcretePawn)) { ThingCountUtility.AddToList(chosenIngThings, task.HumanlikeIngredient.ConcretePawn, 1); return(true); } } if (task.AnimalIngredient.ConcretePawn != null) { if (baseValidator(task.AnimalIngredient.ConcretePawn)) { ThingCountUtility.AddToList(chosenIngThings, task.AnimalIngredient.ConcretePawn, 1); return(true); } } return(false); }
private static bool TryFindBestBillIngredientsInSet(List <Thing> availableThings, ActivityTask task, List <ThingCount> chosenIngThings) { IEnumerable <ThingDefsCount> thingDefsCount = task.ActivityTaskDef.ThingDefsCount; chosenIngThings.Clear(); for (int index1 = 0; index1 < thingDefsCount.Count(); ++index1) { float baseCount = thingDefsCount.ElementAt(index1).Count; for (int index2 = 0; index2 < availableThings.Count; ++index2) { Thing availableThing = availableThings[index2]; if (task.ThingFilter.Allows(availableThing.def)) { float num = task.ActivityTaskDef.IngredientValueGetter.ValuePerUnitOf(availableThing.def); int countToAdd = Mathf.Min(Mathf.CeilToInt(baseCount / num), availableThing.stackCount); ThingCountUtility.AddToList(chosenIngThings, availableThing, countToAdd); baseCount -= (float)countToAdd * num; if ((double)baseCount <= 9.99999974737875E-05) { break; } } } if ((double)baseCount > 9.99999974737875E-05) { return(false); } } return(true); }
private static bool TryFindBestTaskIngredients(ActivityTask task, Pawn pawn, Thing giver, List <ThingCount> chosenIngThings) { chosenIngThings.Clear(); newRelevantThings.Clear(); if (task.ActivityTaskDef.ThingDefsCount.Count() == 0) { return(true); } IntVec3 rootCell = GetGiverRootCell(giver, pawn); Region rootReg = rootCell.GetRegion(pawn.Map, RegionType.Set_Passable); if (rootReg == null) { return(false); } relevantThings.Clear(); processedThings.Clear(); bool foundAll = false; Predicate <Thing> baseValidator = (Predicate <Thing>)(t => { if (t.Spawned && !t.IsForbidden(pawn) && ((double)(t.Position - giver.Position).LengthHorizontalSquared < (double)task.IngredientSearchRadius * (double)task.IngredientSearchRadius && task.ThingFilter.Allows(t.def))) { return(pawn.CanReserve((LocalTargetInfo)t, 1, -1, (ReservationLayerDef)null, false)); } return(false); }); TraverseParms traverseParams = TraverseParms.For(pawn, Danger.Deadly, TraverseMode.ByPawn, false); RegionEntryPredicate entryCondition = (RegionEntryPredicate)((from, r) => r.Allows(traverseParams, false)); int adjacentRegionsAvailable = rootReg.Neighbors.Count <Region>((Func <Region, bool>)(region => entryCondition(rootReg, region))); int regionsProcessed = 0; processedThings.AddRange <Thing>(relevantThings); RegionProcessor regionProcessor = (RegionProcessor)(r => { List <Thing> thingList = r.ListerThings.ThingsMatching(ThingRequest.ForGroup(ThingRequestGroup.HaulableEver)); for (int index = 0; index < thingList.Count; ++index) { Thing thing = thingList[index]; if (!processedThings.Contains(thing) && ReachabilityWithinRegion.ThingFromRegionListerReachable(thing, r, PathEndMode.ClosestTouch, pawn) && baseValidator(thing)) { newRelevantThings.Add(thing); processedThings.Add(thing); } } ++regionsProcessed; if (newRelevantThings.Count > 0 && regionsProcessed > adjacentRegionsAvailable) { Comparison <Thing> comparison = (Comparison <Thing>)((t1, t2) => ((float)(t1.Position - rootCell).LengthHorizontalSquared).CompareTo((float)(t2.Position - rootCell).LengthHorizontalSquared)); newRelevantThings.Sort(comparison); relevantThings.AddRange((IEnumerable <Thing>)newRelevantThings); newRelevantThings.Clear(); if (TryFindBestBillIngredientsInSet(relevantThings, task, chosenIngThings)) { foundAll = true; return(true); } } return(false); }); RegionTraverser.BreadthFirstTraverse(rootReg, entryCondition, regionProcessor, 99999, RegionType.Set_Passable); relevantThings.Clear(); newRelevantThings.Clear(); processedThings.Clear(); ingredientsOrdered.Clear(); return(foundAll); }
public static void StartActivity(Religion religion, Pawn organizer, ActivityTask task, IEnumerable <LocalTargetInfo> relics = null) { ReligionActivityData data = new ReligionActivityData(religion, organizer, task, relics); LordMaker.MakeNewLord(organizer.Faction, new LordJob_ReligionActivity(data), organizer.Map, new[] { organizer }); }
public void Remove(ActivityTask task) { tasks.Remove(task); }
public void Add(ActivityTask task) { tasks.Add(task); }