Injector sprite fix (#9011)

This commit is contained in:
Leon Friedrich
2022-07-09 21:59:39 +12:00
committed by GitHub
parent 029924e163
commit 65408f63d4
5 changed files with 28 additions and 11 deletions

View File

@@ -53,16 +53,19 @@ public sealed class SubFloorHideSystem : SharedSubFloorHideSystem
} }
// Is there some layer that is always visible? // Is there some layer that is always visible?
if (args.Sprite.LayerMapTryGet(SubfloorLayers.FirstLayer, out var firstLayer)) var hasVisibleLayer = false;
foreach (var layerKey in component.VisibleLayers)
{ {
var layer = args.Sprite[firstLayer]; if (!args.Sprite.LayerMapTryGet(layerKey, out var layerIndex))
continue;
var layer = args.Sprite[layerIndex];
layer.Visible = true; layer.Visible = true;
layer.Color = layer.Color.WithAlpha(1f); layer.Color = layer.Color.WithAlpha(1f);
args.Sprite.Visible = true; hasVisibleLayer = true;
return;
} }
args.Sprite.Visible = revealed; args.Sprite.Visible = hasVisibleLayer || revealed;
} }
private void UpdateAll() private void UpdateAll()
@@ -73,8 +76,3 @@ public sealed class SubFloorHideSystem : SharedSubFloorHideSystem
} }
} }
} }
public enum SubfloorLayers : byte
{
FirstLayer, // always visible. E.g. vent part of a vent..
}

View File

@@ -184,4 +184,9 @@ namespace Content.Shared.SubFloor
Covered, // is there a floor tile over this entity Covered, // is there a floor tile over this entity
ScannerRevealed, // is this entity revealed by a scanner or some other entity? ScannerRevealed, // is this entity revealed by a scanner or some other entity?
} }
public enum SubfloorLayers : byte
{
FirstLayer
}
} }

View File

@@ -1,4 +1,6 @@
using Robust.Shared.GameStates; using Robust.Shared.GameStates;
using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom;
using Robust.Shared.Serialization.TypeSerializers.Implementations.Generic;
namespace Content.Shared.SubFloor namespace Content.Shared.SubFloor
{ {
@@ -43,6 +45,13 @@ namespace Content.Shared.SubFloor
[DataField("scannerTransparency")] [DataField("scannerTransparency")]
public float ScannerTransparency = 0.8f; public float ScannerTransparency = 0.8f;
/// <summary>
/// Sprite layer keys for the layers that are always visible, even if the entity is below a floor tile. E.g.,
/// the vent part of a vent is always visible, even though the piping is hidden.
/// </summary>
[DataField("visibleLayers", customTypeSerializer:typeof(CustomHashSetSerializer<object, AppearanceKeySerializer>))]
public HashSet<object> VisibleLayers = new() { SubfloorLayers.FirstLayer };
/// <summary> /// <summary>
/// The entities this subfloor is revealed by. /// The entities this subfloor is revealed by.
/// </summary> /// </summary>

View File

@@ -158,8 +158,9 @@
layers: layers:
- state: pipeHalf - state: pipeHalf
sprite: Structures/Piping/Atmospherics/pipe.rsi sprite: Structures/Piping/Atmospherics/pipe.rsi
map: [ "enum.PipeVisualLayers.Pipe", "enum.SubfloorLayers.FirstLayer" ] map: [ "enum.PipeVisualLayers.Pipe" ]
- state: injector - state: injector
map: [ "enum.SubfloorLayers.FirstLayer" ]
- state: injector-unshaded - state: injector-unshaded
shader: unshaded shader: unshaded
map: [ "unshaded" ] map: [ "unshaded" ]
@@ -177,6 +178,10 @@
- type: Construction - type: Construction
graph: GasUnary graph: GasUnary
node: outletinjector node: outletinjector
- type: SubFloorHide
visibleLayers:
- enum.SubfloorLayers.FirstLayer
- unshaded
- type: entity - type: entity
parent: BaseMachinePowered parent: BaseMachinePowered

Binary file not shown.

Before

Width:  |  Height:  |  Size: 906 B

After

Width:  |  Height:  |  Size: 4.5 KiB