Files
tbd-station-14/Content.Shared/Shuttles/Systems/SharedShuttleSystem.IFF.cs
metalgearsloth a41772a006 Shuttle map IFF tweaks (#25897)
- HideLabel just means it won't have its name / button drawn whereas Hide will block it completely.
2024-03-11 13:11:46 +11:00

94 lines
2.5 KiB
C#

using Content.Shared.Shuttles.Components;
using JetBrains.Annotations;
namespace Content.Shared.Shuttles.Systems;
public abstract partial class SharedShuttleSystem
{
/*
* Handles the label visibility on radar controls. This can be hiding the label or applying other effects.
*/
protected virtual void UpdateIFFInterfaces(EntityUid gridUid, IFFComponent component) {}
public Color GetIFFColor(EntityUid gridUid, bool self = false, IFFComponent? component = null)
{
if (self)
{
return IFFComponent.SelfColor;
}
if (!Resolve(gridUid, ref component, false))
{
return IFFComponent.IFFColor;
}
return component.Color;
}
public string? GetIFFLabel(EntityUid gridUid, bool self = false, IFFComponent? component = null)
{
if (!IFFComponent.ShowIFFDefault)
{
return null;
}
var entName = MetaData(gridUid).EntityName;
if (self)
{
return entName;
}
if (Resolve(gridUid, ref component, false) && (component.Flags & (IFFFlags.HideLabel | IFFFlags.Hide)) != 0x0)
{
return null;
}
return string.IsNullOrEmpty(entName) ? Loc.GetString("shuttle-console-unknown") : entName;
}
/// <summary>
/// Sets the color for this grid to appear as on radar.
/// </summary>
[PublicAPI]
public void SetIFFColor(EntityUid gridUid, Color color, IFFComponent? component = null)
{
component ??= EnsureComp<IFFComponent>(gridUid);
if (component.Color.Equals(color))
return;
component.Color = color;
Dirty(gridUid, component);
UpdateIFFInterfaces(gridUid, component);
}
[PublicAPI]
public void AddIFFFlag(EntityUid gridUid, IFFFlags flags, IFFComponent? component = null)
{
component ??= EnsureComp<IFFComponent>(gridUid);
if ((component.Flags & flags) == flags)
return;
component.Flags |= flags;
Dirty(gridUid, component);
UpdateIFFInterfaces(gridUid, component);
}
[PublicAPI]
public void RemoveIFFFlag(EntityUid gridUid, IFFFlags flags, IFFComponent? component = null)
{
if (!Resolve(gridUid, ref component, false))
return;
if ((component.Flags & flags) == 0x0)
return;
component.Flags &= ~flags;
Dirty(gridUid, component);
UpdateIFFInterfaces(gridUid, component);
}
}