protected override Job TryGiveJob(Pawn pawn)
        {
            if (pawn.mindState.duty == null)
            {
                return(null);
            }
            LordJob_Joinable_Concert lordJob_Joinable_Concert = pawn.GetLord().LordJob as LordJob_Joinable_Concert;

            if (lordJob_Joinable_Concert == null || lordJob_Joinable_Concert.Organizer != pawn)
            {
                return(null);
            }
            IntVec3 gatherSpot = pawn.mindState.duty.focus.Cell;
            Building_MusicalInstrument building_MusicalInstrument = pawn.Map.listerBuildings.AllBuildingsColonistOfClass <Building_MusicalInstrument>().Where(delegate(Building_MusicalInstrument i)
            {
                if (!GatheringsUtility.InGatheringArea(i.InteractionCell, gatherSpot, pawn.Map))
                {
                    return(false);
                }
                return(GatheringWorker_Concert.InstrumentAccessible(i, pawn) ? true : false);
            }).RandomElementWithFallback();

            if (building_MusicalInstrument != null)
            {
                Job job = JobMaker.MakeJob(JobDefOf.Play_MusicalInstrument, building_MusicalInstrument, building_MusicalInstrument.InteractionCell);
                job.doUntilGatheringEnded = true;
                job.expiryInterval        = lordJob_Joinable_Concert.DurationTicks;
                return(job);
            }
            return(null);
        }
        protected override bool Satisfied(Pawn pawn)
        {
            if (pawn.mindState.duty == null)
            {
                return(false);
            }
            IntVec3 cell = pawn.mindState.duty.focus.Cell;

            return(GatheringsUtility.InGatheringArea(pawn.Position, cell, pawn.Map));
        }
 private bool AreFiancesInPartyArea()
 {
     if (!lord.ownedPawns.Contains(firstPawn) || !lord.ownedPawns.Contains(secondPawn))
     {
         return(false);
     }
     if (firstPawn.Map != base.Map || !GatheringsUtility.InGatheringArea(firstPawn.Position, spot, base.Map))
     {
         return(false);
     }
     if (secondPawn.Map != base.Map || !GatheringsUtility.InGatheringArea(secondPawn.Position, spot, base.Map))
     {
         return(false);
     }
     return(true);
 }
        public override void LordToilTick()
        {
            List <Pawn> ownedPawns = lord.ownedPawns;

            for (int i = 0; i < ownedPawns.Count; i++)
            {
                if (GatheringsUtility.InGatheringArea(ownedPawns[i].Position, spot, base.Map))
                {
                    ownedPawns[i].needs.joy.GainJoy(joyPerTick, JoyKindDefOf.Social);
                    if (!Data.presentForTicks.ContainsKey(ownedPawns[i]))
                    {
                        Data.presentForTicks.Add(ownedPawns[i], 0);
                    }
                    Data.presentForTicks[ownedPawns[i]]++;
                }
            }
        }
        private Thing FindBestGame(Pawn pawn, bool inBed, IntVec3 gatheringSpot)
        {
            tmpCandidates.Clear();
            GetSearchSet(pawn, tmpCandidates);
            if (tmpCandidates.Count == 0)
            {
                return(null);
            }
            Predicate <Thing> predicate = (Thing t) => CanInteractWith(pawn, t, inBed);

            if (gatheringSpot.IsValid)
            {
                Predicate <Thing> oldValidator = predicate;
                predicate = ((Thing x) => GatheringsUtility.InGatheringArea(x.Position, gatheringSpot, pawn.Map) && oldValidator(x));
            }
            Thing result = GenClosest.ClosestThing_Global_Reachable(pawn.Position, pawn.Map, tmpCandidates, PathEndMode.OnCell, TraverseParms.For(pawn), 9999f, predicate);

            tmpCandidates.Clear();
            return(result);
        }
Ejemplo n.º 6
0
        private Thing FindFood(Pawn pawn, IntVec3 gatheringSpot)
        {
            Predicate <Thing> validator = delegate(Thing x)
            {
                if (!x.IngestibleNow)
                {
                    return(false);
                }
                if (!x.def.IsNutritionGivingIngestible)
                {
                    return(false);
                }
                if (!GatheringsUtility.InGatheringArea(x.Position, gatheringSpot, pawn.Map))
                {
                    return(false);
                }
                if (x.def.IsDrug)
                {
                    return(false);
                }
                if ((int)x.def.ingestible.preferability <= 4)
                {
                    return(false);
                }
                if (!pawn.WillEat(x))
                {
                    return(false);
                }
                if (x.IsForbidden(pawn))
                {
                    return(false);
                }
                if (!x.IsSociallyProper(pawn))
                {
                    return(false);
                }
                return(pawn.CanReserve(x) ? true : false);
            };

            return(GenClosest.ClosestThingReachable(pawn.Position, pawn.Map, ThingRequest.ForGroup(ThingRequestGroup.FoodSourceNotPlantOrTree), PathEndMode.ClosestTouch, TraverseParms.For(TraverseMode.NoPassClosedDoors), 14f, validator, null, 0, 12));
        }
 protected override Trigger_TicksPassed GetTimeoutTrigger()
 {
     return(new Trigger_TicksPassedAfterConditionMet(base.DurationTicks, () => GatheringsUtility.InGatheringArea(organizer.Position, spot, organizer.Map), 60));
 }
Ejemplo n.º 8
0
        public override StateGraph CreateGraph()
        {
            StateGraph stateGraph = new StateGraph();
            LordToil   lordToil   = CreateGatheringToil(spot, organizer, gatheringDef);

            stateGraph.AddToil(lordToil);
            LordToil_End lordToil_End = new LordToil_End();

            stateGraph.AddToil(lordToil_End);
            float      speechDuration = 12500f;
            Transition transition     = new Transition(lordToil, lordToil_End);

            transition.AddTrigger(new Trigger_TickCondition(ShouldBeCalledOff));
            transition.AddTrigger(new Trigger_PawnKilled());
            transition.AddTrigger(new Trigger_PawnLost(PawnLostCondition.LeftVoluntarily, organizer));
            transition.AddPreAction(new TransitionAction_Custom((Action) delegate
            {
                ApplyOutcome((float)lord.ticksInToil / speechDuration);
            }));
            stateGraph.AddTransition(transition);
            timeoutTrigger = new Trigger_TicksPassedAfterConditionMet((int)speechDuration, () => GatheringsUtility.InGatheringArea(organizer.Position, spot, organizer.Map), 60);
            Transition transition2 = new Transition(lordToil, lordToil_End);

            transition2.AddTrigger(timeoutTrigger);
            transition2.AddPreAction(new TransitionAction_Custom((Action) delegate
            {
                ApplyOutcome(1f);
            }));
            stateGraph.AddTransition(transition2);
            return(stateGraph);
        }
Ejemplo n.º 9
0
 public override Job TryGiveJobInGatheringArea(Pawn pawn, IntVec3 gatheringSpot)
 {
     return(TryGiveJobInternal(pawn, (Thing x) => !x.Spawned || GatheringsUtility.InGatheringArea(x.Position, gatheringSpot, pawn.Map)));
 }
 public override Job TryGiveJobInGatheringArea(Pawn pawn, IntVec3 gatheringSpot)
 {
     return(TryGiveJobInt(pawn, (CompGatherSpot x) => GatheringsUtility.InGatheringArea(x.parent.Position, gatheringSpot, pawn.Map)));
 }