private void ConfigurePollutedWaterOutput() { Storage storage = null; Tag tag = ElementLoader.FindElementByHash(SimHashes.DirtyWater).tag; Storage[] components = GetComponents <Storage>(); foreach (Storage storage2 in components) { if (storage2.storageFilters.Contains(tag)) { storage = storage2; break; } } ElementConverter[] components2 = GetComponents <ElementConverter>(); foreach (ElementConverter elementConverter in components2) { ElementConverter.OutputElement[] outputElements = elementConverter.outputElements; for (int k = 0; k < outputElements.Length; k++) { ElementConverter.OutputElement outputElement = outputElements[k]; if (outputElement.elementHash == SimHashes.DirtyWater) { elementConverter.SetStorage(storage); break; } } } pollutedWaterStorage = storage; }
public static void Postfix(WaterPurifierConfig __instance, ref GameObject go) { Debug.Log("=============== Water Purifier Changed ======================="); ElementConverter elementConverter = go.AddOrGet <ElementConverter>(); //ElementConverter.OutputElement[] oldOutputElements = elementConverter.outputElements; ElementConverter.OutputElement[] newOutputElements; newOutputElements = new ElementConverter.OutputElement[] { new ElementConverter.OutputElement(5f, SimHashes.Water, 0f, true, 0f, 0.5f, true, 0.75f, 255, 0), new ElementConverter.OutputElement(0.2f, SimHashes.ToxicSand, 0f, true, 0f, 0.5f, true, 0.25f, 255, 0) }; elementConverter.outputElements = newOutputElements; //elementConverter = go.AddOrGet<ElementConverter>(); //checkNewElements = elementConverter.outputElements; //Debug.Log("Total elements: " + checkNewElements.Count().ToString()); //foreach (var item in checkNewElements) //Debug.Log("outputElements: " + item.element.id.ToString()); Debug.Log("=================== END ======================"); }
internal static PortDisplayOutput AddOutput(GameObject go, CellOffset offset, SimHashes elementHash) { Element element = ElementLoader.GetElement(elementHash.CreateTag()); ConduitType conduitType = element.IsGas ? ConduitType.Gas : element.IsLiquid ? ConduitType.Liquid : ConduitType.Solid; // port color Color32 color = element.substance.conduitColour; color.a = 255; // for some reason the alpha channel is set to invisible for some elements (hydrogen only?) if (color.r == 0 && color.g == 0 && color.b == 0) { // avoid completely black icons since the background is black color.r = 25; color.g = 25; color.b = 25; } PortDisplayOutput outputPort = new PortDisplayOutput(conduitType, offset, null, color); PortDisplayController controller = go.AddOrGet <PortDisplayController>(); controller.Init(go); controller.AssignPort(go, outputPort); ElementConverter converter = go.GetComponent <ElementConverter>(); if (converter != null) { for (int i = 0; i < converter.outputElements.Length; ++i) { ElementConverter.OutputElement item = converter.outputElements[i]; if (item.elementHash == elementHash) { converter.outputElements[i].storeOutput = true; PipedDispenser dispenser = go.AddComponent <PipedDispenser>(); dispenser.elementFilter = new SimHashes[] { elementHash }; dispenser.AssignPort(outputPort); dispenser.alwaysDispense = true; dispenser.SkipSetOperational = true; PipedOptionalExhaust exhaust = go.AddComponent <PipedOptionalExhaust>(); exhaust.dispenser = dispenser; exhaust.elementHash = elementHash; exhaust.elementTag = elementHash.CreateTag(); exhaust.capacity = item.massGenerationRate * converter.OutputMultiplier * 5; break; } } } else { EnergyGenerator energyGenerator = go.GetComponent <EnergyGenerator>(); if (energyGenerator != null) { for (int i = 0; i < energyGenerator.formula.outputs.Length; ++i) { EnergyGenerator.OutputItem item = energyGenerator.formula.outputs[i]; if (item.element == elementHash) { energyGenerator.formula.outputs[i].store = true; PipedDispenser dispenser = go.AddComponent <PipedDispenser>(); dispenser.elementFilter = new SimHashes[] { elementHash }; dispenser.AssignPort(outputPort); dispenser.alwaysDispense = true; dispenser.SkipSetOperational = true; PipedOptionalExhaust exhaust = go.AddComponent <PipedOptionalExhaust>(); exhaust.dispenser = dispenser; exhaust.elementHash = elementHash; exhaust.elementTag = elementHash.CreateTag(); exhaust.capacity = item.creationRate * 5; break; } } } } return(outputPort); }