public override string GetExplanation(StatRequest req, ToStringNumberSense numberSense)
        {
            if (!req.HasThing || !(req.Thing is Pawn)) return base.GetExplanation(req, numberSense);

            var stringBuilder = new StringBuilder();
            stringBuilder.AppendLine("StatsReport_BaseValue".Translate());
            float statValueAbstract = stat.defaultBaseValue;
            stringBuilder.AppendLine("    " + stat.ValueToString(statValueAbstract, numberSense));

            var pawn = req.Thing as Pawn;
            stringBuilder.AppendLine();
            stringBuilder.AppendLine(string.Format("{0}: x{1} {2}",
                "StatsReport_CharacterQuality".Translate(), PriceUtility.PawnQualityPriceFactor(pawn).ToStringPercent(), -stat.defaultBaseValue));
            return stringBuilder.ToString();
        }
        public override string GetExplanation(StatRequest req, ToStringNumberSense numberSense)
        {
            var stringBuilder = new StringBuilder();
            stringBuilder.Append(base.GetExplanation(req, numberSense));

            var pawn = req.Thing as Pawn;
            if (pawn == null || pawn.story == null) return stringBuilder.ToString();
            var isAbrasive = pawn.story.traits.HasTrait(TraitDefOf.Abrasive);
            var abrasiveFactor = isAbrasive ? 0.5f : 1f;

            if (isAbrasive)
            {
                stringBuilder.AppendLine();
                stringBuilder.AppendLine(string.Format("    {0}: x{1}", TraitDefOf.Abrasive.label.CapitalizeFirst(), abrasiveFactor.ToStringPercent()));
            }
            return stringBuilder.ToString();
        }
        public override string GetExplanation(StatRequest req, ToStringNumberSense numberSense)
        {
            if (!req.HasThing || !(req.Thing is Pawn)) return base.GetExplanation(req, numberSense);

            var stringBuilder = new StringBuilder();
            stringBuilder.AppendLine("StatsReport_BaseValue".Translate());
            float statValueAbstract = stat.defaultBaseValue;
            stringBuilder.AppendLine("    " + stat.ValueToString(statValueAbstract, numberSense));

            var pawn = req.Thing as Pawn;

            stringBuilder.AppendLine();
            stringBuilder.AppendLine("StatsReport_Skills".Translate());

            int level = pawn.skills.GetSkill(SkillDefOf.Social).level;
            stringBuilder.AppendLine(string.Format("    {0} ({1}): +{2}", SkillDefOf.Social.LabelCap, level, (level/8f).ToStringPercent()));

            return stringBuilder.ToString();
        }
Example #4
0
 public override string GetExplanationUnfinalized(StatRequest req, ToStringNumberSense numberSense)
 {
     return(string.Empty);
 }
 public override string GetExplanationFinalizePart(StatRequest req, ToStringNumberSense numberSense, float finalVal)
 {
     return("StatsReport_FinalValue".Translate() + ": " + GetFinalDisplayValue(req));
 }
 public override string GetExplanationFinalizePart(StatRequest req, ToStringNumberSense numberSense, float finalVal)
 {
     return("");
 }
Example #7
0
        public static string ToStringByStyle(this float f, ToStringStyle style, ToStringNumberSense numberSense = ToStringNumberSense.Absolute)
        {
            if (style == ToStringStyle.Temperature && numberSense == ToStringNumberSense.Offset)
            {
                style = ToStringStyle.TemperatureOffset;
            }
            if (numberSense == ToStringNumberSense.Factor)
            {
                if (f >= 10f)
                {
                    style = ToStringStyle.FloatMaxTwo;
                }
                else
                {
                    style = ToStringStyle.PercentZero;
                }
            }
            string text;

            switch (style)
            {
            case ToStringStyle.Integer:
                text = Mathf.RoundToInt(f).ToString();
                break;

            case ToStringStyle.FloatOne:
                text = f.ToString("F1");
                break;

            case ToStringStyle.FloatTwo:
                text = f.ToString("F2");
                break;

            case ToStringStyle.FloatThree:
                text = f.ToString("F3");
                break;

            case ToStringStyle.FloatMaxOne:
                text = f.ToString("0.#");
                break;

            case ToStringStyle.FloatMaxTwo:
                text = f.ToString("0.##");
                break;

            case ToStringStyle.FloatMaxThree:
                text = f.ToString("0.###");
                break;

            case ToStringStyle.FloatTwoOrThree:
                text = f.ToString((f != 0f && Mathf.Abs(f) < 0.01f) ? "F3" : "F2");
                break;

            case ToStringStyle.PercentZero:
                text = f.ToStringPercent();
                break;

            case ToStringStyle.PercentOne:
                text = f.ToStringPercent("F1");
                break;

            case ToStringStyle.PercentTwo:
                text = f.ToStringPercent("F2");
                break;

            case ToStringStyle.Temperature:
                text = f.ToStringTemperature("F1");
                break;

            case ToStringStyle.TemperatureOffset:
                text = f.ToStringTemperatureOffset("F1");
                break;

            case ToStringStyle.WorkAmount:
                text = f.ToStringWorkAmount();
                break;

            default:
                Log.Error("Unknown ToStringStyle " + style, false);
                text = f.ToString();
                break;
            }
            if (numberSense == ToStringNumberSense.Offset)
            {
                if (f >= 0f)
                {
                    text = "+" + text;
                }
            }
            else if (numberSense == ToStringNumberSense.Factor)
            {
                text = "x" + text;
            }
            return(text);
        }
Example #8
0
        public override string GetExplanationUnfinalized(StatRequest req, ToStringNumberSense numberSense)
        {
            if (!(req.Def is ThingDef def))
            {
                return(null);
            }

            /* Damage section */
            CompEquippable         equipComp = null;
            CompLootAffixableThing lootComp  = null;

            if (req.HasThing)
            {
                var thing = (ThingWithComps)req.Thing;
                equipComp = thing.TryGetComp <CompEquippable>();
                lootComp  = thing.TryGetComp <CompLootAffixableThing>();
            }

            Verb           verb      = equipComp?.AllVerbs.First(v => v.verbProps.isPrimary);
            VerbProperties verbProps = verb != null ? verb.verbProps : def.Verbs.First(vp => vp.isPrimary);
            Pawn           attacker  = req.HasThing ? GetCurrentWeaponUser(req.Thing) : null;
            var            projProps = verbProps.defaultProjectile.projectile;

            var projModifier = (LootAffixModifier_VerbPropertiesChange_Def)lootComp?.AllModifiers.FirstOrFallback(
                lam => lam.AppliesTo == ModifierTarget.VerbProperties && lam is LootAffixModifier_VerbPropertiesChange_Def lamVPCD && lamVPCD.affectedField == "defaultProjectile"
                );
            ThingDef modProjectile = projModifier != null ? (ThingDef)projModifier.resolvedDef : null;
            var      modProjProps  = modProjectile?.projectile;

            float chance = modProjProps != null ? 1f - projModifier.GetRealChance(lootComp.parent) : 1f;

            if (chance <= 0.05f)
            {
                chance = 1f;                   // already permanently set to "base" verbProps
            }
            string chanceStr = GenText.ToStringPercent(chance);

            float baseDamage =
                projProps.damageDef.harmsHealth == false ? 0f :
                req.HasThing         ? projProps.GetDamageAmount(req.Thing) :
                req.StuffDef != null?projProps.GetDamageAmount(def.GetStatValueAbstract(StatDefOf.RangedWeapon_DamageMultiplier, req.StuffDef)) :
                    projProps.GetDamageAmount(def.GetStatValueAbstract(StatDefOf.RangedWeapon_DamageMultiplier))
            ;

            float damage = baseDamage * verbProps.burstShotCount * chance;

            string reportText = "Damage".Translate() + ":\n";

            if (chance < 1f)
            {
                reportText += "    " + "RimLoot_StatsReport_ProjectileWithChance".Translate(
                    verbProps.defaultProjectile.Named("PROJECTILE"), chanceStr.Named("chance")
                    ) + "\n";
                reportText += string.Format("    {0}: {1} * {2} * {3} = {4}\n\n",
                                            "Damage".Translate(),
                                            baseDamage.ToStringDecimalIfSmall(),
                                            verbProps.burstShotCount,
                                            chanceStr,
                                            damage.ToStringDecimalIfSmall()
                                            );

                float  modChance    = 1f - chance;
                string modChanceStr = GenText.ToStringPercent(modChance);

                float modBaseDamage =
                    modProjProps.damageDef.harmsHealth == false ? 0f :
                    modProjProps.GetDamageAmount(req.Thing)
                ;
                float modDamage = modBaseDamage * verbProps.burstShotCount * modChance;

                reportText += "    " + "RimLoot_StatsReport_ProjectileWithChance".Translate(
                    modProjectile.Named("PROJECTILE"), modChanceStr.Named("chance")
                    ) + "\n";
                reportText += string.Format("    {0}: {1} * {2} * {3} = {4}\n\n",
                                            "Damage".Translate(),
                                            modBaseDamage.ToStringDecimalIfSmall(),
                                            verbProps.burstShotCount,
                                            modChanceStr,
                                            modDamage.ToStringDecimalIfSmall()
                                            );

                reportText += string.Format("{0}: {1}\n\n", "StatsReport_TotalValue".Translate(), (damage + modDamage).ToStringDecimalIfSmall());
            }
            else
            {
                reportText += "    " + "RimLoot_StatsReport_Projectile".Translate(verbProps.defaultProjectile.Named("PROJECTILE")) + "\n";
                reportText += string.Format("    {0}: {1} * {2} = {3}\n\n",
                                            "Damage".Translate(),
                                            baseDamage.ToStringDecimalIfSmall(),
                                            verbProps.burstShotCount,
                                            damage.ToStringDecimalIfSmall()
                                            );
            }

            /* Seconds per attack */
            float secondsSpent = 0;
            float cooldown     =
                req.HasThing         ? req.Thing.GetStatValue(StatDefOf.RangedWeapon_Cooldown, true) :
                req.StuffDef != null?def.GetStatValueAbstract(StatDefOf.RangedWeapon_Cooldown, req.StuffDef) :
                    def.GetStatValueAbstract(StatDefOf.RangedWeapon_Cooldown)
            ;

            float burstShotTime = ((verbProps.burstShotCount - 1) * verbProps.ticksBetweenBurstShots).TicksToSeconds();

            if (verb != null)
            {
                secondsSpent = verbProps.AdjustedFullCycleTime(verb, attacker);
            }
            else
            {
                secondsSpent = verbProps.warmupTime + cooldown + burstShotTime;
            }

            reportText += GenText.ToTitleCaseSmart("SecondsPerAttackLower".Translate()) + ":\n";
            reportText += string.Format("    {0}: {1}\n", "WarmupTime".Translate(), "PeriodSeconds".Translate(verbProps.warmupTime.ToStringDecimalIfSmall()));
            if (burstShotTime > 0)
            {
                reportText += string.Format("    {0}: {1}\n", "BurstShotFireRate".Translate(), "PeriodSeconds".Translate(burstShotTime.ToStringDecimalIfSmall()));
            }
            reportText += string.Format("    {0}: {1}\n", "CooldownTime".Translate(), "PeriodSeconds".Translate(cooldown.ToStringDecimalIfSmall()));
            reportText += string.Format("{0}: {1}\n\n", "StatsReport_TotalValue".Translate(), "PeriodSeconds".Translate(secondsSpent.ToStringDecimalIfSmall()));

            /* Average accuracy */

            // Every integer range possible as an average
            float wpnAccuracy  = 0;
            float pawnAccuracy = 0;

            for (int i = 3; i <= verbProps.range; i++)
            {
                wpnAccuracy += verbProps.GetHitChanceFactor(req.Thing, i);
                if (attacker != null)
                {
                    pawnAccuracy += ShotReport.HitFactorFromShooter(attacker, i);
                }
            }
            if (verbProps.range >= 3)
            {
                wpnAccuracy /= verbProps.range - 2;
                if (attacker != null)
                {
                    pawnAccuracy /= verbProps.range - 2;
                }
            }

            reportText += "AverageAccuracy".Translate() + ":\n";
            reportText += string.Format("    {0}: {1}\n", "ShootReportWeapon".Translate(), wpnAccuracy.ToStringPercent("F1"));
            if (pawnAccuracy > 0)
            {
                reportText += string.Format("    {0}: {1}\n", "ShootReportShooterAbility".Translate(), pawnAccuracy.ToStringPercent("F1"));
            }

            return(reportText);
        }
Example #9
0
 public override string GetStatDrawEntryLabel(StatDef stat, float value, ToStringNumberSense numberSense, StatRequest optionalReq, bool finalized = true)
 {
     return(new SEB("StatsReport_RWHS", "TemperaturePerSecond").ValueNoFormat(GetValueUnfinalized(optionalReq).ToString("0.###")).ToString());
 }
Example #10
0
        public override string GetExplanationUnfinalized(StatRequest req, ToStringNumberSense numberSense)
        {
            var pawn = (Pawn)req.Thing;

            return($"Health scale: {pawn.HealthScale} x {HealthScaleFactor}");
        }
Example #11
0
        public virtual string GetExplanationUnfinalized(StatRequest req, ToStringNumberSense numberSense)
        {
            StringBuilder stringBuilder = new StringBuilder();
            float         baseValueFor  = GetBaseValueFor(req);

            if (baseValueFor != 0f)
            {
                stringBuilder.AppendLine("StatsReport_BaseValue".Translate() + ": " + stat.ValueToString(baseValueFor, numberSense));
            }
            Pawn pawn = req.Thing as Pawn;

            if (pawn != null)
            {
                if (pawn.skills != null)
                {
                    if (stat.skillNeedOffsets != null)
                    {
                        stringBuilder.AppendLine("StatsReport_Skills".Translate());
                        for (int i = 0; i < stat.skillNeedOffsets.Count; i++)
                        {
                            SkillNeed skillNeed = stat.skillNeedOffsets[i];
                            int       level     = pawn.skills.GetSkill(skillNeed.skill).Level;
                            float     val       = skillNeed.ValueFor(pawn);
                            stringBuilder.AppendLine((string)("    " + skillNeed.skill.LabelCap + " (") + level + "): " + val.ToStringSign() + ValueToString(val, finalized: false));
                        }
                    }
                }
                else if (stat.noSkillOffset != 0f)
                {
                    stringBuilder.AppendLine("StatsReport_Skills".Translate());
                    stringBuilder.AppendLine("    " + "default".Translate().CapitalizeFirst() + " : " + stat.noSkillOffset.ToStringSign() + ValueToString(stat.noSkillOffset, finalized: false));
                }
                if (stat.capacityOffsets != null)
                {
                    stringBuilder.AppendLine("StatsReport_Health".CanTranslate() ? "StatsReport_Health".Translate() : "StatsReport_HealthFactors".Translate());
                    foreach (PawnCapacityOffset item in stat.capacityOffsets.OrderBy((PawnCapacityOffset hfa) => hfa.capacity.listOrder))
                    {
                        string text   = item.capacity.GetLabelFor(pawn).CapitalizeFirst();
                        float  level2 = pawn.health.capacities.GetLevel(item.capacity);
                        float  offset = item.GetOffset(pawn.health.capacities.GetLevel(item.capacity));
                        string text2  = ValueToString(offset, finalized: false);
                        string text3  = Mathf.Min(level2, item.max).ToStringPercent() + ", " + "HealthOffsetScale".Translate(item.scale.ToString() + "x");
                        if (item.max < 999f)
                        {
                            text3 += ", " + "HealthFactorMaxImpact".Translate(item.max.ToStringPercent());
                        }
                        stringBuilder.AppendLine("    " + text + ": " + offset.ToStringSign() + text2 + " (" + text3 + ")");
                    }
                }
                if ((int)pawn.RaceProps.intelligence >= 1)
                {
                    if (pawn.story != null && pawn.story.traits != null)
                    {
                        List <Trait> list  = pawn.story.traits.allTraits.Where((Trait tr) => tr.CurrentData.statOffsets != null && tr.CurrentData.statOffsets.Any((StatModifier se) => se.stat == stat)).ToList();
                        List <Trait> list2 = pawn.story.traits.allTraits.Where((Trait tr) => tr.CurrentData.statFactors != null && tr.CurrentData.statFactors.Any((StatModifier se) => se.stat == stat)).ToList();
                        if (list.Count > 0 || list2.Count > 0)
                        {
                            stringBuilder.AppendLine("StatsReport_RelevantTraits".Translate());
                            for (int j = 0; j < list.Count; j++)
                            {
                                Trait  trait = list[j];
                                string valueToStringAsOffset = trait.CurrentData.statOffsets.First((StatModifier se) => se.stat == stat).ValueToStringAsOffset;
                                stringBuilder.AppendLine("    " + trait.LabelCap + ": " + valueToStringAsOffset);
                            }
                            for (int k = 0; k < list2.Count; k++)
                            {
                                Trait  trait2           = list2[k];
                                string toStringAsFactor = trait2.CurrentData.statFactors.First((StatModifier se) => se.stat == stat).ToStringAsFactor;
                                stringBuilder.AppendLine("    " + trait2.LabelCap + ": " + toStringAsFactor);
                            }
                        }
                    }
                    if (RelevantGear(pawn, stat).Any())
                    {
                        stringBuilder.AppendLine("StatsReport_RelevantGear".Translate());
                        if (pawn.apparel != null)
                        {
                            for (int l = 0; l < pawn.apparel.WornApparel.Count; l++)
                            {
                                Apparel apparel = pawn.apparel.WornApparel[l];
                                if (GearAffectsStat(apparel.def, stat))
                                {
                                    stringBuilder.AppendLine(InfoTextLineFromGear(apparel, stat));
                                }
                            }
                        }
                        if (pawn.equipment != null && pawn.equipment.Primary != null && GearAffectsStat(pawn.equipment.Primary.def, stat))
                        {
                            stringBuilder.AppendLine(InfoTextLineFromGear(pawn.equipment.Primary, stat));
                        }
                    }
                }
                bool          flag    = false;
                List <Hediff> hediffs = pawn.health.hediffSet.hediffs;
                for (int m = 0; m < hediffs.Count; m++)
                {
                    HediffStage curStage = hediffs[m].CurStage;
                    if (curStage == null)
                    {
                        continue;
                    }
                    float num = curStage.statOffsets.GetStatOffsetFromList(stat);
                    if (num != 0f)
                    {
                        float val2 = num;
                        if (curStage.statOffsetEffectMultiplier != null)
                        {
                            num *= pawn.GetStatValue(curStage.statOffsetEffectMultiplier);
                        }
                        if (!flag)
                        {
                            stringBuilder.AppendLine("StatsReport_RelevantHediffs".Translate());
                            flag = true;
                        }
                        stringBuilder.Append("    " + hediffs[m].LabelBaseCap + ": " + ValueToString(num, finalized: false, ToStringNumberSense.Offset));
                        if (curStage.statOffsetEffectMultiplier != null)
                        {
                            stringBuilder.Append(" (" + ValueToString(val2, finalized: false, ToStringNumberSense.Offset) + " x " + ValueToString(pawn.GetStatValue(curStage.statOffsetEffectMultiplier), finalized: true, curStage.statOffsetEffectMultiplier.toStringNumberSense) + " " + curStage.statOffsetEffectMultiplier.LabelCap + ")");
                        }
                        stringBuilder.AppendLine();
                    }
                    float num2 = curStage.statFactors.GetStatFactorFromList(stat);
                    if (Math.Abs(num2 - 1f) > float.Epsilon)
                    {
                        float val3 = num2;
                        if (curStage.statFactorEffectMultiplier != null)
                        {
                            num2 = ScaleFactor(num2, pawn.GetStatValue(curStage.statFactorEffectMultiplier));
                        }
                        if (!flag)
                        {
                            stringBuilder.AppendLine("StatsReport_RelevantHediffs".Translate());
                            flag = true;
                        }
                        stringBuilder.Append("    " + hediffs[m].LabelBaseCap + ": " + ValueToString(num2, finalized: false, ToStringNumberSense.Factor));
                        if (curStage.statFactorEffectMultiplier != null)
                        {
                            stringBuilder.Append(" (" + ValueToString(val3, finalized: false, ToStringNumberSense.Factor) + " x " + ValueToString(pawn.GetStatValue(curStage.statFactorEffectMultiplier), finalized: false) + " " + curStage.statFactorEffectMultiplier.LabelCap + ")");
                        }
                        stringBuilder.AppendLine();
                    }
                }
                float statFactorFromList = pawn.ageTracker.CurLifeStage.statFactors.GetStatFactorFromList(stat);
                if (statFactorFromList != 1f)
                {
                    stringBuilder.AppendLine("StatsReport_LifeStage".Translate() + " (" + pawn.ageTracker.CurLifeStage.label + "): " + statFactorFromList.ToStringByStyle(ToStringStyle.PercentZero, ToStringNumberSense.Factor));
                }
            }
            if (req.StuffDef != null)
            {
                if (baseValueFor > 0f || stat.applyFactorsIfNegative)
                {
                    float statFactorFromList2 = req.StuffDef.stuffProps.statFactors.GetStatFactorFromList(stat);
                    if (statFactorFromList2 != 1f)
                    {
                        stringBuilder.AppendLine("StatsReport_Material".Translate() + " (" + req.StuffDef.LabelCap + "): " + statFactorFromList2.ToStringByStyle(ToStringStyle.PercentZero, ToStringNumberSense.Factor));
                    }
                }
                float statOffsetFromList = req.StuffDef.stuffProps.statOffsets.GetStatOffsetFromList(stat);
                if (statOffsetFromList != 0f)
                {
                    stringBuilder.AppendLine("StatsReport_Material".Translate() + " (" + req.StuffDef.LabelCap + "): " + statOffsetFromList.ToStringByStyle(stat.toStringStyle, ToStringNumberSense.Offset));
                }
            }
            req.Thing.TryGetComp <CompAffectedByFacilities>()?.GetStatsExplanation(stat, stringBuilder);
            if (stat.statFactors != null)
            {
                stringBuilder.AppendLine("StatsReport_OtherStats".Translate());
                for (int n = 0; n < stat.statFactors.Count; n++)
                {
                    StatDef statDef = stat.statFactors[n];
                    stringBuilder.AppendLine("    " + statDef.LabelCap + ": x" + statDef.Worker.GetValue(req).ToStringPercent());
                }
            }
            if (pawn != null)
            {
                if (pawn.skills != null)
                {
                    if (stat.skillNeedFactors != null)
                    {
                        stringBuilder.AppendLine("StatsReport_Skills".Translate());
                        for (int num3 = 0; num3 < stat.skillNeedFactors.Count; num3++)
                        {
                            SkillNeed skillNeed2 = stat.skillNeedFactors[num3];
                            int       level3     = pawn.skills.GetSkill(skillNeed2.skill).Level;
                            stringBuilder.AppendLine((string)("    " + skillNeed2.skill.LabelCap + " (") + level3 + "): x" + skillNeed2.ValueFor(pawn).ToStringPercent());
                        }
                    }
                }
                else if (stat.noSkillFactor != 1f)
                {
                    stringBuilder.AppendLine("StatsReport_Skills".Translate());
                    stringBuilder.AppendLine("    " + "default".Translate().CapitalizeFirst() + " : x" + stat.noSkillFactor.ToStringPercent());
                }
                if (stat.capacityFactors != null)
                {
                    stringBuilder.AppendLine("StatsReport_Health".CanTranslate() ? "StatsReport_Health".Translate() : "StatsReport_HealthFactors".Translate());
                    if (stat.capacityFactors != null)
                    {
                        foreach (PawnCapacityFactor item2 in stat.capacityFactors.OrderBy((PawnCapacityFactor hfa) => hfa.capacity.listOrder))
                        {
                            string text4 = item2.capacity.GetLabelFor(pawn).CapitalizeFirst();
                            string text5 = item2.GetFactor(pawn.health.capacities.GetLevel(item2.capacity)).ToStringPercent();
                            string text6 = "HealthFactorPercentImpact".Translate(item2.weight.ToStringPercent());
                            if (item2.max < 999f)
                            {
                                text6 += ", " + "HealthFactorMaxImpact".Translate(item2.max.ToStringPercent());
                            }
                            if (item2.allowedDefect != 0f)
                            {
                                text6 += ", " + "HealthFactorAllowedDefect".Translate((1f - item2.allowedDefect).ToStringPercent());
                            }
                            stringBuilder.AppendLine("    " + text4 + ": x" + text5 + " (" + text6 + ")");
                        }
                    }
                }
                if (pawn.Inspired)
                {
                    float statOffsetFromList2 = pawn.InspirationDef.statOffsets.GetStatOffsetFromList(stat);
                    if (statOffsetFromList2 != 0f)
                    {
                        stringBuilder.AppendLine("StatsReport_Inspiration".Translate(pawn.Inspiration.def.LabelCap) + ": " + ValueToString(statOffsetFromList2, finalized: false, ToStringNumberSense.Offset));
                    }
                    float statFactorFromList3 = pawn.InspirationDef.statFactors.GetStatFactorFromList(stat);
                    if (statFactorFromList3 != 1f)
                    {
                        stringBuilder.AppendLine("StatsReport_Inspiration".Translate(pawn.Inspiration.def.LabelCap) + ": " + statFactorFromList3.ToStringByStyle(ToStringStyle.PercentZero, ToStringNumberSense.Factor));
                    }
                }
            }
            return(stringBuilder.ToString());
        }
        public override string GetStatDrawEntryLabel(StatDef stat, float value, ToStringNumberSense numberSense, StatRequest optionalReq)
        {
            var list = (optionalReq.Def as AmmoDef)?.AmmoSetDefs;

            return(list.FirstOrDefault().LabelCap + (list.Count > 1 ? " (+" + (list.Count - 1) + " more..)" : ""));
        }
Example #13
0
 public string ValueToString(float val, ToStringNumberSense numberSense = ToStringNumberSense.Absolute, bool finalized = true)
 {
     return(Worker.ValueToString(val, finalized, numberSense));
 }
 public override string GetStatDrawEntryLabel(StatDef stat, float value, ToStringNumberSense numberSense, StatRequest optionalReq, bool finalized = true)
 {
     return(string.Format("{0} ( {1} x {2} / {3} )", value.ToStringByStyle(stat.toStringStyle, numberSense), GetMeleeDamage(optionalReq).ToString("0.##"), StatDefOf.MeleeHitChance.ValueToString(GetMeleeHitChance(optionalReq)), GetMeleeCooldown(optionalReq).ToString("0.##")));
 }
        public override string GetStatDrawEntryLabel(StatDef stat, float value, ToStringNumberSense numberSense, StatRequest optionalReq)
        {
            var ammoProps = (optionalReq.Def as ThingDef)?.GetCompProperties <CompProperties_AmmoUser>();

            return(ammoProps.magazineSize + " / " + GenText.ToStringByStyle((ammoProps.reloadTime), ToStringStyle.FloatTwo) + " s");
        }
Example #16
0
 public StatDrawEntry(StatCategoryDef category, StatDef stat, float value, StatRequest optionalReq, ToStringNumberSense numberSense = ToStringNumberSense.Undefined, int?overrideDisplayPriorityWithinCategory = null, bool forceUnfinalizedMode = false)
 {
     this.category              = category;
     this.stat                  = stat;
     labelInt                   = null;
     this.value                 = value;
     valueStringInt             = null;
     displayOrderWithinCategory = (overrideDisplayPriorityWithinCategory.HasValue ? overrideDisplayPriorityWithinCategory.Value : stat.displayPriorityInCategory);
     this.optionalReq           = optionalReq;
     this.forceUnfinalizedMode  = forceUnfinalizedMode;
     hasOptionalReq             = true;
     if (numberSense == ToStringNumberSense.Undefined)
     {
         this.numberSense = stat.toStringNumberSense;
     }
     else
     {
         this.numberSense = numberSense;
     }
 }
Example #17
0
 public override string GetStatDrawEntryLabel(StatDef stat, float value, ToStringNumberSense numberSense, StatRequest optionalReq, bool finalized = true)
 {
     return(base.GetStatDrawEntryLabel(stat, value, numberSense, optionalReq, finalized));
 }
 public override string GetStatDrawEntryLabel(StatDef statDef, float value, ToStringNumberSense numberSense, StatRequest optionalReq, bool finalized = true)
 {
     return($"x{GetValueUnfinalized(optionalReq).ToStringPercent()}");
 }
Example #19
0
        public static string ToStringByStyle(this float f, ToStringStyle style, ToStringNumberSense numberSense = ToStringNumberSense.Absolute)
        {
            if (style == ToStringStyle.Temperature && numberSense == ToStringNumberSense.Offset)
            {
                style = ToStringStyle.TemperatureOffset;
            }
            if (numberSense == ToStringNumberSense.Factor)
            {
                style = (ToStringStyle)((!(f >= 10.0)) ? 4 : 3);
            }
            string text;

            switch (style)
            {
            case ToStringStyle.Integer:
                text = Mathf.RoundToInt(f).ToString();
                break;

            case ToStringStyle.FloatOne:
                text = f.ToString("F1");
                break;

            case ToStringStyle.FloatTwo:
                text = f.ToString("F2");
                break;

            case ToStringStyle.FloatMaxTwo:
                text = f.ToString("0.##");
                break;

            case ToStringStyle.PercentZero:
                text = f.ToStringPercent();
                break;

            case ToStringStyle.PercentOne:
                text = f.ToStringPercent("F1");
                break;

            case ToStringStyle.PercentTwo:
                text = f.ToStringPercent("F2");
                break;

            case ToStringStyle.Temperature:
                text = f.ToStringTemperature("F1");
                break;

            case ToStringStyle.TemperatureOffset:
                text = f.ToStringTemperatureOffset("F1");
                break;

            case ToStringStyle.WorkAmount:
                text = f.ToStringWorkAmount();
                break;

            default:
                Log.Error("Unknown ToStringStyle " + style);
                text = f.ToString();
                break;
            }
            switch (numberSense)
            {
            case ToStringNumberSense.Offset:
                if (f >= 0.0)
                {
                    text = "+" + text;
                }
                break;

            case ToStringNumberSense.Factor:
                text = "x" + text;
                break;
            }
            return(text);
        }
 public virtual string GetStatDrawEntryLabel(StatDef stat, float value, ToStringNumberSense numberSense, StatRequest optionalReq)
 {
     return(stat.ValueToString(value, numberSense));
 }
        public override string GetExplanationUnfinalized(StatRequest req, ToStringNumberSense numberSense)
        {
            string s = "";

            if (!req.HasThing)
            {
                return(s);
            }
            CompDTemperature comp = req.Thing.TryGetComp <CompDTemperature>();

            if (comp != null)
            {
                double interval      = 2500;
                double ambient       = comp.AmbientTemperature;
                double shift         = ambient - comp.curTemp;
                double changeMag     = Math.Abs(interval * shift / comp.PropsTemp.diffusionTime);
                double minStepScaled = CompDTemperature.minStep * interval;
                double step          = (Math.Abs(shift) < minStepScaled || changeMag > CompDTemperature.minStep) ? changeMag : minStepScaled;
                if (step == minStepScaled)
                {
                    s += "Currently coming to equilibrium at " + GenText.ToStringTemperatureOffset((float)ambient);
                }
                else
                {
                    double result = Math.Sign(shift) * step * ThermodynamicsSettings.diffusionModifier;
                    s += "Currently diffusing at a rate of " + GenText.ToStringTemperatureOffset((float)result) + " per hour.";
                    s += HoursToAmbient(comp);
                    CompDTemperatureIngestible comp2 = comp as CompDTemperatureIngestible;
                    if (comp2 != null)
                    {
                        s += "\n";

                        if (comp2.PropsTemp.roomTemperature)
                        {
                            if (comp2.curTemp > comp2.PropsTemp.tempLevels.goodTemp && comp2.curTemp < comp2.PropsTemp.tempLevels.okTemp)
                            {
                                if (ambient < comp2.PropsTemp.tempLevels.goodTemp)
                                {
                                    s += HoursInIdeal(comp2, comp2.PropsTemp.tempLevels.goodTemp);
                                }
                                else if (ambient > comp2.PropsTemp.tempLevels.okTemp)
                                {
                                    s += HoursInIdeal(comp2, comp2.PropsTemp.tempLevels.okTemp);
                                }
                                else
                                {
                                    s += InIdealRange();
                                }
                            }
                            else if (comp2.curTemp < comp2.PropsTemp.tempLevels.goodTemp && ambient > comp2.PropsTemp.tempLevels.goodTemp)
                            {
                                s += HoursToIdeal(comp2, comp2.PropsTemp.tempLevels.goodTemp);
                            }
                            else if (comp2.curTemp > comp2.PropsTemp.tempLevels.okTemp && ambient < comp2.PropsTemp.tempLevels.okTemp)
                            {
                                s += HoursToIdeal(comp2, comp2.PropsTemp.tempLevels.okTemp);
                            }
                            else
                            {
                                s += WillNeverReach();
                            }
                        }
                        else if (comp2.PropsTemp.likesHeat)
                        {
                            if (comp2.curTemp > comp2.PropsTemp.tempLevels.goodTemp)
                            {
                                if (ambient < comp2.PropsTemp.tempLevels.goodTemp)
                                {
                                    s += HoursInIdeal(comp2, comp2.PropsTemp.tempLevels.goodTemp);
                                }
                                else
                                {
                                    s += InIdealRange();
                                }
                            }
                            else if (ambient > comp2.PropsTemp.tempLevels.goodTemp)
                            {
                                s += HoursToIdeal(comp2, comp2.PropsTemp.tempLevels.goodTemp);
                            }
                            else
                            {
                                s += WillNeverReach();
                            }
                        }
                        else
                        {
                            if (comp2.curTemp < 0f && !comp2.PropsTemp.okFrozen)
                            {
                                if (comp2.AmbientTemperature > 0f)
                                {
                                    s += HoursToIdeal(comp2, 0);
                                }
                                else if (comp2.AmbientTemperature <= 0f)
                                {
                                    s += WillNeverReach();
                                }
                            }
                            else if (comp2.curTemp < comp2.PropsTemp.tempLevels.goodTemp)
                            {
                                if (ambient > comp2.PropsTemp.tempLevels.goodTemp)
                                {
                                    s += HoursInIdeal(comp2, comp2.PropsTemp.tempLevels.goodTemp);
                                }
                                else
                                {
                                    s += InIdealRange();
                                }
                            }
                            else if (ambient < comp2.PropsTemp.tempLevels.goodTemp)
                            {
                                s += HoursToIdeal(comp2, comp2.PropsTemp.tempLevels.goodTemp);
                            }
                            else
                            {
                                s += WillNeverReach();
                            }
                        }
                    }
                }
            }
            return(s);
        }
 public override string GetExplanationUnfinalized(StatRequest req, ToStringNumberSense numberSense)
 {
     return($"{"StatsReport_BaseValue".Translate()}: {GetBaseEstimatedLifespan(req.Thing, req.BuildableDef, req.StuffDef, false).ToString("F1")}");
 }
        public override string GetExplanationUnfinalized(StatRequest req, ToStringNumberSense numberSense)
        {
            float wildness = ((ThingDef)req.Def).race.wildness;

            return("Wildness".Translate() + " " + wildness.ToStringPercent() + ": " + ValueFromReq(req).ToString("F0"));
        }
 public StatDrawEntry(StatCategoryDef category, StatDef stat, float value, StatRequest optionalReq, ToStringNumberSense numberSense = ToStringNumberSense.Undefined)
 {
     this.category                   = category;
     this.stat                       = stat;
     this.labelInt                   = null;
     this.value                      = value;
     this.valueStringInt             = null;
     this.displayOrderWithinCategory = 0;
     this.optionalReq                = optionalReq;
     this.hasOptionalReq             = true;
     if (numberSense == ToStringNumberSense.Undefined)
     {
         this.numberSense = stat.toStringNumberSense;
     }
     else
     {
         this.numberSense = numberSense;
     }
 }
        public override string GetStatDrawEntryLabel(StatDef stat, float value, ToStringNumberSense numberSense, StatRequest optionalReq, bool finalized = true)
        {
            RangedWeaponStats weaponStats = GetTurretStats(optionalReq);

            (float, int)optimalRange = new[] {
 public override string GetStatDrawEntryLabel(StatDef stat, float value, ToStringNumberSense numberSense, StatRequest optionalReq, bool finalized = true)
 {
     return(GetFinalDisplayValue(optionalReq));
 }
 public static void GetExplanationUnfinalized(StatWorker __instance, StatRequest req, ToStringNumberSense numberSense, ref string __result)
 {
     if (__instance != null)
     {
         StatDef value = Traverse.Create(__instance).Field("stat").GetValue <StatDef>();
         if (req != null && req.Thing != null && req.Def != null && (req.Def == YautjaDefOf.RRY_Gun_Hunting_Bow || req.Def == YautjaDefOf.RRY_Gun_Compound_Bow) && value == StatDefOf.RangedWeapon_DamageMultiplier)
         {
             DamageArmorCategoryDef CategoryOfDamage = ((ThingDef)req.Def).Verbs[0].defaultProjectile.projectile.damageDef.armorCategory;
             StringBuilder          stringBuilder    = new StringBuilder();
             stringBuilder.Append(__instance.GetExplanationUnfinalized(req, numberSense));
             stringBuilder.AppendLine();
             ThingDef def = (ThingDef)req.Def;
             if (req.StuffDef != null)
             {
                 StatDef statDef = null;
                 if (CategoryOfDamage != null)
                 {
                     statDef = CategoryOfDamage.multStat;
                 }
                 if (statDef != null)
                 {
                     stringBuilder.AppendLine(req.StuffDef.LabelCap + ": x" + req.StuffDef.GetStatValueAbstract(statDef, null).ToStringPercent());
                 }
             }
             __result = stringBuilder.ToString();
         }
     }
     return;
 }
Example #28
0
        public static void Patch_StatWorker_GetExplanationUnfinalized(StatWorker __instance, ref string __result, ref StatRequest req, ToStringNumberSense numberSense, StatDef ___stat)
        {
            //StatDef stat = (StatDef)AccessTools.Field(typeof(StatWorker), "stat").GetValue(__instance);

            if (req.Thing is ThingWithComps thing && thing.TryGetComp <SocketComp>() is SocketComp socketable)
            {
                StringBuilder builder     = new StringBuilder(__result);
                bool          statChanged = false;

                foreach (RuneComp rune in socketable.SocketedRunes)
                {
                    if (rune.RuneProps.statOffsets.FirstOrDefault(mod => mod.stat == ___stat) is StatModifier statModifer)
                    {
                        if (!statChanged)
                        {
                            builder.AppendLine();
                            builder.AppendLine();
                            builder.AppendLine("Runes");
                        }

                        builder.AppendLine("    " + rune.parent.LabelCapNoCount + ": " + statModifer.value.ToStringByStyle(statModifer.stat.ToStringStyleUnfinalized, ToStringNumberSense.Offset));
                        statChanged = true;
                    }
                }

                if (statChanged)
                {
                    __result = builder.ToString().TrimEndNewlines();
                }
            }
        }
Example #29
0
 private static void ModifyStatModifier(ref List <StatModifier> modifierList, StatDef stat, ToStringNumberSense mode, float offset = 0, float factor = 1)
 {
     if (modifierList.FirstOrDefault(s => s.stat == stat) is StatModifier meleeCooldownFactor)
     {
         meleeCooldownFactor.value = (meleeCooldownFactor.value + offset) * factor;
     }
     else
     {
         modifierList.Add(new StatModifier()
         {
             stat = stat, value = ((mode == ToStringNumberSense.Factor ? 1 : 0) + offset) * factor
         });
     }
 }
        public virtual string GetExplanationUnfinalized(StatRequest req, ToStringNumberSense numberSense)
        {
            StringBuilder stringBuilder = new StringBuilder();
            float         baseValueFor  = this.GetBaseValueFor(req.Def);

            if (baseValueFor != 0f)
            {
                stringBuilder.AppendLine("StatsReport_BaseValue".Translate() + ": " + this.stat.ValueToString(baseValueFor, numberSense));
                stringBuilder.AppendLine();
            }
            Pawn pawn = req.Thing as Pawn;

            if (pawn != null)
            {
                if (pawn.skills != null)
                {
                    if (this.stat.skillNeedOffsets != null)
                    {
                        stringBuilder.AppendLine("StatsReport_Skills".Translate());
                        for (int i = 0; i < this.stat.skillNeedOffsets.Count; i++)
                        {
                            SkillNeed skillNeed = this.stat.skillNeedOffsets[i];
                            int       level     = pawn.skills.GetSkill(skillNeed.skill).Level;
                            float     val       = skillNeed.ValueFor(pawn);
                            stringBuilder.AppendLine(string.Concat(new object[]
                            {
                                "    ",
                                skillNeed.skill.LabelCap,
                                " (",
                                level,
                                "): ",
                                val.ToStringSign(),
                                this.ValueToString(val, false, ToStringNumberSense.Absolute)
                            }));
                        }
                        stringBuilder.AppendLine();
                    }
                }
                else if (this.stat.noSkillOffset != 0f)
                {
                    stringBuilder.AppendLine("StatsReport_Skills".Translate());
                    stringBuilder.AppendLine(string.Concat(new string[]
                    {
                        "    ",
                        "default".Translate().CapitalizeFirst(),
                        " : ",
                        this.stat.noSkillOffset.ToStringSign(),
                        this.ValueToString(this.stat.noSkillOffset, false, ToStringNumberSense.Absolute)
                    }));
                    stringBuilder.AppendLine();
                }
                if (this.stat.capacityOffsets != null)
                {
                    stringBuilder.AppendLine((!"StatsReport_Health".CanTranslate()) ? "StatsReport_HealthFactors".Translate() : "StatsReport_Health".Translate());
                    foreach (PawnCapacityOffset pawnCapacityOffset in from hfa in this.stat.capacityOffsets
                             orderby hfa.capacity.listOrder
                             select hfa)
                    {
                        string text   = pawnCapacityOffset.capacity.GetLabelFor(pawn).CapitalizeFirst();
                        float  level2 = pawn.health.capacities.GetLevel(pawnCapacityOffset.capacity);
                        float  offset = pawnCapacityOffset.GetOffset(pawn.health.capacities.GetLevel(pawnCapacityOffset.capacity));
                        string text2  = this.ValueToString(offset, false, ToStringNumberSense.Absolute);
                        string text3  = Mathf.Min(level2, pawnCapacityOffset.max).ToStringPercent() + ", " + "HealthOffsetScale".Translate(new object[]
                        {
                            pawnCapacityOffset.scale.ToString() + "x"
                        });
                        if (pawnCapacityOffset.max < 999f)
                        {
                            text3 = text3 + ", " + "HealthFactorMaxImpact".Translate(new object[]
                            {
                                pawnCapacityOffset.max.ToStringPercent()
                            });
                        }
                        stringBuilder.AppendLine(string.Concat(new string[]
                        {
                            "    ",
                            text,
                            ": ",
                            offset.ToStringSign(),
                            text2,
                            " (",
                            text3,
                            ")"
                        }));
                    }
                    stringBuilder.AppendLine();
                }
                if (pawn.RaceProps.intelligence >= Intelligence.ToolUser)
                {
                    if (pawn.story != null && pawn.story.traits != null)
                    {
                        List <Trait> list = (from tr in pawn.story.traits.allTraits
                                             where tr.CurrentData.statOffsets != null && tr.CurrentData.statOffsets.Any((StatModifier se) => se.stat == this.stat)
                                             select tr).ToList <Trait>();
                        List <Trait> list2 = (from tr in pawn.story.traits.allTraits
                                              where tr.CurrentData.statFactors != null && tr.CurrentData.statFactors.Any((StatModifier se) => se.stat == this.stat)
                                              select tr).ToList <Trait>();
                        if (list.Count > 0 || list2.Count > 0)
                        {
                            stringBuilder.AppendLine("StatsReport_RelevantTraits".Translate());
                            for (int j = 0; j < list.Count; j++)
                            {
                                Trait  trait = list[j];
                                string valueToStringAsOffset = trait.CurrentData.statOffsets.First((StatModifier se) => se.stat == this.stat).ValueToStringAsOffset;
                                stringBuilder.AppendLine("    " + trait.LabelCap + ": " + valueToStringAsOffset);
                            }
                            for (int k = 0; k < list2.Count; k++)
                            {
                                Trait  trait2           = list2[k];
                                string toStringAsFactor = trait2.CurrentData.statFactors.First((StatModifier se) => se.stat == this.stat).ToStringAsFactor;
                                stringBuilder.AppendLine("    " + trait2.LabelCap + ": " + toStringAsFactor);
                            }
                            stringBuilder.AppendLine();
                        }
                    }
                    if (StatWorker.RelevantGear(pawn, this.stat).Any <Thing>())
                    {
                        stringBuilder.AppendLine("StatsReport_RelevantGear".Translate());
                        if (pawn.apparel != null)
                        {
                            for (int l = 0; l < pawn.apparel.WornApparel.Count; l++)
                            {
                                Apparel gear = pawn.apparel.WornApparel[l];
                                stringBuilder.AppendLine(StatWorker.InfoTextLineFromGear(gear, this.stat));
                            }
                        }
                        if (pawn.equipment != null && pawn.equipment.Primary != null)
                        {
                            stringBuilder.AppendLine(StatWorker.InfoTextLineFromGear(pawn.equipment.Primary, this.stat));
                        }
                        stringBuilder.AppendLine();
                    }
                }
                bool          flag    = false;
                List <Hediff> hediffs = pawn.health.hediffSet.hediffs;
                for (int m = 0; m < hediffs.Count; m++)
                {
                    HediffStage curStage = hediffs[m].CurStage;
                    if (curStage != null)
                    {
                        float statOffsetFromList = curStage.statOffsets.GetStatOffsetFromList(this.stat);
                        if (statOffsetFromList != 0f)
                        {
                            if (!flag)
                            {
                                stringBuilder.AppendLine("StatsReport_RelevantHediffs".Translate());
                                flag = true;
                            }
                            stringBuilder.AppendLine("    " + hediffs[m].LabelBase.CapitalizeFirst() + ": " + this.ValueToString(statOffsetFromList, false, ToStringNumberSense.Offset));
                            stringBuilder.AppendLine();
                        }
                    }
                }
                float statFactorFromList = pawn.ageTracker.CurLifeStage.statFactors.GetStatFactorFromList(this.stat);
                if (statFactorFromList != 1f)
                {
                    stringBuilder.AppendLine(string.Concat(new string[]
                    {
                        "StatsReport_LifeStage".Translate(),
                        " (",
                        pawn.ageTracker.CurLifeStage.label,
                        "): ",
                        statFactorFromList.ToStringByStyle(ToStringStyle.PercentZero, ToStringNumberSense.Factor)
                    }));
                    stringBuilder.AppendLine();
                }
            }
            if (req.StuffDef != null)
            {
                if (baseValueFor > 0f || this.stat.applyFactorsIfNegative)
                {
                    float statFactorFromList2 = req.StuffDef.stuffProps.statFactors.GetStatFactorFromList(this.stat);
                    if (statFactorFromList2 != 1f)
                    {
                        stringBuilder.AppendLine(string.Concat(new string[]
                        {
                            "StatsReport_Material".Translate(),
                            " (",
                            req.StuffDef.LabelCap,
                            "): ",
                            statFactorFromList2.ToStringByStyle(ToStringStyle.PercentZero, ToStringNumberSense.Factor)
                        }));
                        stringBuilder.AppendLine();
                    }
                }
                float statOffsetFromList2 = req.StuffDef.stuffProps.statOffsets.GetStatOffsetFromList(this.stat);
                if (statOffsetFromList2 != 0f)
                {
                    stringBuilder.AppendLine(string.Concat(new string[]
                    {
                        "StatsReport_Material".Translate(),
                        " (",
                        req.StuffDef.LabelCap,
                        "): ",
                        statOffsetFromList2.ToStringByStyle(this.stat.toStringStyle, ToStringNumberSense.Offset)
                    }));
                    stringBuilder.AppendLine();
                }
            }
            CompAffectedByFacilities compAffectedByFacilities = req.Thing.TryGetComp <CompAffectedByFacilities>();

            if (compAffectedByFacilities != null)
            {
                compAffectedByFacilities.GetStatsExplanation(this.stat, stringBuilder);
            }
            if (this.stat.statFactors != null)
            {
                stringBuilder.AppendLine("StatsReport_OtherStats".Translate());
                for (int n = 0; n < this.stat.statFactors.Count; n++)
                {
                    StatDef statDef = this.stat.statFactors[n];
                    stringBuilder.AppendLine("    " + statDef.LabelCap + ": x" + statDef.Worker.GetValue(req, true).ToStringPercent());
                }
                stringBuilder.AppendLine();
            }
            if (pawn != null)
            {
                if (pawn.skills != null)
                {
                    if (this.stat.skillNeedFactors != null)
                    {
                        stringBuilder.AppendLine("StatsReport_Skills".Translate());
                        for (int num = 0; num < this.stat.skillNeedFactors.Count; num++)
                        {
                            SkillNeed skillNeed2 = this.stat.skillNeedFactors[num];
                            int       level3     = pawn.skills.GetSkill(skillNeed2.skill).Level;
                            stringBuilder.AppendLine(string.Concat(new object[]
                            {
                                "    ",
                                skillNeed2.skill.LabelCap,
                                " (",
                                level3,
                                "): x",
                                skillNeed2.ValueFor(pawn).ToStringPercent()
                            }));
                        }
                        stringBuilder.AppendLine();
                    }
                }
                else if (this.stat.noSkillFactor != 1f)
                {
                    stringBuilder.AppendLine("StatsReport_Skills".Translate());
                    stringBuilder.AppendLine("    " + "default".Translate().CapitalizeFirst() + " : x" + this.stat.noSkillFactor.ToStringPercent());
                    stringBuilder.AppendLine();
                }
                if (this.stat.capacityFactors != null)
                {
                    stringBuilder.AppendLine((!"StatsReport_Health".CanTranslate()) ? "StatsReport_HealthFactors".Translate() : "StatsReport_Health".Translate());
                    if (this.stat.capacityFactors != null)
                    {
                        foreach (PawnCapacityFactor pawnCapacityFactor in from hfa in this.stat.capacityFactors
                                 orderby hfa.capacity.listOrder
                                 select hfa)
                        {
                            string text4  = pawnCapacityFactor.capacity.GetLabelFor(pawn).CapitalizeFirst();
                            float  factor = pawnCapacityFactor.GetFactor(pawn.health.capacities.GetLevel(pawnCapacityFactor.capacity));
                            string text5  = factor.ToStringPercent();
                            string text6  = "HealthFactorPercentImpact".Translate(new object[]
                            {
                                pawnCapacityFactor.weight.ToStringPercent()
                            });
                            if (pawnCapacityFactor.max < 999f)
                            {
                                text6 = text6 + ", " + "HealthFactorMaxImpact".Translate(new object[]
                                {
                                    pawnCapacityFactor.max.ToStringPercent()
                                });
                            }
                            if (pawnCapacityFactor.allowedDefect != 0f)
                            {
                                text6 = text6 + ", " + "HealthFactorAllowedDefect".Translate(new object[]
                                {
                                    (1f - pawnCapacityFactor.allowedDefect).ToStringPercent()
                                });
                            }
                            stringBuilder.AppendLine(string.Concat(new string[]
                            {
                                "    ",
                                text4,
                                ": x",
                                text5,
                                " (",
                                text6,
                                ")"
                            }));
                        }
                    }
                    stringBuilder.AppendLine();
                }
                if (pawn.Inspired)
                {
                    float statOffsetFromList3 = pawn.InspirationDef.statOffsets.GetStatOffsetFromList(this.stat);
                    if (statOffsetFromList3 != 0f)
                    {
                        stringBuilder.AppendLine("StatsReport_Inspiration".Translate(new object[]
                        {
                            pawn.Inspiration.def.LabelCap
                        }) + ": " + this.ValueToString(statOffsetFromList3, false, ToStringNumberSense.Offset));
                        stringBuilder.AppendLine();
                    }
                    float statFactorFromList3 = pawn.InspirationDef.statFactors.GetStatFactorFromList(this.stat);
                    if (statFactorFromList3 != 1f)
                    {
                        stringBuilder.AppendLine("StatsReport_Inspiration".Translate(new object[]
                        {
                            pawn.Inspiration.def.LabelCap
                        }) + ": " + statFactorFromList3.ToStringByStyle(ToStringStyle.PercentZero, ToStringNumberSense.Factor));
                        stringBuilder.AppendLine();
                    }
                }
            }
            return(stringBuilder.ToString().TrimEndNewlines());
        }
 public override string GetStatDrawEntryLabel(StatDef stat, float value, ToStringNumberSense numberSense, StatRequest optionalReq)
 {
     return((optionalReq.Def as ThingDef)?.GetCompProperties <CompProperties_AmmoUser>().ammoSet.LabelCap);
 }
Example #32
0
 public string ValueToString(float val, ToStringNumberSense numberSense = ToStringNumberSense.Absolute)
 {
     return(this.Worker.ValueToString(val, true, numberSense));
 }
Example #33
0
 public override string GetExplanationUnfinalized(StatRequest req, ToStringNumberSense numberSense)
 {
     return(Building_DoorExpanded.DoorOpenTimeExplanation(req, DoorPowerOn(req), stat));
 }