6
2025-11-12 10:55:00 +03:00

75 lines
2.3 KiB
C#

using System.Linq;
using Content.Shared._EstacaoPirata.Cards.Card;
using Robust.Client.GameObjects;
using Robust.Shared.Utility;
namespace Content.Client._EstacaoPirata.Cards.Card;
/// <summary>
/// This handles...
/// </summary>
public sealed class CardSystem : EntitySystem
{
/// <inheritdoc/>
public override void Initialize()
{
SubscribeLocalEvent<CardComponent, ComponentStartup>(OnComponentStartupEvent);
SubscribeNetworkEvent<CardFlipUpdatedEvent>(OnFlip);
}
private void OnComponentStartupEvent(EntityUid uid, CardComponent comp, ComponentStartup args)
{
if (!TryComp(uid, out SpriteComponent? spriteComponent))
return;
for (var i = 0; i < spriteComponent.AllLayers.Count(); i++)
{
//Log.Debug($"Layer {i}");
if (!spriteComponent.TryGetLayer(i, out var layer) || layer.State.Name == null)
continue;
var rsi = layer.RSI ?? spriteComponent.BaseRSI;
if (rsi == null)
continue;
//Log.Debug("FOI");
comp.FrontSprite.Add(new SpriteSpecifier.Rsi(rsi.Path, layer.State.Name));
}
comp.BackSprite ??= comp.FrontSprite;
DirtyEntity(uid);
UpdateSprite(uid, comp);
}
private void OnFlip(CardFlipUpdatedEvent args)
{
if (!TryComp(GetEntity(args.Card), out CardComponent? comp))
return;
UpdateSprite(GetEntity(args.Card), comp);
}
private void UpdateSprite(EntityUid uid, CardComponent comp)
{
var newSprite = comp.Flipped ? comp.BackSprite : comp.FrontSprite;
if (!TryComp(uid, out SpriteComponent? spriteComponent))
return;
var layerCount = newSprite.Count();
//inserts Missing Layers
if (spriteComponent.AllLayers.Count() < layerCount)
for (var i = spriteComponent.AllLayers.Count(); i < layerCount; i++)
spriteComponent.AddBlankLayer(i);
//Removes extra layers
else if (spriteComponent.AllLayers.Count() > layerCount)
for (var i = spriteComponent.AllLayers.Count() - 1; i >= layerCount; i--)
spriteComponent.RemoveLayer(i);
for (var i = 0; i < newSprite.Count(); i++)
{
var layer = newSprite[i];
spriteComponent.LayerSetSprite(i, layer);
}
}
}