コード例 #1
0
            static void Postfix(Pawn __instance)
            {
                var escapeTracker = EscapeTracker.Of(__instance);

                Scribe_Deep.Look(ref escapeTracker, "EscapeTracker", new object[] { __instance });
                EscapeTracker.Save(__instance, escapeTracker);
            }
コード例 #2
0
 static void Postfix(Pawn __instance)
 {
     if (!__instance.Dead)
     {
         EscapeTracker.Of(__instance)?.Tick();
     }
 }
コード例 #3
0
 public override void Initialize(CompProperties props)
 {
     base.Initialize(props);
     if (escapeTracker == null)
     {
         escapeTracker = new EscapeTracker(this.parent as Pawn);
     }
 }
コード例 #4
0
        protected override bool Satisfied(Pawn pawn)
        {
            if (pawn.IsPrisoner)
            {
                //show tutorials
                Tutorials.Introduction();
                Tutorials.Management();

                IntVec3 c;

                var need = pawn.needs.TryGetNeed <Need_Motivation>();
                if (need == null)
                {
                    if (!pawn.guest.PrisonerIsSecure || RCellFinder.TryFindBestExitSpot(pawn, out c, TraverseMode.ByPawn))
                    {
                        return(false);
                    }
                    else if (PrisonLaborUtility.LaborEnabled(pawn))
                    {
                        return(true);
                    }
                    else
                    {
                        return(false);
                    }
                }

                // Prisoner will escape if get ready to run.
                // If he can run he will start ticking impatient, once complete he will get ready.
                var escapeTracker = EscapeTracker.Of(pawn, true);
                if (pawn.guest.PrisonerIsSecure && RCellFinder.TryFindBestExitSpot(pawn, out c, TraverseMode.ByPawn))
                {
                    if (escapeTracker.ReadyToEscape)
                    {
                        return(false);
                    }
                    else
                    {
                        escapeTracker.CanEscape = true;
                    }
                }
                else
                {
                    escapeTracker.CanEscape = false;
                }


                if (PrisonLaborUtility.LaborEnabled(pawn))
                {
                    return(true);
                }

                need.IsPrisonerWorking = false;
            }
            return(false);
        }
コード例 #5
0
        protected override string GetTip(Pawn pawn)
        {
            var escapeTracker = EscapeTracker.Of(pawn);

            if (escapeTracker != null)
            {
                return($"(Cap:{ escapeTracker.EscapeLevel})");
            }
            return("");
        }
コード例 #6
0
        public static void AppendDevLines(Listing_Standard listingStandard)
        {
            var pawn          = Find.Selector.SingleSelectedThing as Pawn;
            var escapeTracker = EscapeTracker.Of(pawn);

            if (escapeTracker != null)
            {
                listingStandard.Label("Dev: Ready to escape: " + (escapeTracker.ReadyToEscape ? "ready" : escapeTracker.ReadyToRunPercentage + "%") + $" (Cap:{escapeTracker.EscapeLevel})", -1f);
            }
        }
コード例 #7
0
        protected override string GetTextFor(Pawn pawn)
        {
            var escapeTracker = EscapeTracker.Of(pawn);

            if (escapeTracker != null)
            {
                return(escapeTracker.ReadyToEscape ? "ready" : escapeTracker.ReadyToRunPercentage + " %");
            }

            return("0 %");
        }
コード例 #8
0
ファイル: PrisonerComp.cs プロジェクト: Aviuz/PrisonLabor
 public override void CompTickRare()
 {
     if (Active)
     {
         EscapeTracker.Tick();
     }
     else
     {
         EscapeTracker.DeRegister(this.parent as Pawn);
     }
 }
コード例 #9
0
        public static bool IsReadyToEscape(Pawn pawn)
        {
            var escapeTracker = EscapeTracker.Of(pawn, true);

            if (escapeTracker.ReadyToEscape)
            {
                return(true);
            }
            else
            {
                return(false);
            }
        }
コード例 #10
0
        public override Job JobOnThing(Pawn pawn, Thing t, bool forced = false)
        {
            var prisoner = t as Pawn;
            var need     = prisoner?.needs.TryGetNeed <Need_Motivation>();

            if (need == null || prisoner == null)
            {
                return(null);
            }
            if (!ShouldTakeCareOfPrisoner(pawn, prisoner))
            {
                return(null);
            }
            if (prisoner.Downed || !pawn.CanReserve(t, 1, -1, null, false) || !prisoner.Awake())
            {
                return(null);
            }
            if (pawn.IsPrisoner)
            {
                return(null);
            }
            var escapeTracker = EscapeTracker.Of(prisoner, true);

            if (!PrisonLaborUtility.LaborEnabled(prisoner) && !escapeTracker.CanEscape)
            {
                return(null);
            }
            if (PrisonLaborUtility.RecruitInLaborEnabled(prisoner))
            {
                return(new Job(JobDefOf.PrisonerAttemptRecruit, t));
            }
            if (PrisonLaborUtility.ConvertInLaborEnabled(prisoner))
            {
                return(new Job(JobDefOf.PrisonerConvert, t));
            }
            if ((!PrisonLaborUtility.WorkTime(prisoner) || !need.ShouldBeMotivated) && !escapeTracker.CanEscape)
            {
                return(null);
            }

            return(new Job(DefDatabase <JobDef> .GetNamed("PrisonLabor_PrisonerSupervise"), prisoner));
        }
コード例 #11
0
ファイル: PrisonerComp.cs プロジェクト: Aviuz/PrisonLabor
 public override void PostDeSpawn(Map map)
 {
     EscapeTracker.DeRegister(this.parent as Pawn);
 }