Layering for atmospheric pipes (#36124)
Co-authored-by: ArtisticRoomba <145879011+ArtisticRoomba@users.noreply.github.com> Co-authored-by: Kevin Zheng <kevinz5000@gmail.com>
This commit is contained in:
@@ -282,16 +282,11 @@ public sealed class AtmosMonitoringConsoleSystem : SharedAtmosMonitoringConsoleS
|
||||
return false;
|
||||
|
||||
var direction = xform.LocalRotation.GetCardinalDir();
|
||||
var netId = TryGettingFirstPipeNode(uid, out var _, out var firstNetId) ? firstNetId : -1;
|
||||
var color = TryComp<AtmosPipeColorComponent>(uid, out var atmosPipeColor) ? atmosPipeColor.Color : Color.White;
|
||||
var layer = TryComp<AtmosPipeLayersComponent>(uid, out var atmosPipeLayers) ? atmosPipeLayers.CurrentPipeLayer : AtmosPipeLayer.Primary;
|
||||
|
||||
if (!TryGettingFirstPipeNode(uid, out var _, out var netId))
|
||||
netId = -1;
|
||||
|
||||
var color = Color.White;
|
||||
|
||||
if (TryComp<AtmosPipeColorComponent>(uid, out var atmosPipeColor))
|
||||
color = atmosPipeColor.Color;
|
||||
|
||||
device = new AtmosDeviceNavMapData(GetNetEntity(uid), GetNetCoordinates(xform.Coordinates), netId.Value, component.NavMapBlip.Value, direction, color);
|
||||
device = new AtmosDeviceNavMapData(GetNetEntity(uid), GetNetCoordinates(xform.Coordinates), netId.Value, component.NavMapBlip.Value, direction, color, layer);
|
||||
|
||||
return true;
|
||||
}
|
||||
@@ -371,7 +366,9 @@ public sealed class AtmosMonitoringConsoleSystem : SharedAtmosMonitoringConsoleS
|
||||
if (!TryComp<NodeContainerComponent>(ent, out var entNodeContainer))
|
||||
continue;
|
||||
|
||||
UpdateAtmosPipeChunk(ent, entNodeContainer, entAtmosPipeColor, tileIdx, ref chunk);
|
||||
var showAbsentConnections = TryComp<AtmosMonitoringConsoleDeviceComponent>(ent, out var device) ? device.ShowAbsentConnections : true;
|
||||
|
||||
UpdateAtmosPipeChunk(ent, entNodeContainer, entAtmosPipeColor, tileIdx, ref chunk, showAbsentConnections);
|
||||
}
|
||||
|
||||
// Add or update the chunk on the associated grid
|
||||
@@ -393,7 +390,13 @@ public sealed class AtmosMonitoringConsoleSystem : SharedAtmosMonitoringConsoleS
|
||||
}
|
||||
}
|
||||
|
||||
private void UpdateAtmosPipeChunk(EntityUid uid, NodeContainerComponent nodeContainer, AtmosPipeColorComponent pipeColor, int tileIdx, ref AtmosPipeChunk chunk)
|
||||
private void UpdateAtmosPipeChunk
|
||||
(EntityUid uid,
|
||||
NodeContainerComponent nodeContainer,
|
||||
AtmosPipeColorComponent pipeColor,
|
||||
int tileIdx,
|
||||
ref AtmosPipeChunk chunk,
|
||||
bool showAbsentConnections = true)
|
||||
{
|
||||
// Entities that are actively being deleted are not to be drawn
|
||||
if (MetaData(uid).EntityLifeStage >= EntityLifeStage.Terminating)
|
||||
@@ -401,16 +404,19 @@ public sealed class AtmosMonitoringConsoleSystem : SharedAtmosMonitoringConsoleS
|
||||
|
||||
foreach ((var id, var node) in nodeContainer.Nodes)
|
||||
{
|
||||
if (node is not PipeNode)
|
||||
if (node is not PipeNode { } pipeNode)
|
||||
continue;
|
||||
|
||||
if (!showAbsentConnections && !pipeNode.ReachableNodes.Any(x => x.Owner != uid))
|
||||
continue;
|
||||
|
||||
var pipeNode = (PipeNode)node;
|
||||
var netId = GetPipeNodeNetId(pipeNode);
|
||||
var subnet = new AtmosMonitoringConsoleSubnet(netId, pipeNode.CurrentPipeLayer, pipeColor.Color.ToHex());
|
||||
var pipeDirection = pipeNode.CurrentPipeDirection;
|
||||
|
||||
chunk.AtmosPipeData.TryGetValue((netId, pipeColor.Color.ToHex()), out var atmosPipeData);
|
||||
chunk.AtmosPipeData.TryGetValue(subnet, out var atmosPipeData);
|
||||
atmosPipeData |= (ulong)pipeDirection << tileIdx * SharedNavMapSystem.Directions;
|
||||
chunk.AtmosPipeData[(netId, pipeColor.Color.ToHex())] = atmosPipeData;
|
||||
chunk.AtmosPipeData[subnet] = atmosPipeData;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user