// Token: 0x060000A9 RID: 169 RVA: 0x00008558 File Offset: 0x00006758 public static List <MSRCPListItem> GetRCPList(ThingDef thingdef) { List <MSRCPListItem> list = new List <MSRCPListItem>(); list.Clear(); MSRCPListItem item = default; if (thingdef.defName == "Neutroamine") { item.def = DefDatabase <ThingDef> .GetNamed("MSGlycerol", true); item.mixgrp = 1; item.num = 1; item.ratio = 1f; list.Add(item); item.def = DefDatabase <ThingDef> .GetNamed("Chemfuel", true); item.mixgrp = 2; item.num = 2; item.ratio = 1f; list.Add(item); } else if (thingdef.defName == "MSGlycerol") { item.def = DefDatabase <ThingDef> .GetNamed("Chemfuel", true); item.mixgrp = 1; item.num = 2; item.ratio = 1f; list.Add(item); item.def = DefDatabase <ThingDef> .GetNamed("Beer", true); item.mixgrp = 2; item.num = 1; item.ratio = 1f; list.Add(item); item.def = DefDatabase <ThingDef> .GetNamed("MSEthanol", true); item.mixgrp = 2; item.num = 1; item.ratio = 1f; list.Add(item); } else { if (thingdef.defName == "MSLithiumSalts") { item.def = DefDatabase <ThingDef> .GetNamed("Chemfuel", true); item.mixgrp = 1; item.num = 5; item.ratio = 0.1f; list.Add(item); item.def = DefDatabase <ThingDef> .GetNamed("MSPhenol", true); item.mixgrp = 2; item.num = 10; item.ratio = 0.2f; list.Add(item); item.def = DefDatabase <ThingDef> .GetNamed("MSSulphuricAcid", true); item.mixgrp = 2; item.num = 10; item.ratio = 0.2f; list.Add(item); _ = new List <ThingDef>(); List <ThingDef> useChunkList; if (MSDrugMixUtility.cachedChunkList.Count > 0) { useChunkList = MSDrugMixUtility.cachedChunkList; } else { useChunkList = MSDrugMixUtility.ChunkList(); } if (useChunkList.Count <= 0) { return(list); } using (List <ThingDef> .Enumerator enumerator = useChunkList.GetEnumerator()) { while (enumerator.MoveNext()) { ThingDef ChunkDef = enumerator.Current; item.def = ChunkDef; item.mixed = true; item.mixgrp = 3; item.num = 1; item.ratio = 0.02f; list.Add(item); } return(list); } } if (thingdef.defName == "MSOpiumLatex") { item.def = DefDatabase <ThingDef> .GetNamed("MSOPSeedPod", true); item.mixgrp = 1; item.num = 2; item.ratio = 1f; list.Add(item); } else if (thingdef.defName == "MSPhenol") { item.def = DefDatabase <ThingDef> .GetNamed("Chemfuel", true); item.mixgrp = 1; item.num = 3; item.ratio = 1f; list.Add(item); } else { if (thingdef.defName == "MSMercurySalts") { _ = new List <ThingDef>(); List <ThingDef> useChunkList2; if (MSDrugMixUtility.cachedChunkList.Count > 0) { useChunkList2 = MSDrugMixUtility.cachedChunkList; } else { useChunkList2 = MSDrugMixUtility.ChunkList(); } if (useChunkList2.Count <= 0) { return(list); } using (List <ThingDef> .Enumerator enumerator = useChunkList2.GetEnumerator()) { while (enumerator.MoveNext()) { ThingDef ChunkDef2 = enumerator.Current; item.def = ChunkDef2; item.mixgrp = 1; item.num = 1; item.ratio = 0.2f; list.Add(item); } return(list); } } if (thingdef.defName == "MSEthylMercury") { item.def = DefDatabase <ThingDef> .GetNamed("Chemfuel", true); item.mixgrp = 1; item.num = 10; item.ratio = 1f; list.Add(item); item.def = DefDatabase <ThingDef> .GetNamed("MSMercurySalts", true); item.mixed = false; item.mixgrp = 2; item.num = 5; item.ratio = 1f; list.Add(item); } else { if (thingdef.defName == "MSSulphur") { _ = new List <ThingDef>(); List <ThingDef> useChunkList3; if (MSDrugMixUtility.cachedChunkList.Count > 0) { useChunkList3 = MSDrugMixUtility.cachedChunkList; } else { useChunkList3 = MSDrugMixUtility.ChunkList(); } if (useChunkList3.Count <= 0) { return(list); } using (List <ThingDef> .Enumerator enumerator = useChunkList3.GetEnumerator()) { while (enumerator.MoveNext()) { ThingDef ChunkDef3 = enumerator.Current; item.def = ChunkDef3; item.mixgrp = 1; item.num = 1; item.ratio = 0.02f; list.Add(item); } return(list); } } if (thingdef.defName == "MSSulphuricAcid") { item.def = DefDatabase <ThingDef> .GetNamed("MSSulphur", true); item.mixgrp = 1; item.num = 3; item.ratio = 1f; list.Add(item); } else if (thingdef.defName == "MSEthanol") { item.def = DefDatabase <ThingDef> .GetNamed("Chemfuel", true); item.mixgrp = 1; item.num = 2; item.ratio = 1f; list.Add(item); item.def = DefDatabase <ThingDef> .GetNamed("MSSulphuricAcid", true); item.mixgrp = 2; item.num = 1; item.ratio = 1f; list.Add(item); } else if (thingdef.defName == "MSHydrogenPeroxide") { item.def = DefDatabase <ThingDef> .GetNamed("Chemfuel", true); item.mixgrp = 1; item.num = 1; item.ratio = 1f; list.Add(item); item.def = DefDatabase <ThingDef> .GetNamed("Neutroamine", true); item.mixgrp = 2; item.num = 1; item.ratio = 0.2f; list.Add(item); item.def = DefDatabase <ThingDef> .GetNamed("MSSulphuricAcid", true); item.mixgrp = 3; item.num = 1; item.ratio = 0.2f; list.Add(item); } else if (thingdef.defName == "MSVincaAlkaloid") { item.def = DefDatabase <ThingDef> .GetNamed("MSPerrywinkleLeaves", true); item.mixgrp = 1; item.num = 1; item.ratio = 5f; list.Add(item); item.def = DefDatabase <ThingDef> .GetNamed("MSPhenol", true); item.mixgrp = 2; item.num = 1; item.ratio = 0.2f; list.Add(item); } else if (thingdef.defName == "MSHydrochloricAcid") { _ = new List <ThingDef>(); List <ThingDef> useChunkList4; if (MSDrugMixUtility.cachedChunkList.Count > 0) { useChunkList4 = MSDrugMixUtility.cachedChunkList; } else { useChunkList4 = MSDrugMixUtility.ChunkList(); } if (useChunkList4.Count > 0) { foreach (ThingDef ChunkDef4 in useChunkList4) { item.def = ChunkDef4; item.mixed = true; item.mixgrp = 1; item.num = 1; item.ratio = 0.1f; list.Add(item); } } item.def = DefDatabase <ThingDef> .GetNamed("MSSulphuricAcid", true); item.mixgrp = 2; item.num = 5; item.ratio = 1f; list.Add(item); } } } } return(list); }
// Token: 0x0600008E RID: 142 RVA: 0x00007A9C File Offset: 0x00005C9C private static void DoNotFoundGroupsOverlay(Building_MSDrugMix b, ThingDef def, int grp) { if (Find.CurrentMap == null || Find.CurrentMap != b.Map) { return; } var listRCP = MSDrugMixUtility.GetRCPList(def); var alerts = new List <ThingDef>(); if (listRCP.Count > 0) { foreach (var item in listRCP) { if (item.mixgrp == grp) { alerts.AddDistinct(item.def); } } } if (alerts.Count <= 0) { return; } var OutOfFuelMat = MaterialPool.MatFrom("UI/Overlays/OutOfFuel", ShaderDatabase.MetaOverlay); var i = 0; foreach (var alert in alerts) { if (!alert.defName.StartsWith("Chunk") || alert.defName.StartsWith("Chunk") && i < 1) { var mat = MaterialPool.MatFrom(alert.uiIcon, ShaderDatabase.MetaOverlay, Color.white); var BaseAlt = AltitudeLayer.WorldClipper.AltitudeFor(); if (mat != null) { var altInd = 21; var plane = MeshPool.plane08; var drawPos = b.TrueCenter(); drawPos.y = BaseAlt + (0.046875f * altInd); drawPos.x += i; drawPos.z += grp - 2; var num2 = ((float)Math.Sin( (Time.realtimeSinceStartup + (397f * (b.thingIDNumber % 571))) * 4f) + 1f) * 0.5f; num2 = 0.3f + (num2 * 0.7f); for (var j = 0; j < 2; j++) { var material = FadedMaterialPool.FadedVersionOf(j < 1 ? mat : OutOfFuelMat, num2); if (material != null) { Graphics.DrawMesh(plane, drawPos, Quaternion.identity, material, 0); } } } } i++; } }
// Token: 0x0600008F RID: 143 RVA: 0x00007CD8 File Offset: 0x00005ED8 public override IEnumerable <Gizmo> GetGizmos() { foreach (var gizmo in base.GetGizmos()) { yield return(gizmo); } if (Faction != Faction.OfPlayer) { yield break; } string SelectDesc = "MSDrugMix.ChemSelectDesc".Translate(); if (MixerThingDef == null) { string NoChem = "MSDrugMix.ChemSelect".Translate(); yield return(new Command_Action { defaultLabel = NoChem, icon = ContentFinder <Texture2D> .Get(chemicalTexPath), defaultDesc = SelectDesc, action = MSMixerSelectChem }); } else { var IconToUse = MSDrugMixUtility.GetMSMixIcon(MixerThingDef); var LabelDetail = MixerThingDef.label.CapitalizeFirst(); LabelDetail = string.Concat(LabelDetail, " [", NumProd, "] "); if (TotalProdWorkTicks > 0) { LabelDetail = LabelDetail + " (" + (int)((TotalProdWorkTicks - ProdWorkTicks) / (float)TotalProdWorkTicks * 100f) + "%)"; } yield return(new Command_Action { defaultLabel = LabelDetail, icon = IconToUse, defaultDesc = SelectDesc, action = MSMixerSelectChem }); } string LabelProduce = "MSDrugMix.Production".Translate(); string LabelProduceDesc = "MSDrugMix.ProductionDesc".Translate(); if (isProducing) { if (MixerThingDef != null) { if (MSDrugMixUtility.RCPProdValues(MixerThingDef, out _, out var minProd, out var maxProd, out _)) { LabelProduce += "MSDrugMix.ProdLabelRange".Translate(minProd.ToString(), maxProd.ToString()); } else { LabelProduce += "MSDrugMix.ProdLabelERR".Translate(); } } else { LabelProduce += "MSDrugMix.ProdNoChem".Translate(); } }
// Token: 0x0600008D RID: 141 RVA: 0x00007594 File Offset: 0x00005794 private bool ValidateRecipe(ThingDef t, out bool CanUseMax, out List <RCPItemCanUse> FinalList, out int MinProd, out int MaxProd, out int Ticks) { CanUseMax = true; FinalList = null; MinProd = 0; MaxProd = 0; Ticks = 0; if (debug && Find.TickManager.TicksGame % 100 == 0) { Log.Message("ValRep: " + t.defName); } if (!MSDrugMixUtility.RCPProdValues(t, out var ticks, out var minProd, out var maxProd, out var Res)) { return(false); } Ticks = ticks; MinProd = minProd; MaxProd = maxProd; if (debug) { Log.Message(string.Concat("RCPVals: Ticks: ", ticks.ToString(), " minProd: ", minProd.ToString(), " maxProd: ", maxProd.ToString(), " Res: ", Res)); } if (!ResearchProjectDef.Named(Res).IsFinished || minProd <= 0 || maxProd <= 0 || ticks <= 0) { if (!ResearchProjectDef.Named(Res).IsFinished) { Log.Message("MSDrugMix.ErrorRes".Translate(MixerThingDef.label)); isProducing = false; NumProd = 0; ProdWorkTicks = 0; TotalProdWorkTicks = 0; } else { Log.Message("MSDrugMix.ErrorRCP".Translate(MixerThingDef.label, ticks.ToString(), minProd.ToString(), maxProd.ToString())); isProducing = false; NumProd = 0; ProdWorkTicks = 0; TotalProdWorkTicks = 0; } return(false); } var listRCP = MSDrugMixUtility.GetRCPList(t); if (listRCP.Count <= 0) { if (debug) { Log.Message("RCP is False."); } return(false); } if (debug) { Log.Message("RCP Listings: " + listRCP.Count); } var RCPListPotentials = new List <RCPItemCanUse>(); var RCPGroups = new List <int>(); foreach (var listItem in listRCP) { var MaterialsMin = 0; var MaterialsMax = 0; var RCPItem = listItem; var RCPMinNumNeeded = (int)Math.Round(RCPItem.num * minProd * RCPItem.ratio); var RCPMaxNumNeeded = (int)Math.Round(RCPItem.num * maxProd * RCPItem.ratio); if (HasEnoughMaterialInHoppers(RCPItem.def, RCPMinNumNeeded, true)) { MaterialsMin = RCPMinNumNeeded; } if (HasEnoughMaterialInHoppers(RCPItem.def, RCPMaxNumNeeded, false)) { MaterialsMax = RCPMaxNumNeeded; } if (MaterialsMin > 0 || MaterialsMax > 0) { RCPListPotentials.Add(new RCPItemCanUse { def = RCPItem.def, Min = MaterialsMin, Max = MaterialsMax, Grp = RCPItem.mixgrp }); } if (!RCPGroups.Contains(RCPItem.mixgrp)) { RCPGroups.Add(RCPItem.mixgrp); } } if (debug) { Log.Message( "InnerRecipe List: Groups: " + RCPGroups.Count + " , Potentials: " + RCPListPotentials.Count); } FinalList = new List <RCPItemCanUse>(); var NotAllGroups = false; if (RCPGroups.Count > 0) { foreach (var grp in RCPGroups) { var foundGroup = false; if (RCPListPotentials.Count > 0) { RCPItemCanUse bestthingsofar = default; var best = false; var bestmax = false; foreach (var itemchk in RCPListPotentials) { if (itemchk.Grp != grp) { continue; } foundGroup = true; if (itemchk.Min <= 0) { continue; } if (itemchk.Max > 0) { if (bestmax) { continue; } bestthingsofar.def = itemchk.def; bestthingsofar.Min = itemchk.Min; bestthingsofar.Max = itemchk.Max; bestthingsofar.Grp = itemchk.Grp; best = true; bestmax = true; } else if (!best) { bestthingsofar.def = itemchk.def; bestthingsofar.Min = itemchk.Min; bestthingsofar.Max = itemchk.Max; bestthingsofar.Grp = itemchk.Grp; best = true; } } if (!bestmax) { bestthingsofar.Max = 0; } FinalList.Add(bestthingsofar); } if (foundGroup) { continue; } NotAllGroups = true; DoNotFoundGroupsOverlay(this, t, grp); } } if (FinalList.Count > 0) { for (var l = 0; l < FinalList.Count; l++) { if (FinalList[l].Max == 0) { CanUseMax = false; } } } if (NotAllGroups) { if (debug) { Log.Message("RCP is False. Not all inputs found"); } return(false); } if (debug) { Log.Message("RCP is True. with (" + FinalList.Count + ") final list items"); } return(true); }