示例#1
0
        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);
        }
示例#2
0
        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);
        }
示例#3
0
 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);
 }
示例#6
0
        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;
        }
示例#7
0
        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();
        }
示例#9
0
        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);
        }
示例#10
0
        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);
        }
示例#11
0
        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);
 }