using System.Collections.Generic;
+using System.Linq;
using Content.Shared.Construction;
using Content.Shared.Construction.Prototypes;
using Robust.Client.Graphics;
public override void StartHijack(PlacementManager manager)
{
base.StartHijack(manager);
-
- var frame = _prototype?.Icon.DirFrame0();
- if (frame == null)
- {
- manager.CurrentTextures = null;
- }
- else
- {
- manager.CurrentTextures = new List<IDirectionalTextureProvider> {frame};
- }
+ manager.CurrentTextures = _prototype?.Layers.Select(sprite => sprite.DirFrame0()).ToList();
}
}
}
_ghosts.Add(comp.GhostId, comp);
var sprite = EntityManager.GetComponent<SpriteComponent>(ghost);
sprite.Color = new Color(48, 255, 48, 128);
- sprite.AddBlankLayer(0); // There is no way to actually check if this already exists, so we blindly insert a new one
- sprite.LayerSetSprite(0, prototype.Icon);
- sprite.LayerSetShader(0, "unshaded");
- sprite.LayerSetVisible(0, true);
+
+ for (int i = 0; i < prototype.Layers.Count; i++)
+ {
+ sprite.AddBlankLayer(i); // There is no way to actually check if this already exists, so we blindly insert a new one
+ sprite.LayerSetSprite(i, prototype.Layers[i]);
+ sprite.LayerSetShader(i, "unshaded");
+ sprite.LayerSetVisible(i, true);
+ }
if (prototype.CanBuildInImpassable)
EnsureComp<WallMountComponent>(ghost).Arc = new(Math.Tau);
[DataField("icon")]
public SpriteSpecifier Icon { get; } = SpriteSpecifier.Invalid;
+ /// <summary>
+ /// Texture paths used for the construction ghost.
+ /// </summary>
+ [DataField("layers")]
+ private List<SpriteSpecifier>? _layers;
+
/// <summary>
/// If you can start building or complete steps on impassable terrain.
/// </summary>
public bool CanRotate { get; } = true;
public IReadOnlyList<IConstructionCondition> Conditions => _conditions;
+ public IReadOnlyList<SpriteSpecifier> Layers => _layers ?? new List<SpriteSpecifier>{Icon};
}
public enum ConstructionType
icon:
sprite: Structures/Piping/Atmospherics/vent.rsi
state: vent_off
+ layers:
+ - sprite: Structures/Piping/Atmospherics/pipe.rsi
+ state: pipeHalf
+ - sprite: Structures/Piping/Atmospherics/vent.rsi
+ state: vent_off
conditions:
- !type:TileNotBlocked {}
icon:
sprite: Structures/Piping/Atmospherics/vent.rsi
state: vent_off
+ layers:
+ - sprite: Structures/Piping/Atmospherics/pipe.rsi
+ state: pipeHalf
+ - sprite: Structures/Piping/Atmospherics/vent.rsi
+ state: vent_off
conditions:
- !type:TileNotBlocked {}
icon:
sprite: Structures/Piping/Atmospherics/scrubber.rsi
state: scrub_off
+ layers:
+ - sprite: Structures/Piping/Atmospherics/pipe.rsi
+ state: pipeHalf
+ - sprite: Structures/Piping/Atmospherics/scrubber.rsi
+ state: scrub_off
conditions:
- !type:TileNotBlocked {}
icon:
sprite: Structures/Piping/Atmospherics/outletinjector.rsi
state: injector
+ layers:
+ - sprite: Structures/Piping/Atmospherics/pipe.rsi
+ state: pipeHalf
+ - sprite: Structures/Piping/Atmospherics/outletinjector.rsi
+ state: injector
conditions:
- !type:TileNotBlocked {}
icon:
sprite: Structures/Piping/Atmospherics/pump.rsi
state: pumpPressure
+ layers:
+ - sprite: Structures/Piping/Atmospherics/pipe.rsi
+ state: pipeStraight
+ - sprite: Structures/Piping/Atmospherics/pump.rsi
+ state: pumpPressure
conditions:
- !type:TileNotBlocked {}
icon:
sprite: Structures/Piping/Atmospherics/pump.rsi
state: pumpVolume
+ layers:
+ - sprite: Structures/Piping/Atmospherics/pipe.rsi
+ state: pipeStraight
+ - sprite: Structures/Piping/Atmospherics/pump.rsi
+ state: pumpVolume
conditions:
- !type:TileNotBlocked {}
icon:
sprite: Structures/Piping/Atmospherics/pump.rsi
state: pumpPassiveGate
+ layers:
+ - sprite: Structures/Piping/Atmospherics/pipe.rsi
+ state: pipeStraight
+ - sprite: Structures/Piping/Atmospherics/pump.rsi
+ state: pumpPassiveGate
conditions:
- !type:TileNotBlocked {}
icon:
sprite: Structures/Piping/Atmospherics/pump.rsi
state: pumpManualValve
+ layers:
+ - sprite: Structures/Piping/Atmospherics/pipe.rsi
+ state: pipeStraight
+ - sprite: Structures/Piping/Atmospherics/pump.rsi
+ state: pumpManualValve
conditions:
- !type:TileNotBlocked {}
icon:
sprite: Structures/Piping/Atmospherics/gascanisterport.rsi
state: gasCanisterPort
+ layers:
+ - sprite: Structures/Piping/Atmospherics/pipe.rsi
+ state: pipeHalf
+ - sprite: Structures/Piping/Atmospherics/gascanisterport.rsi
+ state: gasCanisterPort
conditions:
- !type:TileNotBlocked {}
icon:
sprite: Structures/Piping/Atmospherics/vent.rsi
state: vent_off
+ layers:
+ - sprite: Structures/Piping/Atmospherics/pipe.rsi
+ state: pipeStraight
+ - sprite: Structures/Piping/Atmospherics/vent.rsi
+ state: vent_off
conditions:
- !type:TileNotBlocked {}