private void AttachPort(GameObject go) { PortDisplayController controller = go.AddComponent <PortDisplayController>(); controller.Init(go); controller.AssignPort(go, outputPort0); controller.AssignPort(go, outputPort1); controller.AssignPort(go, inputPort0); controller.AssignPort(go, inputPort1); }
public static bool Prefix(BuildingCellVisualizer __instance, HashedString mode) { if (buildings.Contains(__instance.GetBuilding().Def.PrefabID)) { UnityEngine.GameObject go = __instance.GetBuilding().gameObject; PortDisplayController controller = go.GetComponent <PortDisplayController>(); if (controller != null) { return(controller.Draw(__instance, mode, go)); } } return(true); }
internal static PortDisplayOutput AddOilWell(GameObject go) { ApplyExhaust.AddOutput(go, new CellOffset(2, 1), SimHashes.CrudeOil); Element element = ElementLoader.GetElement(SimHashes.Methane.CreateTag()); Color32 color = element.substance.conduitColour; color.a = 255; PortDisplayOutput outputPort = new PortDisplayOutput(ConduitType.Gas, new CellOffset(1, 1), null, color); PortDisplayController controller = go.AddOrGet <PortDisplayController>(); controller.AssignPort(go, outputPort); return(outputPort); }
internal static PortDisplayOutput AddAlgaeHabitat(GameObject go) { ApplyExhaust.AddOutput(go, new CellOffset(0, 1), SimHashes.Oxygen); Element element = ElementLoader.GetElement(SimHashes.DirtyWater.CreateTag()); Color32 color = element.substance.conduitColour; color.a = 255; PortDisplayOutput outputPort = new PortDisplayOutput(ConduitType.Liquid, new CellOffset(0, 0), null, color); PortDisplayController controller = go.AddOrGet <PortDisplayController>(); controller.AssignPort(go, outputPort); return(outputPort); }
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); }