diff --git a/Source/ProjectRimFactory/AutoMachineTool/Building_BeltSplitter.cs b/Source/ProjectRimFactory/AutoMachineTool/Building_BeltSplitter.cs
index fa501b9d..75927b42 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 70b21ed8..4a9208e5 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;
}