protected override void OnDragTool(int cell, int distFromOrigin) { if (path.Count == 0) { return; } PathNode pathNode = path[path.Count - 1]; if (pathNode.cell == cell) { return; } placeSound = GlobalAssets.GetSound("Place_building_" + def.AudioSize, false); Vector3 pos = Grid.CellToPos(cell); EventInstance instance = SoundEvent.BeginOneShot(placeSound, pos); if (path.Count > 1) { int num = cell; PathNode pathNode2 = path[path.Count - 2]; if (num == pathNode2.cell) { if ((Object)previousCellConnection != (Object)null) { previousCellConnection.ConnectedEvent(previousCell); KMonoBehaviour.PlaySound(GlobalAssets.GetSound("OutletDisconnected", false)); previousCellConnection = null; } previousCell = cell; CheckForConnection(cell, def.PrefabID, string.Empty, ref previousCellConnection, false); PathNode pathNode3 = path[path.Count - 1]; Object.Destroy(pathNode3.visualizer); PathNode pathNode4 = path[path.Count - 1]; TileVisualizer.RefreshCell(pathNode4.cell, def.TileLayer, def.ReplacementLayer); path.RemoveAt(path.Count - 1); buildingCount = ((buildingCount != 1) ? (buildingCount - 1) : (buildingCount = 14)); instance.setParameterValue("tileCount", (float)buildingCount); SoundEvent.EndOneShot(instance); goto IL_029c; } } if (!path.Exists((PathNode n) => n.cell == cell)) { bool valid = CheckValidPathPiece(cell); path.Add(new PathNode { cell = cell, visualizer = null, valid = valid }); CheckForConnection(cell, def.PrefabID, "OutletConnected", ref previousCellConnection, true); buildingCount = buildingCount % 14 + 1; instance.setParameterValue("tileCount", (float)buildingCount); SoundEvent.EndOneShot(instance); } goto IL_029c; IL_029c: visualizer.SetActive(path.Count < 2); ResourceRemainingDisplayScreen.instance.SetNumberOfPendingConstructions(path.Count); }
public bool IconConnectionAnimation(float delay, int connectionCount, string defName, string soundName) { int num = Grid.PosToCell(base.transform.GetPosition()); if (this.building.Def.Name.Contains(defName)) { Building building = null; GameObject gameObject = Grid.Objects[num, 1]; if ((UnityEngine.Object)gameObject != (UnityEngine.Object)null) { building = gameObject.GetComponent <Building>(); } if ((UnityEngine.Object)building != (UnityEngine.Object)null) { bool flag = IsWire(); int num2 = (!flag) ? building.GetUtilityInputCell() : building.GetPowerInputCell(); int num3 = (!flag) ? building.GetUtilityOutputCell() : num2; if (num == num2 || num == num3) { BuildingCellVisualizer component = building.gameObject.GetComponent <BuildingCellVisualizer>(); if ((UnityEngine.Object)component != (UnityEngine.Object)null && ((!flag) ? component.RequiresUtilityConnection : component.RequiresPower)) { component.ConnectedEventWithDelay(delay, connectionCount, num, soundName); return(true); } } } } return(false); }
public static void Postfix(BuildingCellVisualizer __instance, HashedString mode) { var instance = Traverse.Create(__instance); var building = instance.Field("building").GetValue <Building>(); var secondaryOutput = building.Def.BuildingComplete.GetComponent <ISecondaryOutput>(); if (secondaryOutput == null) { return; } ConduitType secondaryConduitType = secondaryOutput.GetSecondaryConduitType(); if (secondaryConduitType != ConduitType.Solid) { return; } var resources = instance.Field("resources").GetValue <BuildingCellVisualizerResources>(); var iconsField = instance.Field("icons"); var icons = iconsField.GetValue <Dictionary <GameObject, UnityEngine.UI.Image> >(); var visualizerField = instance.Field("secondaryOutputVisualizer"); if (icons == null) { return; } var visualizer = visualizerField.GetValue <GameObject>(); if (visualizer == null) { visualizer = Util.KInstantiate(Assets.UIPrefabs.ResourceVisualizer, GameScreenManager.Instance.worldSpaceCanvas); visualizer.transform.SetAsFirstSibling(); icons.Add(visualizer, visualizer.transform.GetChild(0).GetComponent <UnityEngine.UI.Image>()); visualizerField.SetValue(visualizer); return; } if (mode != OverlayModes.SolidConveyor.ID || !building || !resources) { return; } var offset = secondaryOutput.GetSecondaryConduitOffset(); DrawUtilityIcon(ref icons, GetVisualizerCell(building, offset), resources.liquidOutputIcon, ref visualizer, BuildingCellVisualizer.secondOutputColour); visualizerField.SetValue(visualizer); iconsField.SetValue(icons); }
public static void Postfix(BuildingCellVisualizer __instance, int cell) { //ConduitIO port = MultiIOExtensions.GetPortAt(__instance.gameObject, cell); GameObject obj = Grid.Objects[cell, 1]; if (obj == null) { return; } MultiInput multiInput = obj.GetComponent <MultiInput>(); MultiOutput multiOut = obj.GetComponent <MultiOutput>(); ConduitIO port = null; port = multiInput?.GetPortAt(cell); if (port == null) { port = multiOut?.GetPortAt(cell); if (port == null) { return; } } if (port != null) { GameObject visualizer = port.CellVisualizer; SizePulse pulse = visualizer.AddComponent <SizePulse>(); pulse.speed = 20f; pulse.multiplier = 0.75f; pulse.updateWhenPaused = true; pulse.onComplete = (System.Action)Delegate.Combine(pulse.onComplete, (System.Action) delegate { UnityEngine.Object.Destroy(pulse); }); } }
private static void CallDrawUtilityIcon(BuildingCellVisualizer instance, int cell, Sprite icon, ref GameObject visualizer, Color tint, Color connectedColor) { object[] args = new object[7] { cell, icon, visualizer, tint, connectedColor, 1.5f, false }; DrawUtilityIconMethod.Invoke(instance, args); //So that the visualizer ref carries over visualizer = (GameObject)args[2]; }
internal static void DrawUtilityIcon(this BuildingCellVisualizer __instance, int cell, Sprite icon_img, ref GameObject visualizerObj, Color tint, Color connectorColor, float scaleMultiplier = 1.5f, bool hideBG = false) { var mi = typeof(BuildingCellVisualizer).GetMethods(BindingFlags.InvokeMethod | System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance) .Where(m => m.Name == "DrawUtilityIcon" && m.GetParameters().Length == 7).First(); if (mi != null) { var varlist = new object[] { cell, icon_img, visualizerObj, tint, connectorColor, scaleMultiplier, hideBG }; mi.Invoke(__instance, varlist); visualizerObj = varlist[2] as GameObject; } }
public static void Postfix(BuildingCellVisualizer __instance) { List <ConduitIO> ports = MultiIOExtensions.GetAllPortsFromObject(__instance.gameObject); foreach (ConduitIO outPort in ports) { GameObject visualizer = outPort.CellVisualizer; if (visualizer != null) { UnityEngine.Object.Destroy(visualizer); } } }
internal void Draw(GameObject obj, BuildingCellVisualizer visualizer, bool force) { Building building = visualizer.GetBuilding(); int utilityCell = building.GetCellWithOffset(building.Orientation == Orientation.Neutral ? this.offset : this.offsetFlipped); // redraw if anything changed if (force || utilityCell != this.lastUtilityCell || color != this.lastColor) { this.lastColor = color; this.lastUtilityCell = utilityCell; visualizer.DrawUtilityIcon(utilityCell, this.sprite, ref portObject, color, Color.white); } }
public static void Postfix(BuildingCellVisualizer __instance) { List <ConduitIO> ports = MultiIOExtensions.GetAllPortsFromObject(__instance.gameObject); foreach (ConduitIO port in ports) { GameObject visualizer = port.CellVisualizer; if (visualizer != null) { visualizer.SetActive(false); } } }
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); }
public static void Postfix(BuildingCellVisualizer __instance, int cell) { ConduitIO port = MultiIOExtensions.GetPortAt(__instance.gameObject, cell); if (port != null) { GameObject visualizer = port.CellVisualizer; SizePulse pulse = visualizer.AddComponent <SizePulse>(); pulse.speed = 20f; pulse.multiplier = 0.75f; pulse.updateWhenPaused = true; pulse.onComplete = (System.Action)Delegate.Combine(pulse.onComplete, (System.Action) delegate { UnityEngine.Object.Destroy(pulse); }); } }
public bool Draw(BuildingCellVisualizer __instance, HashedString mode, GameObject go) { bool isNewMode = mode != this.lastMode; if (isNewMode) { this.ClearPorts(); this.lastMode = mode; } foreach (PortDisplay2 port in this.GetPorts(mode)) { port.Draw(go, __instance, isNewMode); } return(true); }
public static void Postfix(HashedString mode, BuildingCellVisualizer __instance, Building ___building, BuildingCellVisualizerResources ___resources) { List <ConduitIO> ports = MultiIOExtensions.GetAllPortsFromObject(___building.gameObject); Sprite outputIcon = ___resources.gasOutputIcon; Sprite inputIcon = ___resources.gasInputIcon; if (OverlayModes.GasConduits.ID == mode) { foreach (ConduitIO port in ports) { if (port.ConduitType == ConduitType.Gas) { CellOffset offset = port.CellOffset; int cell = Grid.OffsetCell(___building.GetCell(), ___building.GetRotatedOffset(offset)); CallDrawUtilityIcon(__instance, cell, port is InputPort ? inputIcon : outputIcon, ref port.CellVisualizer, port.IconColor, Color.white); } } } else if (OverlayModes.LiquidConduits.ID == mode) { foreach (ConduitIO port in ports) { if (port.ConduitType == ConduitType.Liquid) { CellOffset offset = port.CellOffset; int cell = Grid.OffsetCell(___building.GetCell(), ___building.GetRotatedOffset(offset)); CallDrawUtilityIcon(__instance, cell, port is InputPort ? inputIcon : outputIcon, ref port.CellVisualizer, port.IconColor, Color.white); } } } else if (OverlayModes.SolidConveyor.ID == mode) { foreach (ConduitIO port in ports) { if (port.ConduitType == ConduitType.Solid) { CellOffset offset = port.CellOffset; int cell = Grid.OffsetCell(___building.GetCell(), ___building.GetRotatedOffset(offset)); CallDrawUtilityIcon(__instance, cell, port is InputPort ? inputIcon : outputIcon, ref port.CellVisualizer, port.IconColor, Color.white); } } } }
public static void Postfix(BuildingCellVisualizer __instance, HashedString mode) { Traverse traverse1 = Traverse.Create((object)__instance); Building building = traverse1.Field("building").GetValue <Building>(); ISecondaryOutput component = building.Def.BuildingComplete.GetComponent <ISecondaryOutput>(); if (component == null || component.GetSecondaryConduitType() != ConduitType.Solid) { return; } BuildingCellVisualizerResources visualizerResources = traverse1.Field("resources").GetValue <BuildingCellVisualizerResources>(); Traverse traverse2 = traverse1.Field("icons"); Dictionary <GameObject, Image> icons = traverse2.GetValue <Dictionary <GameObject, Image> >(); Traverse traverse3 = traverse1.Field("secondaryOutputVisualizer"); if (icons == null) { return; } GameObject visualizerObj = traverse3.GetValue <GameObject>(); if ((UnityEngine.Object)visualizerObj == (UnityEngine.Object)null) { GameObject key = Util.KInstantiate(Assets.UIPrefabs.ResourceVisualizer, GameScreenManager.Instance.worldSpaceCanvas, (string)null); key.transform.SetAsFirstSibling(); icons.Add(key, key.transform.GetChild(0).GetComponent <Image>()); traverse3.SetValue((object)key); } else { if (mode != OverlayModes.SolidConveyor.ID || !(bool)((UnityEngine.Object)building) || !(bool)((UnityEngine.Object)visualizerResources)) { return; } CellOffset secondaryConduitOffset = component.GetSecondaryConduitOffset(); InfiniteSourceSinkPatches.Db_Initialize_Patch.DrawUtilityIcon(ref icons, InfiniteSourceSinkPatches.Db_Initialize_Patch.GetVisualizerCell(building, secondaryConduitOffset), visualizerResources.liquidOutputIcon, ref visualizerObj, (Color)BuildingCellVisualizer.secondOutputColour); traverse3.SetValue((object)visualizerObj); traverse2.SetValue((object)icons); } }
public static void Postfix(int cell, string defName, string soundName, bool fireEvents, ref bool __result) { //Only need to patch if the result was false and a pipe is being checked (liquid/gas) if (__result) { return; } if (!defName.Contains("Conduit")) { return; } Building building = Grid.Objects[cell, 1]?.GetComponent <Building>(); if (building == null) { return; } ConduitIO port = MultiIOExtensions.GetPortAt(building.gameObject, cell); if (port == null) { return; } ConduitType type = port.ConduitType; string nameCheck = ""; if (type == ConduitType.Gas) { nameCheck = "Gas"; } else if (type == ConduitType.Liquid) { nameCheck = "Liquid"; } else if (type == ConduitType.Solid) { nameCheck = "Solid"; } if (nameCheck == "" || !defName.Contains(nameCheck)) { return; } BuildingCellVisualizer bcv = building.GetComponent <BuildingCellVisualizer>(); if (bcv != null) { if (fireEvents) { bcv.ConnectedEvent(cell); string sound = GlobalAssets.GetSound(soundName); if (sound != null) { KMonoBehaviour.PlaySound(sound); } } __result = true; } }
internal static Building GetBuilding(this BuildingCellVisualizer __instance) { return(ReadPrivate.Get(typeof(BuildingCellVisualizer), __instance, "building") as Building); }
private bool CheckForConnection(int cell, string defName, string soundName, ref BuildingCellVisualizer outBcv, bool fireEvents = true) { outBcv = null; DebugUtil.Assert(defName != null, "defName was null"); Building building = GetBuilding(cell); if (!(bool)building) { return(false); } DebugUtil.Assert(building.gameObject, "targetBuilding.gameObject was null"); int num = -1; int num2 = -1; int num3 = -1; if (defName.Contains("LogicWire")) { LogicPorts component = building.gameObject.GetComponent <LogicPorts>(); if ((Object)component != (Object)null) { if (component.inputPorts != null) { foreach (ILogicUIElement inputPort in component.inputPorts) { DebugUtil.Assert(inputPort != null, "input port was null"); if (inputPort.GetLogicUICell() == cell) { num = cell; break; } } } if (num == -1 && component.outputPorts != null) { foreach (ILogicUIElement outputPort in component.outputPorts) { DebugUtil.Assert(outputPort != null, "output port was null"); if (outputPort.GetLogicUICell() == cell) { num2 = cell; break; } } } } } else if (defName.Contains("Wire")) { num = building.GetPowerInputCell(); num2 = building.GetPowerOutputCell(); } else if (defName.Contains("Liquid")) { if (building.Def.InputConduitType == ConduitType.Liquid) { num = building.GetUtilityInputCell(); } if (building.Def.OutputConduitType == ConduitType.Liquid) { num2 = building.GetUtilityOutputCell(); } ElementFilter component2 = building.GetComponent <ElementFilter>(); if ((Object)component2 != (Object)null) { DebugUtil.Assert(component2.portInfo != null, "elementFilter.portInfo was null A"); if (component2.portInfo.conduitType == ConduitType.Liquid) { num3 = component2.GetFilteredCell(); } } } else if (defName.Contains("Gas")) { if (building.Def.InputConduitType == ConduitType.Gas) { num = building.GetUtilityInputCell(); } if (building.Def.OutputConduitType == ConduitType.Gas) { num2 = building.GetUtilityOutputCell(); } ElementFilter component3 = building.GetComponent <ElementFilter>(); if ((Object)component3 != (Object)null) { DebugUtil.Assert(component3.portInfo != null, "elementFilter.portInfo was null B"); if (component3.portInfo.conduitType == ConduitType.Gas) { num3 = component3.GetFilteredCell(); } } } if (cell == num || cell == num2 || cell == num3) { BuildingCellVisualizer buildingCellVisualizer = outBcv = building.gameObject.GetComponent <BuildingCellVisualizer>(); if (((Object)buildingCellVisualizer != (Object)null) ? true : false) { if (fireEvents) { buildingCellVisualizer.ConnectedEvent(cell); string sound = GlobalAssets.GetSound(soundName, false); if (sound != null) { KMonoBehaviour.PlaySound(sound); } } return(true); } } outBcv = null; return(false); }