Fix pipe connection bug (#6753)

This commit is contained in:
Leon Friedrich
2022-02-18 10:31:23 +13:00
committed by GitHub
parent 3ba55d0798
commit 56b2041b12
3 changed files with 29 additions and 11 deletions

View File

@@ -61,6 +61,8 @@ namespace Content.Server.NodeContainer.EntitySystems
if (!node.NeedAnchored)
continue;
node.OnAnchorStateChanged(EntityManager, args.Anchored);
if (args.Anchored)
_nodeGroupSystem.QueueReflood(node);
else
@@ -75,14 +77,15 @@ namespace Content.Server.NodeContainer.EntitySystems
return;
}
var anchored = Transform(uid).Anchored;
var xform = Transform(uid);
foreach (var node in container.Nodes.Values)
{
if (node.NeedAnchored && !anchored)
if (node is not IRotatableNode rotatableNode)
continue;
if (node is not IRotatableNode rotatableNode)
// Don't bother updating nodes that can't even be connected to anything atm.
if (!node.Connectable(EntityManager, xform))
continue;
if (rotatableNode.RotateEvent(ref ev))

View File

@@ -52,12 +52,12 @@ namespace Content.Server.NodeContainer.Nodes
return xform.Anchored;
}
protected bool Anchored => !NeedAnchored || IoCManager.Resolve<IEntityManager>().GetComponent<TransformComponent>(Owner).Anchored;
[ViewVariables(VVAccess.ReadWrite)]
[DataField("needAnchored")]
public bool NeedAnchored { get; } = true;
public virtual void OnAnchorStateChanged(IEntityManager entityManager, bool anchored) { }
/// <summary>
/// Prevents a node from being used by other nodes while midway through removal.
/// </summary>

View File

@@ -133,14 +133,29 @@ namespace Content.Server.NodeContainer.Nodes
return false;
CurrentPipeDirection = _originalPipeDirection;
}
else
{
CurrentPipeDirection = _originalPipeDirection.RotatePipeDirection(ev.NewRotation);
return true;
}
// node connections need to be updated
return true;
var oldDirection = CurrentPipeDirection;
CurrentPipeDirection = _originalPipeDirection.RotatePipeDirection(ev.NewRotation);
return oldDirection != CurrentPipeDirection;
}
public override void OnAnchorStateChanged(IEntityManager entityManager, bool anchored)
{
if (!anchored)
return;
// update valid pipe directions
if (!RotationsEnabled)
{
CurrentPipeDirection = _originalPipeDirection;
return;
}
var xform = entityManager.GetComponent<TransformComponent>(Owner);
CurrentPipeDirection = _originalPipeDirection.RotatePipeDirection(xform.LocalRotation);
}
public override IEnumerable<Node> GetReachableNodes(TransformComponent xform,