Internals are kept on as long as any breathing tool is on (#28595)
This commit is contained in:
@@ -10,21 +10,21 @@ public sealed partial class AtmosphereSystem
|
|||||||
SubscribeLocalEvent<BreathToolComponent, ComponentShutdown>(OnBreathToolShutdown);
|
SubscribeLocalEvent<BreathToolComponent, ComponentShutdown>(OnBreathToolShutdown);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void OnBreathToolShutdown(EntityUid uid, BreathToolComponent component, ComponentShutdown args)
|
private void OnBreathToolShutdown(Entity<BreathToolComponent> entity, ref ComponentShutdown args)
|
||||||
{
|
{
|
||||||
DisconnectInternals(component);
|
DisconnectInternals(entity);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void DisconnectInternals(BreathToolComponent component)
|
public void DisconnectInternals(Entity<BreathToolComponent> entity)
|
||||||
{
|
{
|
||||||
var old = component.ConnectedInternalsEntity;
|
var old = entity.Comp.ConnectedInternalsEntity;
|
||||||
component.ConnectedInternalsEntity = null;
|
entity.Comp.ConnectedInternalsEntity = null;
|
||||||
|
|
||||||
if (TryComp<InternalsComponent>(old, out var internalsComponent))
|
if (TryComp<InternalsComponent>(old, out var internalsComponent))
|
||||||
{
|
{
|
||||||
_internals.DisconnectBreathTool((old.Value, internalsComponent));
|
_internals.DisconnectBreathTool((old.Value, internalsComponent), entity.Owner);
|
||||||
}
|
}
|
||||||
|
|
||||||
component.IsFunctional = false;
|
entity.Comp.IsFunctional = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -220,7 +220,7 @@ namespace Content.Server.Atmos.EntitySystems
|
|||||||
public bool CanConnectToInternals(GasTankComponent component)
|
public bool CanConnectToInternals(GasTankComponent component)
|
||||||
{
|
{
|
||||||
var internals = GetInternalsComponent(component, component.User);
|
var internals = GetInternalsComponent(component, component.User);
|
||||||
return internals != null && internals.BreathToolEntity != null && !component.IsValveOpen;
|
return internals != null && internals.BreathTools.Count != 0 && !component.IsValveOpen;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void ConnectToInternals(Entity<GasTankComponent> ent)
|
public void ConnectToInternals(Entity<GasTankComponent> ent)
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ namespace Content.Server.Body.Components
|
|||||||
public EntityUid? GasTankEntity;
|
public EntityUid? GasTankEntity;
|
||||||
|
|
||||||
[ViewVariables]
|
[ViewVariables]
|
||||||
public EntityUid? BreathToolEntity;
|
public HashSet<EntityUid> BreathTools { get; set; } = new();
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Toggle Internals delay when the target is not you.
|
/// Toggle Internals delay when the target is not you.
|
||||||
|
|||||||
@@ -44,7 +44,7 @@ public sealed class InternalsSystem : EntitySystem
|
|||||||
|
|
||||||
private void OnStartingGear(EntityUid uid, InternalsComponent component, ref StartingGearEquippedEvent args)
|
private void OnStartingGear(EntityUid uid, InternalsComponent component, ref StartingGearEquippedEvent args)
|
||||||
{
|
{
|
||||||
if (component.BreathToolEntity == null)
|
if (component.BreathTools.Count == 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (component.GasTankEntity != null)
|
if (component.GasTankEntity != null)
|
||||||
@@ -111,7 +111,7 @@ public sealed class InternalsSystem : EntitySystem
|
|||||||
}
|
}
|
||||||
|
|
||||||
// If they're not on then check if we have a mask to use
|
// If they're not on then check if we have a mask to use
|
||||||
if (internals.BreathToolEntity is null)
|
if (internals.BreathTools.Count == 0)
|
||||||
{
|
{
|
||||||
_popupSystem.PopupEntity(Loc.GetString("internals-no-breath-tool"), uid, user);
|
_popupSystem.PopupEntity(Loc.GetString("internals-no-breath-tool"), uid, user);
|
||||||
return;
|
return;
|
||||||
@@ -178,28 +178,24 @@ public sealed class InternalsSystem : EntitySystem
|
|||||||
_alerts.ShowAlert(ent, ent.Comp.InternalsAlert, GetSeverity(ent));
|
_alerts.ShowAlert(ent, ent.Comp.InternalsAlert, GetSeverity(ent));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
public void DisconnectBreathTool(Entity<InternalsComponent> ent)
|
public void DisconnectBreathTool(Entity<InternalsComponent> ent, EntityUid toolEntity)
|
||||||
{
|
{
|
||||||
var old = ent.Comp.BreathToolEntity;
|
ent.Comp.BreathTools.Remove(toolEntity);
|
||||||
ent.Comp.BreathToolEntity = null;
|
|
||||||
|
|
||||||
if (TryComp(old, out BreathToolComponent? breathTool))
|
if (TryComp(toolEntity, out BreathToolComponent? breathTool))
|
||||||
{
|
_atmos.DisconnectInternals((toolEntity, breathTool));
|
||||||
_atmos.DisconnectInternals(breathTool);
|
|
||||||
|
if (ent.Comp.BreathTools.Count == 0)
|
||||||
DisconnectTank(ent);
|
DisconnectTank(ent);
|
||||||
}
|
|
||||||
|
|
||||||
_alerts.ShowAlert(ent, ent.Comp.InternalsAlert, GetSeverity(ent));
|
_alerts.ShowAlert(ent, ent.Comp.InternalsAlert, GetSeverity(ent));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void ConnectBreathTool(Entity<InternalsComponent> ent, EntityUid toolEntity)
|
public void ConnectBreathTool(Entity<InternalsComponent> ent, EntityUid toolEntity)
|
||||||
{
|
{
|
||||||
if (TryComp(ent.Comp.BreathToolEntity, out BreathToolComponent? tool))
|
if (!ent.Comp.BreathTools.Add(toolEntity))
|
||||||
{
|
return;
|
||||||
_atmos.DisconnectInternals(tool);
|
|
||||||
}
|
|
||||||
|
|
||||||
ent.Comp.BreathToolEntity = toolEntity;
|
|
||||||
_alerts.ShowAlert(ent, ent.Comp.InternalsAlert, GetSeverity(ent));
|
_alerts.ShowAlert(ent, ent.Comp.InternalsAlert, GetSeverity(ent));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -217,7 +213,7 @@ public sealed class InternalsSystem : EntitySystem
|
|||||||
|
|
||||||
public bool TryConnectTank(Entity<InternalsComponent> ent, EntityUid tankEntity)
|
public bool TryConnectTank(Entity<InternalsComponent> ent, EntityUid tankEntity)
|
||||||
{
|
{
|
||||||
if (ent.Comp.BreathToolEntity is null)
|
if (ent.Comp.BreathTools.Count == 0)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (TryComp(ent.Comp.GasTankEntity, out GasTankComponent? tank))
|
if (TryComp(ent.Comp.GasTankEntity, out GasTankComponent? tank))
|
||||||
@@ -236,14 +232,14 @@ public sealed class InternalsSystem : EntitySystem
|
|||||||
|
|
||||||
public bool AreInternalsWorking(InternalsComponent component)
|
public bool AreInternalsWorking(InternalsComponent component)
|
||||||
{
|
{
|
||||||
return TryComp(component.BreathToolEntity, out BreathToolComponent? breathTool)
|
return TryComp(component.BreathTools.FirstOrNull(), out BreathToolComponent? breathTool)
|
||||||
&& breathTool.IsFunctional
|
&& breathTool.IsFunctional
|
||||||
&& HasComp<GasTankComponent>(component.GasTankEntity);
|
&& HasComp<GasTankComponent>(component.GasTankEntity);
|
||||||
}
|
}
|
||||||
|
|
||||||
private short GetSeverity(InternalsComponent component)
|
private short GetSeverity(InternalsComponent component)
|
||||||
{
|
{
|
||||||
if (component.BreathToolEntity is null || !AreInternalsWorking(component))
|
if (component.BreathTools.Count == 0 || !AreInternalsWorking(component))
|
||||||
return 2;
|
return 2;
|
||||||
|
|
||||||
// If pressure in the tank is below low pressure threshold, flash warning on internals UI
|
// If pressure in the tank is below low pressure threshold, flash warning on internals UI
|
||||||
|
|||||||
@@ -59,7 +59,7 @@ public sealed class LungSystem : EntitySystem
|
|||||||
{
|
{
|
||||||
if (args.IsToggled || args.IsEquip)
|
if (args.IsToggled || args.IsEquip)
|
||||||
{
|
{
|
||||||
_atmos.DisconnectInternals(ent.Comp);
|
_atmos.DisconnectInternals(ent);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user