private static IEnumerator ProcessPendingCompounds(bool bForce = false) { if (bProcessingCompounds) { if (bForce) { Log.LogDebug("ProcessPendingCompounds executing: forced"); } else { yield break; } } if (pendingCompoundTech.Count < 1) { bProcessingCompounds = false; yield break; } Log.LogDebug("ProcessPendingCompounds executing"); bProcessingCompounds = true; int tries = 0; while (pendingCompoundTech.Count > 0) { List <KnownTech.CompoundTech> compounds = (List <KnownTech.CompoundTech>)knownTechCompoundTech.GetValue(null); HashSet <TechType> removals = new HashSet <TechType>(); Log.LogDebug($"Attempting to process pending compound tech: pendingCompoundTech.Count == {pendingCompoundTech.Count}, attempt {++tries}"); if (compounds != null) { Log.LogDebug("Successfully retrieved KnownTech.compoundTech: Now processing pendingCompoundTech"); foreach (KeyValuePair <TechType, List <TechType> > kvp in pendingCompoundTech) { Log.LogDebug($"Adding compoundTech: techType = {kvp.Key.AsString()}"); KnownTech.CompoundTech compound = new KnownTech.CompoundTech(); compound.techType = kvp.Key; compound.dependencies = kvp.Value; compounds.Add(compound); removals.Add(kvp.Key); } } else { Log.LogDebug($"KnownTech.compoundTech could not be retrieved"); } foreach (TechType tt in removals) { pendingCompoundTech.Remove(tt); } removals.Clear(); yield return(new WaitForSecondsRealtime(2f)); } bProcessingCompounds = false; }
public static void AddCompoundTech(KnownTech.CompoundTech compound, bool bForce = false) { if (compound != null) { pendingCompoundTech.Add(compound); } //CoroutineHost.StartCoroutine(ProcessPendingCompounds(bForce)); }
protected override void OnFinishedPatch() { base.OnFinishedPatch(); KnownTech.CompoundTech compound = new KnownTech.CompoundTech(); compound.techType = this.TechType; compound.dependencies = new List <TechType>() { TechType.ReinforcedDiveSuit, Main.GetModTechType("SurvivalSuit") }; Reflection.AddCompoundTech(compound); }
public SurvivalSuitBlueprint_FromSurvivalCold() : base("SurvivalSuitBlueprint_FromSurvivalCold") { OnFinishedPatching += () => { KnownTech.CompoundTech compound = new KnownTech.CompoundTech(); compound.techType = this.TechType; compound.dependencies = new List <TechType>() { TechType.ReinforcedDiveSuit, TechType.Stillsuit, TechType.ColdSuit }; Reflection.AddCompoundTech(compound); }; }
public HighCapacityBooster() : base("HighCapacityBooster", "High Capacity Booster Tank", "Booster tank with increased oxygen capacity.") { OnFinishedPatching += () => { Main.AddSubstitution(this.TechType, TechType.SuitBoosterTank); Main.AddSubstitution(this.TechType, TechType.HighCapacityTank); Main.AddModTechType(this.TechType); KnownTech.CompoundTech compound = new KnownTech.CompoundTech(); compound.techType = this.TechType; compound.dependencies = new List <TechType>() { TechType.SuitBoosterTank, TechType.HighCapacityTank }; Reflection.AddCompoundTech(compound); CoroutineHost.StartCoroutine(PostPatchSetup()); }; }
protected virtual void OnFinishedPatch() { //Main.AddSubstitution(this.TechType, TechType.Stillsuit); foreach (TechType tt in substitutions) { Main.AddSubstitution(this.TechType, tt); } Main.AddModTechType(this.TechType); PlayerPatch.AddSurvivalSuit(this.TechType); if (CompoundDependencies.Count > 0) { KnownTech.CompoundTech compound = new KnownTech.CompoundTech(); compound.techType = this.TechType; compound.dependencies = CompoundDependencies; Reflection.AddCompoundTech(compound); } //SurvivalPatches.AddNeedsCapOverride(this.TechType, SurvivalCapOverride); }
public InsulatedRebreather() : base("InsulatedRebreather", "Insulated Rebreather", "Rebreather equipped with insulation helps slow the onset of hypothermia") { OnFinishedPatching += () => { int coldResist = TechData.GetColdResistance(TechType.ColdSuitHelmet); CombinedItems.Reflection.AddColdResistance(this.TechType, System.Math.Max(20, coldResist)); CombinedItems.Reflection.SetItemSize(this.TechType, 2, 2); Log.LogDebug($"Finished patching {this.TechType.AsString()}, found source cold resist of {coldResist}, cold resistance for techtype {this.TechType.AsString()} = {TechData.GetColdResistance(this.TechType)}"); Main.AddSubstitution(this.TechType, TechType.ColdSuitHelmet); Main.AddSubstitution(this.TechType, TechType.Rebreather); Main.AddModTechType(this.TechType); KnownTech.CompoundTech compound = new KnownTech.CompoundTech(); compound.techType = this.TechType; compound.dependencies = new List <TechType>() { TechType.Rebreather, TechType.ColdSuit }; Reflection.AddCompoundTech(compound); }; }
public ReinforcedColdSuit() : base("ReinforcedColdSuit", "Reinforced Cold Suit", "Reinforced, insulated diving suit providing physical protection and insulation from extreme temperatures.") { OnFinishedPatching += () => { int coldResist = TechData.GetColdResistance(TechType.ColdSuit); Reflection.AddColdResistance(this.TechType, System.Math.Max(50, coldResist)); Reflection.SetItemSize(this.TechType, 2, 3); Log.LogDebug($"Finished patching {this.TechType.AsString()}, found source cold resist of {coldResist}, cold resistance for techtype {this.TechType.AsString()} = {TechData.GetColdResistance(this.TechType)}"); Main.AddSubstitution(this.TechType, TechType.ColdSuit); Main.AddSubstitution(this.TechType, TechType.ReinforcedDiveSuit); Main.AddModTechType(this.TechType); KnownTech.CompoundTech compound = new KnownTech.CompoundTech(); compound.techType = this.TechType; compound.dependencies = new List <TechType>() { TechType.ReinforcedDiveSuit, TechType.ColdSuit }; Reflection.AddCompoundTech(compound); }; }