public static void PostFix(ref bool __result, ThingDef A, ThingDef B, BodyDef body)
 {
     if (__result && CamoGearUtility.GetIsACApparel(A) && CamoGearUtility.GetIsACApparel(B))
     {
         __result = false;
     }
 }
        // Token: 0x06000011 RID: 17 RVA: 0x00002740 File Offset: 0x00000940
        public static void DrawCamoOverlay(Pawn pawn)
        {
            bool   flag = false;
            string text = "";

            if (CamoUtility.IsCamoActive(pawn, out Apparel apparel) && apparel != null)
            {
                float activeCamoEff = ThingCompUtility.TryGetComp <CompGearCamo>(apparel).Props.ActiveCamoEff;
                if (ThingCompUtility.TryGetComp <CompGearCamo>(apparel).Props.StealthCamoChance > 0 && activeCamoEff > 0f)
                {
                    text = "Mote_CASStealth";
                    flag = true;
                }
                else if (activeCamoEff > 0f)
                {
                    text = CamoDrawTools.GetMoteToUse(activeCamoEff);
                    flag = true;
                }
            }
            if (!flag && CamoGearUtility.GetCurCamoEff(pawn, out string text2, out float num) && num > 0f)
            {
                text = CamoDrawTools.GetMoteToUse(num);
                flag = true;
            }
            if (flag && text != "")
            {
                CamoDrawTools.DoCamoOverlay(pawn, text);
            }
        }
Example #3
0
 // Token: 0x06000018 RID: 24 RVA: 0x00002C58 File Offset: 0x00000E58
 public static bool TryGetCamoHidValue(Pawn seer, Pawn target, out bool hid)
 {
     hid = false;
     if (seer != null)
     {
         PawnCamoData pawnCamoData = ThingCompUtility.TryGetComp <PawnCamoData>(seer);
         if (pawnCamoData != null)
         {
             int           ticksGame = Find.TickManager.TicksGame;
             List <string> list      = pawnCamoData?.PawnHidTickList;
             if (list != null && list.Count > 0)
             {
                 foreach (string valuesStr in list)
                 {
                     if (CamoGearUtility.GetIntValue(valuesStr, 1) + CamoUtility.TickElapse >= ticksGame)
                     {
                         int intValue = CamoGearUtility.GetIntValue(valuesStr, 0);
                         if (target != null && target != null)
                         {
                             int thingIDNumber = target.thingIDNumber;
                             if (intValue == target.thingIDNumber)
                             {
                                 string strValue = CamoGearUtility.GetStrValue(valuesStr, 2);
                                 hid = (strValue == "1");
                                 return(true);
                             }
                         }
                     }
                 }
                 return(false);
             }
         }
     }
     return(false);
 }
        // Token: 0x06000063 RID: 99 RVA: 0x0000650C File Offset: 0x0000470C
        public override void PostSpawnSetup(bool respawningAfterLoad)
        {
            base.PostSpawnSetup(respawningAfterLoad);
            if (respawningAfterLoad)
            {
                var pawn = Pawn;
                if (pawn?.apparel != null && Pawn.apparel.WornApparelCount > 0)
                {
                    foreach (var apparel in Pawn.apparel.WornApparel)
                    {
                        var compGearCamo = apparel.TryGetComp <CompGearCamo>();
                        if (compGearCamo == null || !(compGearCamo.Props.ActiveCamoEff > 0f) ||
                            !(compGearCamo.Props.CamoEnergyMax > 0f) ||
                            apparel.GetType() == typeof(ActiveCamoApparel) ||
                            apparel.def.thingClass != typeof(ActiveCamoApparel))
                        {
                            continue;
                        }

                        CorrectActiveApparel(apparel, Pawn);
                        break;
                    }
                }
            }

            CamoGearUtility.CalcAndSetCamoEff(Pawn);
        }
        // Token: 0x06000011 RID: 17 RVA: 0x00002740 File Offset: 0x00000940
        public static void DrawCamoOverlay(Pawn pawn)
        {
            var b    = false;
            var text = "";

            if (CamoUtility.IsCamoActive(pawn, out var apparel) && apparel != null)
            {
                var activeCamoEff = apparel.TryGetComp <CompGearCamo>().Props.ActiveCamoEff;
                if (apparel.TryGetComp <CompGearCamo>().Props.StealthCamoChance > 0 && activeCamoEff > 0f)
                {
                    text = "Mote_CASStealth";
                    b    = true;
                }
                else if (activeCamoEff > 0f)
                {
                    text = GetMoteToUse(activeCamoEff);
                    b    = true;
                }
            }

            if (!b && CamoGearUtility.GetCurCamoEff(pawn, out _, out var num) && num > 0f)
            {
                text = GetMoteToUse(num);
                b    = true;
            }

            if (b && text != "")
            {
                DoCamoOverlay(pawn, text);
            }
        }
        // Token: 0x06000064 RID: 100 RVA: 0x00006618 File Offset: 0x00004818
        public override string CompInspectStringExtra()
        {
            if (CamoUtility.IsCamoActive(Pawn, out var apparel))
            {
                if (apparel == null)
                {
                    return(null);
                }

                var    activeCamoEff = apparel.TryGetComp <CompGearCamo>().Props.ActiveCamoEff;
                string text          = "CompCamo.Active".Translate();
                if (apparel.TryGetComp <CompGearCamo>().Props.StealthCamoChance > 0 && activeCamoEff > 0f)
                {
                    text = "CompCamo.Stealth".Translate();
                }

                return("CompCamo.CamouflageDesc".Translate(text, activeCamoEff.ToStringPercent()));
            }

            if (!CamoGearUtility.GetCurCamoEff(Pawn, out var a, out var num))
            {
                return(null);
            }

            string text2 = "CompCamo.Undefined".Translate();

            switch (a)
            {
            case "Arctic":
                text2 = "CompCamo.Arctic".Translate();
                break;

            case "Desert":
                text2 = "CompCamo.Desert".Translate();
                break;

            case "Jungle":
                text2 = "CompCamo.Jungle".Translate();
                break;

            case "Stone":
                text2 = "CompCamo.Stone".Translate();
                break;

            case "Urban":
                text2 = "CompCamo.Urban".Translate();
                break;

            case "Woodland":
                text2 = "CompCamo.Woodland".Translate();
                break;
            }

            return("CompCamo.CamouflageDesc".Translate(text2, num.ToStringPercent()));
        }
Example #7
0
        // Token: 0x06000019 RID: 25 RVA: 0x00002D30 File Offset: 0x00000F30
        public static void TryAddCamoHidValue(Pawn seer, Pawn target, bool value)
        {
            if (seer == null)
            {
                return;
            }

            var b            = false;
            var pawnCamoData = seer.TryGetComp <PawnCamoData>();

            if (pawnCamoData == null)
            {
                return;
            }

            var ticksGame       = Find.TickManager.TicksGame;
            var list            = new List <string>();
            var pawnHidTickList = pawnCamoData.PawnHidTickList;

            if (pawnHidTickList != null && pawnHidTickList.Count > 0)
            {
                foreach (var text in pawnHidTickList)
                {
                    if (CamoGearUtility.GetIntValue(text, 1) + TickElapse < ticksGame)
                    {
                        continue;
                    }

                    list.AddDistinct(text);
                    var intValue = CamoGearUtility.GetIntValue(text, 0);
                    if (target == null)
                    {
                        continue;
                    }

                    var unused = target.thingIDNumber;
                    if (intValue == target.thingIDNumber)
                    {
                        b = true;
                    }
                }
            }

            if (!b)
            {
                if (target != null)
                {
                    var text2 = string.Concat(target.thingIDNumber.ToString(), ";", ticksGame.ToString(), ";",
                                              value ? "1" : "0");
                    list.AddDistinct(text2);
                }
            }

            pawnCamoData.PawnHidTickList = list;
        }
        // Token: 0x06000038 RID: 56 RVA: 0x00003F58 File Offset: 0x00002158
        internal static bool GetCurCamoEff(Pawn pawn, out string type, out float CamoEff)
        {
            CamoEff = 0f;
            type    = CamoGearUtility.GetCamoType(pawn);
            PawnCamoData pawnCamoData = ThingCompUtility.TryGetComp <PawnCamoData>(pawn);

            if (pawnCamoData != null)
            {
                string a = type;
                if (!(a == "Arctic"))
                {
                    if (!(a == "Desert"))
                    {
                        if (!(a == "Jungle"))
                        {
                            if (!(a == "Stone"))
                            {
                                if (!(a == "Woodland"))
                                {
                                    if (!(a == "Urban"))
                                    {
                                        CamoEff = pawnCamoData.PawnnotDefinedCamo;
                                    }
                                    else
                                    {
                                        CamoEff = pawnCamoData.PawnUrbanCamo;
                                    }
                                }
                                else
                                {
                                    CamoEff = pawnCamoData.PawnWoodlandCamo;
                                }
                            }
                            else
                            {
                                CamoEff = pawnCamoData.PawnStoneCamo;
                            }
                        }
                        else
                        {
                            CamoEff = pawnCamoData.PawnJungleCamo;
                        }
                    }
                    else
                    {
                        CamoEff = pawnCamoData.PawnDesertCamo;
                    }
                }
                else
                {
                    CamoEff = pawnCamoData.PawnArcticCamo;
                }
            }
            return(CamoEff > 0f);
        }
 // Token: 0x06000054 RID: 84 RVA: 0x00005F60 File Offset: 0x00004160
 public static string GetCamoDefTerrain(TerrainDef terrain)
 {
     if (terrain.HasModExtension <CompCamoDefs>())
     {
         string text = terrain?.GetModExtension <CompCamoDefs>().CamoType;
         if (CamoGearUtility.CamoTypes().Contains(text))
         {
             return(text);
         }
     }
     return("notDefined");
 }
 // Token: 0x06000053 RID: 83 RVA: 0x00005F24 File Offset: 0x00004124
 public static string GetCamoDefBiome(BiomeDef biome)
 {
     if (biome.HasModExtension <CompCamoDefs>())
     {
         string text = biome?.GetModExtension <CompCamoDefs>().CamoType;
         if (CamoGearUtility.CamoTypes().Contains(text))
         {
             return(text);
         }
     }
     return("notDefined");
 }
Example #11
0
 // Token: 0x06000014 RID: 20 RVA: 0x00002890 File Offset: 0x00000A90
 public static bool IsCamoActive(Pawn target, out Apparel ACItem)
 {
     ACItem = null;
     if (!CamoGearUtility.IsWearingActiveCamo(target, out Apparel apparel))
     {
         return(false);
     }
     if (apparel != null && CamoUtility.ActiveCamoIsActive(apparel))
     {
         ACItem = apparel;
         return(true);
     }
     return(false);
 }
Example #12
0
 // Token: 0x06000019 RID: 25 RVA: 0x00002D30 File Offset: 0x00000F30
 public static void TryAddCamoHidValue(Pawn seer, Pawn target, bool value)
 {
     if (seer != null)
     {
         bool         flag         = false;
         PawnCamoData pawnCamoData = ThingCompUtility.TryGetComp <PawnCamoData>(seer);
         if (pawnCamoData != null)
         {
             int           ticksGame       = Find.TickManager.TicksGame;
             List <string> list            = new List <string>();
             List <string> pawnHidTickList = pawnCamoData.PawnHidTickList;
             if (pawnHidTickList != null && pawnHidTickList.Count > 0)
             {
                 foreach (string text in pawnHidTickList)
                 {
                     if (CamoGearUtility.GetIntValue(text, 1) + CamoUtility.TickElapse >= ticksGame)
                     {
                         GenCollection.AddDistinct <string>(list, text);
                         int intValue = CamoGearUtility.GetIntValue(text, 0);
                         if (target != null && target != null)
                         {
                             int thingIDNumber = target.thingIDNumber;
                             if (intValue == target.thingIDNumber)
                             {
                                 flag = true;
                             }
                         }
                     }
                 }
             }
             if (!flag)
             {
                 string text2 = string.Concat(new string[]
                 {
                     target.thingIDNumber.ToString(),
                     ";",
                     ticksGame.ToString(),
                     ";",
                     value ? "1" : "0"
                 });
                 GenCollection.AddDistinct <string>(list, text2);
             }
             pawnCamoData.PawnHidTickList = list;
         }
     }
 }
Example #13
0
        // Token: 0x06000018 RID: 24 RVA: 0x00002C58 File Offset: 0x00000E58
        public static bool TryGetCamoHidValue(Pawn seer, Pawn target, out bool hid)
        {
            hid = false;

            var pawnCamoData = seer?.TryGetComp <PawnCamoData>();

            if (pawnCamoData == null)
            {
                return(false);
            }

            var ticksGame = Find.TickManager.TicksGame;
            var list      = pawnCamoData.PawnHidTickList;

            if (list == null || list.Count <= 0)
            {
                return(false);
            }

            foreach (var valuesStr in list)
            {
                if (CamoGearUtility.GetIntValue(valuesStr, 1) + TickElapse < ticksGame)
                {
                    continue;
                }

                var intValue = CamoGearUtility.GetIntValue(valuesStr, 0);
                if (target == null)
                {
                    continue;
                }

                var unused = target.thingIDNumber;
                if (intValue != target.thingIDNumber)
                {
                    continue;
                }

                var strValue = CamoGearUtility.GetStrValue(valuesStr, 2);
                hid = strValue == "1";
                return(true);
            }

            return(false);
        }
Example #14
0
 // Token: 0x06000063 RID: 99 RVA: 0x0000650C File Offset: 0x0000470C
 public override void PostSpawnSetup(bool respawningAfterLoad)
 {
     base.PostSpawnSetup(respawningAfterLoad);
     if (respawningAfterLoad)
     {
         Pawn pawn = this.Pawn;
         if ((pawn?.apparel) != null && this.Pawn.apparel.WornApparelCount > 0)
         {
             foreach (Apparel apparel in this.Pawn.apparel.WornApparel)
             {
                 CompGearCamo compGearCamo = ThingCompUtility.TryGetComp <CompGearCamo>(apparel);
                 if (compGearCamo != null && compGearCamo.Props.ActiveCamoEff > 0f && compGearCamo.Props.CamoEnergyMax > 0f && apparel.GetType() != typeof(ActiveCamoApparel) && apparel.def.thingClass == typeof(ActiveCamoApparel))
                 {
                     PawnCamoData.CorrectActiveApparel(apparel, this.Pawn);
                     break;
                 }
             }
         }
     }
     CamoGearUtility.CalcAndSetCamoEff(this.Pawn);
 }
        // Token: 0x0600003E RID: 62 RVA: 0x00004794 File Offset: 0x00002994
        internal static string GetCamoType(Pawn pawn)
        {
            string text = "notDefined";

            if (!(text != "notDefined") && GridsUtility.GetSnowDepth(pawn.Position, pawn.Map) >= 0.25f)
            {
                return("Arctic");
            }
            TerrainDef terrain = GridsUtility.GetTerrain(pawn.Position, pawn.Map);

            if (!(text != "notDefined") && terrain != null)
            {
                if ((terrain?.smoothedTerrain) != null || terrain.affordances.Contains(TerrainAffordanceDefOf.SmoothableStone))
                {
                    return("Stone");
                }
                if (CamoGearUtility.IsFluffyStuffed(terrain, out string text2))
                {
                    text = text2;
                }
                else
                {
                    text = CamoDefGet.GetCamoDefTerrain(terrain);
                }
                if (Prefs.DevMode && Controller.Settings.ShowTerrainLogs && Find.TickManager.TicksGame % 120 == 0)
                {
                    Log.Message("Terrain: " + terrain.defName + " : " + text, false);
                }
            }
            if (!(text != "notDefined") && !GridsUtility.UsesOutdoorTemperature(pawn.Position, pawn.Map))
            {
                return("Urban");
            }
            if (!(text != "notDefined"))
            {
                text = CamoDefGet.GetCamoDefBiome(pawn.Map.Biome);
            }
            return(text);
        }
 // Token: 0x0600003F RID: 63 RVA: 0x000048B4 File Offset: 0x00002AB4
 internal static bool IsFluffyStuffed(TerrainDef terrain, out string camoType)
 {
     camoType = "notDefined";
     if (terrain.defName.Contains("_") && CamoGearUtility.GetFSValue(terrain.defName, out string text))
     {
         if (text.StartsWith("Wood") || text.StartsWith("Plywood"))
         {
             camoType = "Woodland";
             return(true);
         }
         if (text.StartsWith("Stone") || text.StartsWith("Flagstones") || text.StartsWith("Smooth"))
         {
             camoType = "Stone";
             return(true);
         }
         if (text.StartsWith("FloorsMetal"))
         {
             camoType = "Urban";
             return(true);
         }
     }
     return(false);
 }
Example #17
0
        // Token: 0x06000016 RID: 22 RVA: 0x000028CC File Offset: 0x00000ACC
        public static bool IsTargetHidden(Pawn target, Pawn seer)
        {
            if (target == null || seer == null)
            {
                Log.Message("Target/Seer Null");
                return(false);
            }

            if (target == seer)
            {
                return(false);
            }

            if (TryGetCamoHidValue(seer, target, out var result))
            {
                return(result);
            }

            if (!target.Spawned)
            {
                return(false);
            }

            var     isCamoActive = false;
            Apparel apparel      = null;

            if (!IsDebugMode() || !Controller.Settings.forcePassive)
            {
                isCamoActive = IsCamoActive(target, out var apparel2);
                if (apparel2 != null)
                {
                    apparel = apparel2;
                }
            }

            if ((!isCamoActive || seer.CurrentEffectiveVerb.IsMeleeAttack) && SimplyTooClose(seer, target))
            {
                TryAddCamoHidValue(seer, target, false);
                return(false);
            }

            if (isCamoActive || IsDebugMode() && Controller.Settings.forceActive)
            {
                if (!seer.Spawned)
                {
                    return(false);
                }

                if (target.Map == null || seer.Map == null || target.Map != seer.Map ||
                    seer.InMentalState && target.InMentalState)
                {
                    TryAddCamoHidValue(seer, target, false);
                    return(false);
                }

                if (!GenSight.LineOfSight(seer.Position, target.Position, seer.Map))
                {
                    return(true);
                }

                var  num  = 0.75f;
                var  num2 = 0;
                bool settingsForceStealth;
                if (IsDebugMode() && Controller.Settings.forceActive)
                {
                    apparel = null;
                    settingsForceStealth = Controller.Settings.forceStealth;
                    if (settingsForceStealth)
                    {
                        num2 = 5;
                    }
                }
                else
                {
                    num  = apparel.TryGetComp <CompGearCamo>().Props.ActiveCamoEff;
                    num2 = apparel.TryGetComp <CompGearCamo>().Props.StealthCamoChance;
                    settingsForceStealth = num2 > 0 && num > 0f;
                }

                if (CamoEffectWorked(target, seer, apparel, num, true, settingsForceStealth, num2, out var chance,
                                     out var scaler))
                {
                    DoCamoMote(seer, target, true, chance, num, scaler);
                    TryAddCamoHidValue(seer, target, true);
                    CamoAIUtility.CorrectLordForCamo(seer, target);
                    return(true);
                }

                DoCamoMote(seer, target, false, chance, num, scaler);
                TryAddCamoHidValue(seer, target, false);
                return(false);
            }

            if (!seer.Spawned)
            {
                return(false);
            }

            if (!CamoGearUtility.GetCurCamoEff(target, out var str, out var camoEff))
            {
                TryAddCamoHidValue(seer, target, false);
                return(false);
            }

            if (IsDebugMode())
            {
                if (Controller.Settings.forcePassive)
                {
                    camoEff = 0.75f;
                }

                Log.Message("Camo: " + str + " : " + camoEff.ToString("F2"));
            }

            if (target.Map == null || seer.Map == null || target.Map != seer.Map ||
                seer.InMentalState && target.InMentalState)
            {
                TryAddCamoHidValue(seer, target, false);
                return(false);
            }

            if (!GenSight.LineOfSight(seer.Position, target.Position, seer.Map))
            {
                return(true);
            }

            if (CamoEffectWorked(target, seer, null, camoEff, false, false, 0, out var chance2,
                                 out var scaler2))
            {
                DoCamoMote(seer, target, true, chance2, camoEff, scaler2);
                TryAddCamoHidValue(seer, target, true);
                CamoAIUtility.CorrectLordForCamo(seer, target);
                return(true);
            }

            DoCamoMote(seer, target, false, chance2, camoEff, scaler2);
            TryAddCamoHidValue(seer, target, false);
            return(false);
        }
Example #18
0
 // Token: 0x06000016 RID: 22 RVA: 0x000028CC File Offset: 0x00000ACC
 public static bool IsTargetHidden(Pawn target, Pawn seer)
 {
     if (target == null || seer == null)
     {
         Log.Message("Target/Seer Null", false);
         return(false);
     }
     if (target != null && seer != null)
     {
         if (target == seer)
         {
             return(false);
         }
         if (CamoUtility.TryGetCamoHidValue(seer, target, out bool result))
         {
             return(result);
         }
     }
     if (target != null && target.Spawned)
     {
         bool    flag    = false;
         Apparel apparel = null;
         if (!CamoUtility.IsDebugMode() || !Controller.Settings.forcePassive)
         {
             flag = CamoUtility.IsCamoActive(target, out Apparel apparel2);
             if (apparel2 != null)
             {
                 apparel = apparel2;
             }
         }
         if ((!flag || (flag && seer.CurrentEffectiveVerb.IsMeleeAttack)) && CamoUtility.SimplyTooClose(seer, target))
         {
             CamoUtility.TryAddCamoHidValue(seer, target, false);
             return(false);
         }
         if (flag || (CamoUtility.IsDebugMode() && Controller.Settings.forceActive))
         {
             if (seer == null || !seer.Spawned)
             {
                 return(false);
             }
             if ((target?.Map) == null || (seer?.Map) == null || target.Map != seer.Map || (seer.InMentalState && target.InMentalState))
             {
                 CamoUtility.TryAddCamoHidValue(seer, target, false);
                 return(false);
             }
             if (!GenSight.LineOfSight(seer.Position, target.Position, seer.Map, false, null, 0, 0))
             {
                 return(true);
             }
             float num  = 0.75f;
             int   num2 = 0;
             bool  flag2;
             if (CamoUtility.IsDebugMode() && Controller.Settings.forceActive)
             {
                 apparel = null;
                 flag2   = Controller.Settings.forceStealth;
                 if (flag2)
                 {
                     num2 = 5;
                 }
             }
             else
             {
                 num   = ThingCompUtility.TryGetComp <CompGearCamo>(apparel).Props.ActiveCamoEff;
                 num2  = ThingCompUtility.TryGetComp <CompGearCamo>(apparel).Props.StealthCamoChance;
                 flag2 = (num2 > 0 && num > 0f);
             }
             if (CamoUtility.CamoEffectWorked(target, seer, apparel, num, true, flag2, num2, out int chance, out float scaler))
             {
                 CamoUtility.DoCamoMote(seer, target, true, chance, num, scaler);
                 CamoUtility.TryAddCamoHidValue(seer, target, true);
                 CamoAIUtility.CorrectLordForCamo(seer, target);
                 return(true);
             }
             CamoUtility.DoCamoMote(seer, target, false, chance, num, scaler);
             CamoUtility.TryAddCamoHidValue(seer, target, false);
             return(false);
         }
         else if (seer != null && seer.Spawned)
         {
             if (!CamoGearUtility.GetCurCamoEff(target, out string str, out float camoEff))
             {
                 CamoUtility.TryAddCamoHidValue(seer, target, false);
                 return(false);
             }
             if (CamoUtility.IsDebugMode())
             {
                 if (Controller.Settings.forcePassive)
                 {
                     camoEff = 0.75f;
                 }
                 Log.Message("Camo: " + str + " : " + camoEff.ToString("F2"), false);
             }
             if ((target?.Map) == null || (seer?.Map) == null || target.Map != seer.Map || (seer.InMentalState && target.InMentalState))
             {
                 CamoUtility.TryAddCamoHidValue(seer, target, false);
                 return(false);
             }
             if (!GenSight.LineOfSight(seer.Position, target.Position, seer.Map, false, null, 0, 0))
             {
                 return(true);
             }
             if (CamoUtility.CamoEffectWorked(target, seer, null, camoEff, false, false, 0, out int chance2, out float scaler2))
             {
                 CamoUtility.DoCamoMote(seer, target, true, chance2, camoEff, scaler2);
                 CamoUtility.TryAddCamoHidValue(seer, target, true);
                 CamoAIUtility.CorrectLordForCamo(seer, target);
                 return(true);
             }
             CamoUtility.DoCamoMote(seer, target, false, chance2, camoEff, scaler2);
             CamoUtility.TryAddCamoHidValue(seer, target, false);
             return(false);
         }
     }
     return(false);
 }
 public static void PostFix(Pawn pawn, PawnGenerationRequest request)
 {
     CamoGearUtility.CalcAndSetCamoEff(pawn);
 }
 public static void PostFix(ref Pawn_ApparelTracker __instance)
 {
     CamoGearUtility.CalcAndSetCamoEff(__instance.pawn);
 }
        // Token: 0x06000037 RID: 55 RVA: 0x00003D60 File Offset: 0x00001F60
        internal static void CalcAndSetCamoEff(Pawn pawn)
        {
            float num;
            float num2;
            float num3;
            float num4;
            float num5;
            float num6;
            float num7;

            if (StealthyBox.IsWearingStealthBox(pawn, out Apparel apparel))
            {
                CompGearCamo compGearCamo = ThingCompUtility.TryGetComp <CompGearCamo>(apparel);
                if (compGearCamo != null)
                {
                    num  = compGearCamo.Props.ArcticCamoEff;
                    num2 = compGearCamo.Props.DesertCamoEff;
                    num3 = compGearCamo.Props.JungleCamoEff;
                    num4 = compGearCamo.Props.StoneCamoEff;
                    num5 = compGearCamo.Props.WoodlandCamoEff;
                    num6 = compGearCamo.Props.UrbanCamoEff;
                    num7 = (compGearCamo.Props.ArcticCamoEff + compGearCamo.Props.DesertCamoEff + compGearCamo.Props.JungleCamoEff + compGearCamo.Props.StoneCamoEff + compGearCamo.Props.WoodlandCamoEff + compGearCamo.Props.UrbanCamoEff) / 6f;
                }
                else
                {
                    num  = 1f;
                    num2 = 1f;
                    num3 = 1f;
                    num4 = 1f;
                    num5 = 1f;
                    num6 = 1f;
                    num7 = 1f;
                }
            }
            else
            {
                CamoGearUtility.WearingCamoGear(pawn, out float num8, out float num9, out float num10, out float num11, out float num12, out float num13, out float num14);
                num  = num8;
                num2 = num9;
                num3 = num10;
                num4 = num11;
                num5 = num12;
                num6 = num13;
                num7 = num14;
            }
            float        pawnArcticCamo     = num;
            float        pawnDesertCamo     = num2;
            float        pawnJungleCamo     = num3;
            float        pawnStoneCamo      = num4;
            float        pawnWoodlandCamo   = num5;
            float        pawnUrbanCamo      = num6;
            float        pawnnotDefinedCamo = num7;
            PawnCamoData pawnCamoData       = ThingCompUtility.TryGetComp <PawnCamoData>(pawn);

            if (pawnCamoData != null)
            {
                pawnCamoData.PawnArcticCamo     = pawnArcticCamo;
                pawnCamoData.PawnDesertCamo     = pawnDesertCamo;
                pawnCamoData.PawnJungleCamo     = pawnJungleCamo;
                pawnCamoData.PawnStoneCamo      = pawnStoneCamo;
                pawnCamoData.PawnWoodlandCamo   = pawnWoodlandCamo;
                pawnCamoData.PawnUrbanCamo      = pawnUrbanCamo;
                pawnCamoData.PawnnotDefinedCamo = pawnnotDefinedCamo;
            }
        }
        // Token: 0x06000039 RID: 57 RVA: 0x00004024 File Offset: 0x00002224
        internal static void WearingCamoGear(Pawn pawn, out float ArcticCamoEff, out float DesertCamoEff, out float JungleCamoEff, out float StoneCamoEff, out float WoodlandCamoEff, out float UrbanCamoEff, out float notDefinedCamoEff)
        {
            ArcticCamoEff     = 0f;
            DesertCamoEff     = 0f;
            JungleCamoEff     = 0f;
            StoneCamoEff      = 0f;
            WoodlandCamoEff   = 0f;
            UrbanCamoEff      = 0f;
            notDefinedCamoEff = 0f;
            List <string> list  = new List <string>();
            List <string> list2 = new List <string>();

            if ((pawn?.apparel) != null && pawn.apparel.WornApparelCount > 0)
            {
                foreach (Apparel apparel in pawn.apparel.WornApparel)
                {
                    float apparelArcticEff     = 0f;
                    float apparelDesertEff     = 0f;
                    float apparelJungleEff     = 0f;
                    float apparelStoneEff      = 0f;
                    float apparelWoodlandEff   = 0f;
                    float apparelUrbanEff      = 0f;
                    float apparelnotDefinedEff = 0f;
                    foreach (string text in CamoGearUtility.CamoTypes())
                    {
                        float num  = Math.Min(1f, CamoGearUtility.GetApparelCamoEff(pawn, apparel, text) * CamoGearUtility.GetQualFactor(apparel));
                        uint  num2 = ComputeStringHash(text);
                        if (num2 <= 1206763323U)
                        {
                            if (num2 != 359505389U)
                            {
                                if (num2 != 437214172U)
                                {
                                    if (num2 == 1206763323U)
                                    {
                                        if (text == "Urban")
                                        {
                                            apparelUrbanEff = num;
                                        }
                                    }
                                }
                                else if (text == "Desert")
                                {
                                    apparelDesertEff = num;
                                }
                            }
                            else if (text == "Arctic")
                            {
                                apparelArcticEff = num;
                            }
                        }
                        else if (num2 <= 1858049587U)
                        {
                            if (num2 != 1842662042U)
                            {
                                if (num2 == 1858049587U)
                                {
                                    if (text == "notDefined")
                                    {
                                        apparelnotDefinedEff = num;
                                    }
                                }
                            }
                            else if (text == "Stone")
                            {
                                apparelStoneEff = num;
                            }
                        }
                        else if (num2 != 3655469229U)
                        {
                            if (num2 == 3729410372U)
                            {
                                if (text == "Jungle")
                                {
                                    apparelJungleEff = num;
                                }
                            }
                        }
                        else if (text == "Woodland")
                        {
                            apparelWoodlandEff = num;
                        }
                    }
                    List <BodyPartGroupDef> bodyPartGroups = apparel.def.apparel.bodyPartGroups;
                    int drawOrder = apparel.def.apparel.LastLayer.drawOrder;
                    foreach (BodyPartGroupDef bodyPartGroupDef in bodyPartGroups)
                    {
                        list.Add(CamoGearUtility.GetNewRecord(bodyPartGroupDef, drawOrder, apparelArcticEff, apparelDesertEff, apparelJungleEff, apparelStoneEff, apparelWoodlandEff, apparelUrbanEff, apparelnotDefinedEff));
                        GenCollection.AddDistinct <string>(list2, bodyPartGroupDef.defName);
                    }
                }
                if (list.Count > 0 && list2.Count > 0)
                {
                    float num3  = 0f;
                    float num4  = 0f;
                    float num5  = 0f;
                    float num6  = 0f;
                    float num7  = 0f;
                    float num8  = 0f;
                    float num9  = 0f;
                    int   num10 = 0;
                    foreach (string b in list2)
                    {
                        int   num11 = 0;
                        float num12 = 0f;
                        float num13 = 0f;
                        float num14 = 0f;
                        float num15 = 0f;
                        float num16 = 0f;
                        float num17 = 0f;
                        float num18 = 0f;
                        foreach (string valuesStr in list)
                        {
                            if (CamoGearUtility.GetStrValue(valuesStr, 0) == b)
                            {
                                int intValue = CamoGearUtility.GetIntValue(valuesStr, 1);
                                if (intValue >= num11)
                                {
                                    num11 = intValue;
                                    num12 = (float)CamoGearUtility.GetIntValue(valuesStr, 2) / 1000f;
                                    num13 = (float)CamoGearUtility.GetIntValue(valuesStr, 3) / 1000f;
                                    num14 = (float)CamoGearUtility.GetIntValue(valuesStr, 4) / 1000f;
                                    num15 = (float)CamoGearUtility.GetIntValue(valuesStr, 5) / 1000f;
                                    num16 = (float)CamoGearUtility.GetIntValue(valuesStr, 6) / 1000f;
                                    num17 = (float)CamoGearUtility.GetIntValue(valuesStr, 7) / 1000f;
                                    num18 = (float)CamoGearUtility.GetIntValue(valuesStr, 8) / 1000f;
                                }
                            }
                        }
                        num3 += num12;
                        num4 += num13;
                        num5 += num14;
                        num6 += num15;
                        num7 += num16;
                        num8 += num17;
                        num9 += num18;
                        num10++;
                    }
                    if (num10 > 0)
                    {
                        ArcticCamoEff     = num3 / (float)num10;
                        DesertCamoEff     = num4 / (float)num10;
                        JungleCamoEff     = num5 / (float)num10;
                        StoneCamoEff      = num6 / (float)num10;
                        WoodlandCamoEff   = num7 / (float)num10;
                        UrbanCamoEff      = num8 / (float)num10;
                        notDefinedCamoEff = num9 / (float)num10;
                    }
                }
            }
            list.Clear();
            list2.Clear();
        }
        // Token: 0x0600004F RID: 79 RVA: 0x00004F10 File Offset: 0x00003110
        public static float GetCamoPresetEff(Apparel apparel, string type)
        {
            var num          = 0f;
            var compGearCamo = apparel.TryGetComp <CompGearCamo>();

            if (compGearCamo != null)
            {
                switch (type)
                {
                case "Arctic":
                    num = compGearCamo.Props.ArcticCamoEff;
                    break;

                case "Desert":
                    num = compGearCamo.Props.DesertCamoEff;
                    break;

                case "Jungle":
                    num = compGearCamo.Props.JungleCamoEff;
                    break;

                case "Stone":
                    num = compGearCamo.Props.StoneCamoEff;
                    break;

                case "Woodland":
                    num = compGearCamo.Props.WoodlandCamoEff;
                    break;

                case "Urban":
                    num = compGearCamo.Props.UrbanCamoEff;
                    break;
                }
            }
            else
            {
                var           def = apparel.def;
                List <string> list;
                if (def == null)
                {
                    list = null;
                }
                else
                {
                    var apparel2 = def.apparel;
                    list = apparel2?.tags;
                }

                var list2 = list;
                if (list2 == null || list2.Count <= 0)
                {
                    return(num);
                }

                foreach (var text in list2)
                {
                    if (!text.StartsWith("PassiveCamo") || !GetCamoTags().Contains(text) &&
                        !GetColourTags().Contains(text) &&
                        !text.StartsWith("PassiveCamo_Multi") &&
                        !text.StartsWith("PassiveCamo_Colour"))
                    {
                        continue;
                    }

                    var text2 = GetTagValue(text, 1);
                    if (!CamoGearUtility.CamoTypes().Contains(text2) && text2 != "Multi")
                    {
                        if (text2 == "Colour")
                        {
                            text2 = CamoPresetColour.GetClosestType(apparel);
                        }

                        switch (text2)
                        {
                        case "Black":
                            switch (type)
                            {
                            case "Arctic":
                                num = 0.12f;
                                break;

                            case "Desert":
                                num = 0.25f;
                                break;

                            case "Jungle":
                                num = 0.3f;
                                break;

                            case "Stone":
                                num = 0.27f;
                                break;

                            case "Woodland":
                                num = 0.29f;
                                break;

                            case "Urban":
                                num = 0.3f;
                                break;
                            }

                            break;

                        case "White":
                            switch (type)
                            {
                            case "Arctic":
                                num = 0.65f;
                                break;

                            case "Desert":
                            case "Jungle":
                                num = 0.22f;
                                break;

                            case "Stone":
                                num = 0.3f;
                                break;

                            case "Woodland":
                                num = 0.22f;
                                break;

                            case "Urban":
                                num = 0.3f;
                                break;
                            }

                            break;

                        case "Red":
                            switch (type)
                            {
                            case "Arctic":
                                num = 0.05f;
                                break;

                            case "Desert":
                                num = 0.32f;
                                break;

                            case "Jungle":
                                num = 0.25f;
                                break;

                            case "Stone":
                                num = 0.15f;
                                break;

                            case "Woodland":
                                num = 0.25f;
                                break;

                            case "Urban":
                                num = 0.15f;
                                break;
                            }

                            break;

                        case "Orange":
                            switch (type)
                            {
                            case "Arctic":
                                num = 0.07f;
                                break;

                            case "Desert":
                                num = 0.55f;
                                break;

                            case "Jungle":
                                num = 0.25f;
                                break;

                            case "Stone":
                                num = 0.15f;
                                break;

                            case "Woodland":
                                num = 0.24f;
                                break;

                            case "Urban":
                                num = 0.17f;
                                break;
                            }

                            break;

                        case "Yellow":
                            switch (type)
                            {
                            case "Arctic":
                                num = 0.12f;
                                break;

                            case "Desert":
                                num = 0.6f;
                                break;

                            case "Jungle":
                                num = 0.29f;
                                break;

                            case "Stone":
                                num = 0.12f;
                                break;

                            case "Woodland":
                                num = 0.27f;
                                break;

                            case "Urban":
                                num = 0.18f;
                                break;
                            }

                            break;

                        case "Green":
                            switch (type)
                            {
                            case "Arctic":
                                num = 0.1f;
                                break;

                            case "Desert":
                                num = 0.37f;
                                break;

                            case "Jungle":
                                num = 0.58f;
                                break;

                            case "Stone":
                                num = 0.15f;
                                break;

                            case "Woodland":
                                num = 0.55f;
                                break;

                            case "Urban":
                                num = 0.19f;
                                break;
                            }

                            break;

                        case "Blue":
                            switch (type)
                            {
                            case "Arctic":
                                num = 0.1f;
                                break;

                            case "Desert":
                                num = 0.22f;
                                break;

                            case "Jungle":
                                num = 0.37f;
                                break;

                            case "Stone":
                                num = 0.25f;
                                break;

                            case "Woodland":
                                num = 0.35f;
                                break;

                            case "Urban":
                                num = 0.25f;
                                break;
                            }

                            break;

                        case "Cyan":
                            switch (type)
                            {
                            case "Arctic":
                                num = 0.19f;
                                break;

                            case "Desert":
                                num = 0.12f;
                                break;

                            case "Jungle":
                                num = 0.24f;
                                break;

                            case "Stone":
                                num = 0.25f;
                                break;

                            case "Woodland":
                                num = 0.24f;
                                break;

                            case "Urban":
                                num = 0.23f;
                                break;
                            }

                            break;

                        case "Violet":
                            switch (type)
                            {
                            case "Arctic":
                                num = 0.09f;
                                break;

                            case "Desert":
                                num = 0.26f;
                                break;

                            case "Jungle":
                                num = 0.21f;
                                break;

                            case "Stone":
                            case "Woodland":
                            case "Urban":
                                num = 0.19f;
                                break;
                            }

                            break;

                        case "Purple":
                            switch (type)
                            {
                            case "Arctic":
                                num = 0.07f;
                                break;

                            case "Desert":
                                num = 0.22f;
                                break;

                            case "Jungle":
                                num = 0.24f;
                                break;

                            case "Stone":
                            case "Woodland":
                                num = 0.22f;
                                break;

                            case "Urban":
                                num = 0.21f;
                                break;
                            }

                            break;

                        case "Brown":
                            switch (type)
                            {
                            case "Arctic":
                                num = 0.09f;
                                break;

                            case "Desert":
                                num = 0.42f;
                                break;

                            case "Jungle":
                                num = 0.4f;
                                break;

                            case "Stone":
                                num = 0.42f;
                                break;

                            case "Woodland":
                                num = 0.41f;
                                break;

                            case "Urban":
                                num = 0.23f;
                                break;
                            }

                            break;

                        case "Dark":
                            switch (type)
                            {
                            case "Arctic":
                                num = 0.11f;
                                break;

                            case "Desert":
                                num = 0.26f;
                                break;

                            case "Jungle":
                                num = 0.31f;
                                break;

                            case "Stone":
                                num = 0.28f;
                                break;

                            case "Woodland":
                                num = 0.3f;
                                break;

                            case "Urban":
                                num = 0.31f;
                                break;
                            }

                            break;

                        case "Light":
                            switch (type)
                            {
                            case "Arctic":
                                num = 0.4f;
                                break;

                            case "Desert":
                                num = 0.3f;
                                break;

                            case "Jungle":
                            case "Stone":
                            case "Woodland":
                                num = 0.2f;
                                break;

                            case "Urban":
                                num = 0.35f;
                                break;
                            }

                            break;

                        case "Rainbow":
                            switch (type)
                            {
                            case "Arctic":
                            case "Desert":
                            case "Jungle":
                            case "Stone":
                            case "Woodland":
                                num = 0.25f;
                                break;

                            case "Urban":
                                num = 0.3f;
                                break;
                            }

                            break;
                        }

                        return(num);
                    }

                    if (text2 == null)
                    {
                        continue;
                    }

                    switch (text2)
                    {
                    case "Arctic":
                        switch (type)
                        {
                        case "Arctic":
                            num = 0.54f;
                            break;

                        case "Desert":
                        case "Jungle":
                            num = 0.22f;
                            break;

                        case "Stone":
                            num = 0.39f;
                            break;

                        case "Woodland":
                            num = 0.22f;
                            break;

                        case "Urban":
                            num = 0.32f;
                            break;
                        }

                        break;

                    case "Desert":
                        switch (type)
                        {
                        case "Arctic":
                            num = 0.22f;
                            break;

                        case "Desert":
                            num = 0.54f;
                            break;

                        case "Jungle":
                            num = 0.39f;
                            break;

                        case "Stone":
                            num = 0.22f;
                            break;

                        case "Woodland":
                            num = 0.39f;
                            break;

                        case "Urban":
                            num = 0.32f;
                            break;
                        }

                        break;

                    case "Jungle":
                        switch (type)
                        {
                        case "Arctic":
                            num = 0.22f;
                            break;

                        case "Desert":
                            num = 0.39f;
                            break;

                        case "Jungle":
                            num = 0.54f;
                            break;

                        case "Stone":
                            num = 0.22f;
                            break;

                        case "Woodland":
                            num = 0.48f;
                            break;

                        case "Urban":
                            num = 0.32f;
                            break;
                        }

                        break;

                    case "Stone":
                        switch (type)
                        {
                        case "Arctic":
                            num = 0.39f;
                            break;

                        case "Desert":
                        case "Jungle":
                            num = 0.22f;
                            break;

                        case "Stone":
                            num = 0.54f;
                            break;

                        case "Woodland":
                            num = 0.22f;
                            break;

                        case "Urban":
                            num = 0.37f;
                            break;
                        }

                        break;

                    case "Woodland":
                        switch (type)
                        {
                        case "Arctic":
                            num = 0.22f;
                            break;

                        case "Desert":
                            num = 0.39f;
                            break;

                        case "Jungle":
                            num = 0.48f;
                            break;

                        case "Stone":
                            num = 0.22f;
                            break;

                        case "Woodland":
                            num = 0.54f;
                            break;

                        case "Urban":
                            num = 0.32f;
                            break;
                        }

                        break;

                    case "Urban":
                        switch (type)
                        {
                        case "Arctic":
                        case "Desert":
                        case "Jungle":
                            num = 0.32f;
                            break;

                        case "Stone":
                            num = 0.37f;
                            break;

                        case "Woodland":
                            num = 0.32f;
                            break;

                        case "Urban":
                            num = 0.54f;
                            break;
                        }

                        break;

                    case "Multi":
                        switch (type)
                        {
                        case "Arctic":
                            num = 0.32f;
                            break;

                        case "Desert":
                            num = 0.49f;
                            break;

                        case "Jungle":
                            num = 0.47f;
                            break;

                        case "Stone":
                            num = 0.37f;
                            break;

                        case "Woodland":
                            num = 0.49f;
                            break;

                        case "Urban":
                            num = 0.35f;
                            break;
                        }

                        break;
                    }

                    var tagValue = GetTagValue(text, 2);
                    if (tagValue != null)
                    {
                        switch (tagValue)
                        {
                        case "Med":
                            num *= 1.2f;
                            break;

                        case "High":
                            num *= 1.33f;
                            break;
                        }
                    }

                    var techLevel = apparel.def.techLevel;
                    if (techLevel != TechLevel.Spacer)
                    {
                        if (techLevel == TechLevel.Ultra)
                        {
                            num *= 1.1f;
                        }
                    }
                    else
                    {
                        num *= 1.05f;
                    }

                    return(num);
                }

                return(num);
            }

            return(num);
        }
Example #24
0
 // Token: 0x06000064 RID: 100 RVA: 0x00006618 File Offset: 0x00004818
 public override string CompInspectStringExtra()
 {
     if (CamoUtility.IsCamoActive(this.Pawn, out Apparel apparel))
     {
         if (apparel != null)
         {
             float  activeCamoEff = ThingCompUtility.TryGetComp <CompGearCamo>(apparel).Props.ActiveCamoEff;
             string text          = Translator.Translate("CompCamo.Active");
             if (ThingCompUtility.TryGetComp <CompGearCamo>(apparel).Props.StealthCamoChance > 0 && activeCamoEff > 0f)
             {
                 text = Translator.Translate("CompCamo.Stealth");
             }
             return(TranslatorFormattedStringExtensions.Translate("CompCamo.CamouflageDesc", text, GenText.ToStringPercent(activeCamoEff)));
         }
     }
     else if (CamoGearUtility.GetCurCamoEff(this.Pawn, out string a, out float num))
     {
         string text2 = Translator.Translate("CompCamo.Undefined");
         if (!(a == "Arctic"))
         {
             if (!(a == "Desert"))
             {
                 if (!(a == "Jungle"))
                 {
                     if (!(a == "Stone"))
                     {
                         if (!(a == "Urban"))
                         {
                             if (a == "Woodland")
                             {
                                 text2 = Translator.Translate("CompCamo.Woodland");
                             }
                         }
                         else
                         {
                             text2 = Translator.Translate("CompCamo.Urban");
                         }
                     }
                     else
                     {
                         text2 = Translator.Translate("CompCamo.Stone");
                     }
                 }
                 else
                 {
                     text2 = Translator.Translate("CompCamo.Jungle");
                 }
             }
             else
             {
                 text2 = Translator.Translate("CompCamo.Desert");
             }
         }
         else
         {
             text2 = Translator.Translate("CompCamo.Arctic");
         }
         return(TranslatorFormattedStringExtensions.Translate("CompCamo.CamouflageDesc", text2, GenText.ToStringPercent(num)));
     }
     return(null);
 }