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); } }
// 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())); }
// 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"); }
// 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); }
// 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; } } }
// 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); }
// 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); }
// 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); }
// 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); }
// 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); }