Files
tbd-station-14/Content.Client/Window/WindowVisualizer.cs
2021-10-17 23:18:29 -07:00

57 lines
1.7 KiB
C#

using System;
using Content.Shared.Rounding;
using Content.Shared.Window;
using JetBrains.Annotations;
using Robust.Client.GameObjects;
using Robust.Shared.GameObjects;
using Robust.Shared.Log;
using Robust.Shared.Serialization.Manager.Attributes;
using Robust.Shared.Utility;
namespace Content.Client.Window
{
[UsedImplicitly]
public sealed class WindowVisualizer : AppearanceVisualizer
{
[DataField("crackRsi")]
public ResourcePath CrackRsi { get; } = new ("/Textures/Structures/Windows/cracks.rsi");
public override void InitializeEntity(IEntity entity)
{
if (!entity.TryGetComponent(out ISpriteComponent? sprite))
return;
sprite.LayerMapReserveBlank(WindowDamageLayers.Layer);
sprite.LayerSetVisible(WindowDamageLayers.Layer, false);
sprite.LayerSetRSI(WindowDamageLayers.Layer, CrackRsi);
}
public override void OnChangeData(AppearanceComponent component)
{
base.OnChangeData(component);
if (!component.Owner.TryGetComponent(out ISpriteComponent? sprite))
return;
if (component.TryGetData(WindowVisuals.Damage, out float fraction))
{
var level = Math.Min(ContentHelpers.RoundToLevels(fraction, 1, 5), 3);
if (level == 0)
{
sprite.LayerSetVisible(WindowDamageLayers.Layer, false);
return;
}
sprite.LayerSetVisible(WindowDamageLayers.Layer, true);
sprite.LayerSetState(WindowDamageLayers.Layer, $"{level}");
}
}
public enum WindowDamageLayers : byte
{
Layer,
}
}
}