コード例 #1
0
        private static string HealthReport([NotNull] Pawn pawn)
        {
            var segments = new List <string>
            {
                ResponseHelper.JoinPair("TKUtils.PawnHealth.OverallHealth".Localize(), pawn.health.summaryHealth.SummaryHealthPercent.ToStringPercent())
            };

            if (pawn.health.State != PawnHealthState.Mobile)
            {
                segments[0] += $" {GetHealthStateFriendly(pawn.health.State)}";
            }
            else
            {
                segments[0] += $" {GetMoodFriendly(pawn)}";
            }

            if (pawn.health.hediffSet.BleedRateTotal > 0.01f)
            {
                int ticks = HealthUtility.TicksUntilDeathDueToBloodLoss(pawn);

                segments.Add(
                    ticks >= 60000
                        ? ResponseHelper.BleedingSafeGlyphs.AltText("WontBleedOutSoon".Localize().CapitalizeFirst())
                        : $"{ResponseHelper.BleedingBadGlyphs.AltText("BleedingRate".Localize())} ({ticks.ToStringTicksToPeriod(shortForm: true)})"
                    );
            }

            List <PawnCapacityDef> source = GetCapacitiesForPawn(pawn).ToList();

            if (source.Count > 0)
            {
                source = source.OrderBy(d => d.listOrder).ToList();

                string[] capacities = source.Where(capacity => PawnCapacityUtility.BodyCanEverDoCapacity(pawn.RaceProps.body, capacity))
                                      .Select(
                    capacity => ResponseHelper.JoinPair(
                        RichTextHelper.StripTags(capacity.GetLabelFor(pawn)).CapitalizeFirst(),
                        HealthCardUtility.GetEfficiencyLabel(pawn, capacity).First
                        )
                    )
                                      .ToArray();

                segments.Add(capacities.SectionJoin());
            }
            else
            {
                segments.Add("TKUtils.Responses.UnsupportedRace".LocalizeKeyed(pawn.kindDef.race.defName));
            }

            if (!TkSettings.ShowSurgeries)
            {
                return(segments.GroupedJoin());
            }

            BillStack surgeries = pawn.health.surgeryBills;

            if (surgeries?.Count <= 0)
            {
                return(segments.GroupedJoin());
            }

            string[] queued = surgeries !.Bills.Select(item => RichTextHelper.StripTags(item.LabelCap)).ToArray();

            segments.Add(ResponseHelper.JoinPair("TKUtils.PawnHealth.QueuedSurgeries".Localize(), queued.SectionJoin()));

            return(segments.GroupedJoin());
        }