Add layers field to construction prototype (#14222)

This commit is contained in:
08A
2023-03-04 21:31:46 +01:00
committed by GitHub
parent 82cc8a389a
commit 83d4a787ee
4 changed files with 67 additions and 14 deletions

View File

@@ -1,4 +1,5 @@
using System.Collections.Generic;
using System.Linq;
using Content.Shared.Construction;
using Content.Shared.Construction.Prototypes;
using Robust.Client.Graphics;
@@ -49,16 +50,7 @@ namespace Content.Client.Construction
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();
}
}
}

View File

@@ -179,10 +179,14 @@ namespace Content.Client.Construction
_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);