Fix pipe rotation. (#4939)

This commit is contained in:
20kdc
2021-10-18 12:42:30 +01:00
committed by GitHub
parent 1b84ee05ae
commit 1a4316c4cc

View File

@@ -25,11 +25,16 @@ namespace Content.Server.NodeContainer.Nodes
/// <summary> /// <summary>
/// The directions in which this pipe can connect to other pipes around it. /// The directions in which this pipe can connect to other pipes around it.
/// Used to check if this pipe can connect to another pipe in a given direction.
/// </summary> /// </summary>
[ViewVariables] [ViewVariables]
[DataField("pipeDirection")] [DataField("pipeDirection")]
public PipeDirection PipeDirection { get; private set; } private PipeDirection _originalPipeDirection;
/// <summary>
/// The *current* pipe directions (accounting for rotation)
/// Used to check if this pipe can connect to another pipe in a given direction.
/// </summary>
public PipeDirection CurrentPipeDirection { get; private set; }
/// <summary> /// <summary>
/// The directions in which this node is connected to other nodes. /// The directions in which this node is connected to other nodes.
@@ -103,8 +108,6 @@ namespace Content.Server.NodeContainer.Nodes
public override void OnContainerStartup() public override void OnContainerStartup()
{ {
base.OnContainerStartup(); base.OnContainerStartup();
//HACK: THIS LINE RIGHT HERE IS A FILTHY HACK AND I HATE IT --moony
PipeDirection = PipeDirection.RotatePipeDirection(Owner.Transform.LocalRotation);
OnConnectedDirectionsNeedsUpdating(); OnConnectedDirectionsNeedsUpdating();
} }
@@ -124,9 +127,6 @@ namespace Content.Server.NodeContainer.Nodes
/// </summary> /// </summary>
void IRotatableNode.RotateEvent(ref RotateEvent ev) void IRotatableNode.RotateEvent(ref RotateEvent ev)
{ {
if (!RotationsEnabled) return;
var diff = ev.NewRotation - ev.OldRotation;
PipeDirection = PipeDirection.RotatePipeDirection(diff);
OnConnectedDirectionsNeedsUpdating(); OnConnectedDirectionsNeedsUpdating();
UpdateAppearance(); UpdateAppearance();
} }
@@ -137,7 +137,7 @@ namespace Content.Server.NodeContainer.Nodes
{ {
var pipeDir = (PipeDirection) (1 << i); var pipeDir = (PipeDirection) (1 << i);
if (!PipeDirection.HasDirection(pipeDir)) if (!CurrentPipeDirection.HasDirection(pipeDir))
continue; continue;
foreach (var pipe in LinkableNodesInDirection(pipeDir)) foreach (var pipe in LinkableNodesInDirection(pipeDir))
@@ -157,7 +157,7 @@ namespace Content.Server.NodeContainer.Nodes
foreach (var pipe in PipesInDirection(pipeDir)) foreach (var pipe in PipesInDirection(pipeDir))
{ {
if (pipe.ConnectionsEnabled && pipe.PipeDirection.HasDirection(pipeDir.GetOpposite())) if (pipe.ConnectionsEnabled && pipe.CurrentPipeDirection.HasDirection(pipeDir.GetOpposite()))
yield return pipe; yield return pipe;
} }
} }
@@ -210,9 +210,18 @@ namespace Content.Server.NodeContainer.Nodes
/// <summary> /// <summary>
/// Updates the <see cref="ConnectedDirections"/> of this and all sorrounding pipes. /// Updates the <see cref="ConnectedDirections"/> of this and all sorrounding pipes.
/// Also updates CurrentPipeDirection.
/// </summary> /// </summary>
private void OnConnectedDirectionsNeedsUpdating() private void OnConnectedDirectionsNeedsUpdating()
{ {
if (RotationsEnabled)
{
CurrentPipeDirection = _originalPipeDirection.RotatePipeDirection(Owner.Transform.LocalRotation);
}
else
{
CurrentPipeDirection = _originalPipeDirection;
}
UpdateConnectedDirections(); UpdateConnectedDirections();
UpdateAdjacentConnectedDirections(); UpdateAdjacentConnectedDirections();
UpdateAppearance(); UpdateAppearance();
@@ -229,7 +238,7 @@ namespace Content.Server.NodeContainer.Nodes
{ {
var pipeDir = (PipeDirection) (1 << i); var pipeDir = (PipeDirection) (1 << i);
if (!PipeDirection.HasDirection(pipeDir)) if (!CurrentPipeDirection.HasDirection(pipeDir))
continue; continue;
foreach (var pipe in LinkableNodesInDirection(pipeDir)) foreach (var pipe in LinkableNodesInDirection(pipeDir))