Pipe prototypes (#2124)

* Pipe prototypes

* PipeDirection setter

* IRotatableNode

* NodeContainer passes rotation events to its nodes

* Removes duplicate pipe prototypes that are rotations of each other

* PipeDirectionHelpers

* PipeNode rotation

* icon removal

* Pipe icons

* Icon fix

* Fixes pipe sprites and icons

Co-authored-by: py01 <pyronetics01@gmail.com>
This commit is contained in:
py01
2020-10-08 09:53:56 -06:00
committed by GitHub
parent 621a39016f
commit 970f3bc82f
47 changed files with 278 additions and 296 deletions

View File

@@ -1,4 +1,5 @@
using System;
using Robust.Shared.Maths;
using Robust.Shared.Serialization;
namespace Content.Shared.GameObjects.Components.Atmos
@@ -9,17 +10,6 @@ namespace Content.Shared.GameObjects.Components.Atmos
VisualState
}
[Serializable, NetSerializable]
public class PipeVisualStateSet
{
public readonly PipeVisualState[] PipeVisualStates;
public PipeVisualStateSet(PipeVisualState[] pipeVisualStates)
{
PipeVisualStates = pipeVisualStates;
}
}
[Serializable, NetSerializable]
public class PipeVisualState
{
@@ -65,10 +55,94 @@ namespace Content.Shared.GameObjects.Components.Atmos
All = -1,
}
public enum PipeShape
{
Straight,
Bend,
TJunction,
Fourway
}
public enum ConduitLayer
{
One = 1,
Two = 2,
Three = 3,
}
public static class PipeDirectionHelpers
{
public const int PipeDirections = 4;
public static Angle ToAngle(this PipeDirection pipeDirection)
{
return pipeDirection switch
{
PipeDirection.East => Angle.FromDegrees(0),
PipeDirection.North => Angle.FromDegrees(90),
PipeDirection.West => Angle.FromDegrees(180),
PipeDirection.South => Angle.FromDegrees(270),
_ => throw new ArgumentOutOfRangeException(nameof(pipeDirection), $"{pipeDirection} does not have an associated angle."),
};
}
public static PipeDirection ToPipeDirection(this Direction direction)
{
return direction switch
{
Direction.North => PipeDirection.North,
Direction.South => PipeDirection.South,
Direction.East => PipeDirection.East,
Direction.West => PipeDirection.West,
_ => throw new ArgumentOutOfRangeException(nameof(direction)),
};
}
public static Direction ToDirection(this PipeDirection pipeDirection)
{
return pipeDirection switch
{
PipeDirection.North => Direction.North,
PipeDirection.South => Direction.South,
PipeDirection.East => Direction.East,
PipeDirection.West => Direction.West,
_ => throw new ArgumentOutOfRangeException(nameof(pipeDirection)),
};
}
public static PipeDirection GetOpposite(this PipeDirection pipeDirection)
{
return pipeDirection switch
{
PipeDirection.North => PipeDirection.South,
PipeDirection.South => PipeDirection.North,
PipeDirection.East => PipeDirection.West,
PipeDirection.West => PipeDirection.East,
_ => throw new ArgumentOutOfRangeException(nameof(pipeDirection)),
};
}
public static PipeShape PipeDirectionToPipeShape(this PipeDirection pipeDirection)
{
return pipeDirection switch
{
PipeDirection.Lateral => PipeShape.Straight,
PipeDirection.Longitudinal => PipeShape.Straight,
PipeDirection.NEBend => PipeShape.Bend,
PipeDirection.NWBend => PipeShape.Bend,
PipeDirection.SEBend => PipeShape.Bend,
PipeDirection.SWBend => PipeShape.Bend,
PipeDirection.TNorth => PipeShape.TJunction,
PipeDirection.TSouth => PipeShape.TJunction,
PipeDirection.TEast => PipeShape.TJunction,
PipeDirection.TWest => PipeShape.TJunction,
PipeDirection.Fourway => PipeShape.Fourway,
_ => throw new ArgumentOutOfRangeException(nameof(pipeDirection)),
};
}
}
}