From 40d463f58cac5a2104f974ab04837e6d3c39a0eb Mon Sep 17 00:00:00 2001 From: Sn1p3rr3c0n Date: Mon, 5 Feb 2024 06:45:31 +0100 Subject: [PATCH] Only deactivates Output if they are used as an Input fixed GUI Input Dectection for Splitters --- .../AutoMachineTool/Building_BeltSplitter.cs | 24 ++++++++++++++++++- .../AutoMachineTool/ITab_ConveyorFilter.cs | 19 ++++----------- 2 files changed, 27 insertions(+), 16 deletions(-) diff --git a/Source/ProjectRimFactory/AutoMachineTool/Building_BeltSplitter.cs b/Source/ProjectRimFactory/AutoMachineTool/Building_BeltSplitter.cs index fa501b9db..75927b423 100644 --- a/Source/ProjectRimFactory/AutoMachineTool/Building_BeltSplitter.cs +++ b/Source/ProjectRimFactory/AutoMachineTool/Building_BeltSplitter.cs @@ -307,13 +307,35 @@ public override void Link(IBeltConveyorLinkable link) incomingLinks.Add(link); if (PositionToRot4(link, out Rot4 r)) { - if (outputLinks.TryGetValue(r, out OutputLink output)) + if (outputLinks.TryGetValue(r, out OutputLink output) && IsInputtingIntoThis(link, r)) { output.Active = false; } } } } + + + /// + /// Helper Function use to Check if a IBeltConveyorLinkable is acting as an Input for this building + /// + /// IBeltConveyorLinkable + /// Direction of the IBeltConveyorLinkable + /// True if link acts as an Input + public bool IsInputtingIntoThis(IBeltConveyorLinkable link, Rot4 r) + { + if (link is Building_BeltSplitter building_Belt) + { + building_Belt.outputLinks.TryGetValue(r.Opposite, out OutputLink output); + return output is not null && output.Active; + } + else + { + return link.Rotation.Opposite == r; + } + } + + // Utility fn for linking to belt link private bool PositionToRot4(IBeltConveyorLinkable link, out Rot4 r) { diff --git a/Source/ProjectRimFactory/AutoMachineTool/ITab_ConveyorFilter.cs b/Source/ProjectRimFactory/AutoMachineTool/ITab_ConveyorFilter.cs index 70b21ed89..4a9208e5c 100644 --- a/Source/ProjectRimFactory/AutoMachineTool/ITab_ConveyorFilter.cs +++ b/Source/ProjectRimFactory/AutoMachineTool/ITab_ConveyorFilter.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Linq; using UnityEngine; +using UnityEngine.UIElements; using Verse; using static ProjectRimFactory.AutoMachineTool.Ops; @@ -154,25 +155,13 @@ protected override void FillTab() } bool selref = selectedDir == dir; - bool isInput = false; + foreach (IBeltConveyorLinkable linkable in Splitter.IncomingLinks.Where(l => l.Position == (Splitter.Position + dir.FacingCell))) { - if ((linkable as Building_BeltConveyor) != null || (linkable as Building_BeltConveyorUGConnector) != null) - { - if (OppositeRot(linkable.Rotation) == dir) - { - isInput = true; - break; - } - } - else if ((linkable as Building_BeltSplitter) != null) - { - //Seperate Logic for splitters - if ((linkable as Building_BeltSplitter).OutputLinks.Keys.Contains(OppositeRot(dir)) && (linkable as Building_BeltSplitter).OutputLinks[OppositeRot(dir)].Active) isInput = true; - - } + isInput = Splitter.IsInputtingIntoThis(linkable, dir); + if (isInput) break; }