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:
@@ -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)),
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user