using Content.Server.Shuttles.Components; using Content.Shared.CCVar; using Content.Shared.Shuttles.BUIStates; using Content.Shared.Shuttles.Components; using Content.Shared.Shuttles.Events; namespace Content.Server.Shuttles.Systems; public sealed partial class ShuttleSystem { private void InitializeIFF() { SubscribeLocalEvent(OnIFFConsoleAnchor); SubscribeLocalEvent(OnIFFShow); SubscribeLocalEvent(OnIFFShowVessel); SubscribeLocalEvent(OnGridSplit); } private void OnGridSplit(ref GridSplitEvent ev) { var splitMass = _cfg.GetCVar(CCVars.HideSplitGridsUnder); if (splitMass < 0) return; foreach (var grid in ev.NewGrids) { if (!_physicsQuery.TryGetComponent(grid, out var physics) || physics.Mass > splitMass) { continue; } AddIFFFlag(grid, IFFFlags.HideLabel); } } private void OnIFFShow(EntityUid uid, IFFConsoleComponent component, IFFShowIFFMessage args) { if (!TryComp(uid, out TransformComponent? xform) || xform.GridUid == null || (component.AllowedFlags & IFFFlags.HideLabel) == 0x0) { return; } if (!args.Show) { AddIFFFlag(xform.GridUid.Value, IFFFlags.HideLabel); } else { RemoveIFFFlag(xform.GridUid.Value, IFFFlags.HideLabel); } } private void OnIFFShowVessel(EntityUid uid, IFFConsoleComponent component, IFFShowVesselMessage args) { if (!TryComp(uid, out TransformComponent? xform) || xform.GridUid == null || (component.AllowedFlags & IFFFlags.Hide) == 0x0) { return; } if (!args.Show) { AddIFFFlag(xform.GridUid.Value, IFFFlags.Hide); } else { RemoveIFFFlag(xform.GridUid.Value, IFFFlags.Hide); } } private void OnIFFConsoleAnchor(EntityUid uid, IFFConsoleComponent component, ref AnchorStateChangedEvent args) { // If we anchor / re-anchor then make sure flags up to date. if (!args.Anchored || !TryComp(uid, out TransformComponent? xform) || !TryComp(xform.GridUid, out var iff)) { _uiSystem.SetUiState(uid, IFFConsoleUiKey.Key, new IFFConsoleBoundUserInterfaceState() { AllowedFlags = component.AllowedFlags, Flags = IFFFlags.None, }); } else { _uiSystem.SetUiState(uid, IFFConsoleUiKey.Key, new IFFConsoleBoundUserInterfaceState() { AllowedFlags = component.AllowedFlags, Flags = iff.Flags, }); } } protected override void UpdateIFFInterfaces(EntityUid gridUid, IFFComponent component) { base.UpdateIFFInterfaces(gridUid, component); var query = AllEntityQuery(); while (query.MoveNext(out var uid, out var comp, out var xform)) { if (xform.GridUid != gridUid) continue; _uiSystem.SetUiState(uid, IFFConsoleUiKey.Key, new IFFConsoleBoundUserInterfaceState() { AllowedFlags = comp.AllowedFlags, Flags = component.Flags, }); } } }