diff --git a/Content.Server/Atmos/Piping/Unary/EntitySystems/GasPortableSystem.cs b/Content.Server/Atmos/Piping/Unary/EntitySystems/GasPortableSystem.cs index bdb5e1ec55..259ac53e04 100644 --- a/Content.Server/Atmos/Piping/Unary/EntitySystems/GasPortableSystem.cs +++ b/Content.Server/Atmos/Piping/Unary/EntitySystems/GasPortableSystem.cs @@ -22,8 +22,7 @@ namespace Content.Server.Atmos.Piping.Unary.EntitySystems base.Initialize(); SubscribeLocalEvent(OnPortableAnchorAttempt); - SubscribeLocalEvent(OnPortableAnchored); - SubscribeLocalEvent(OnPortableUnanchored); + SubscribeLocalEvent(OnAnchorChanged); } private void OnPortableAnchorAttempt(EntityUid uid, GasPortableComponent component, AnchorAttemptEvent args) @@ -36,7 +35,7 @@ namespace Content.Server.Atmos.Piping.Unary.EntitySystems args.Cancel(); } - private void OnPortableAnchored(EntityUid uid, GasPortableComponent portable, AnchoredEvent args) + private void OnAnchorChanged(EntityUid uid, GasPortableComponent portable, ref AnchorStateChangedEvent args) { if (!EntityManager.TryGetComponent(uid, out NodeContainerComponent? nodeContainer)) return; @@ -44,27 +43,11 @@ namespace Content.Server.Atmos.Piping.Unary.EntitySystems if (!nodeContainer.TryGetNode(portable.PortName, out PipeNode? portableNode)) return; - portableNode.ConnectionsEnabled = true; + portableNode.ConnectionsEnabled = args.Anchored; if (EntityManager.TryGetComponent(uid, out AppearanceComponent? appearance)) { - appearance.SetData(GasPortableVisuals.ConnectedState, true); - } - } - - private void OnPortableUnanchored(EntityUid uid, GasPortableComponent portable, UnanchoredEvent args) - { - if (!EntityManager.TryGetComponent(uid, out NodeContainerComponent? nodeContainer)) - return; - - if (!nodeContainer.TryGetNode(portable.PortName, out PipeNode? portableNode)) - return; - - portableNode.ConnectionsEnabled = false; - - if (EntityManager.TryGetComponent(uid, out AppearanceComponent? appearance)) - { - appearance.SetData(GasPortableVisuals.ConnectedState, false); + appearance.SetData(GasPortableVisuals.ConnectedState, args.Anchored); } } diff --git a/Content.Server/Construction/AnchorableSystem.cs b/Content.Server/Construction/AnchorableSystem.cs index a86d330186..a6a2e3d020 100644 --- a/Content.Server/Construction/AnchorableSystem.cs +++ b/Content.Server/Construction/AnchorableSystem.cs @@ -103,7 +103,7 @@ namespace Content.Server.Construction transform.Anchored = true; - RaiseLocalEvent(uid, new AnchoredEvent(userUid, usingUid), false); + RaiseLocalEvent(uid, new UserAnchoredEvent(userUid, usingUid), false); return true; } @@ -132,7 +132,7 @@ namespace Content.Server.Construction transform.Anchored = false; - RaiseLocalEvent(uid, new UnanchoredEvent(userUid, usingUid), false); + RaiseLocalEvent(uid, new UserUnanchoredEvent(userUid, usingUid), false); return true; } diff --git a/Content.Server/Construction/Components/AnchorableComponent.cs b/Content.Server/Construction/Components/AnchorableComponent.cs index 5c6fd84d92..a8d6c04506 100644 --- a/Content.Server/Construction/Components/AnchorableComponent.cs +++ b/Content.Server/Construction/Components/AnchorableComponent.cs @@ -71,9 +71,14 @@ namespace Content.Server.Construction.Components public BeforeAnchoredEvent(EntityUid user, EntityUid tool) : base(user, tool) { } } - public class AnchoredEvent : BaseAnchoredEvent + /// + /// Raised when an entity with an anchorable component is anchored. Note that you may instead want the more + /// general . This event has the benefit of having user & tool information, + /// as a result of interactions mediated by the . + /// + public class UserAnchoredEvent : BaseAnchoredEvent { - public AnchoredEvent(EntityUid user, EntityUid tool) : base(user, tool) { } + public UserAnchoredEvent(EntityUid user, EntityUid tool) : base(user, tool) { } } /// @@ -84,8 +89,14 @@ namespace Content.Server.Construction.Components public BeforeUnanchoredEvent(EntityUid user, EntityUid tool) : base(user, tool) { } } - public class UnanchoredEvent : BaseAnchoredEvent + /// + /// Raised when an entity with an anchorable component is unanchored. Note that you will probably also need to + /// subscribe to the more general , which gets raised BEFORE this one. This + /// event has the benefit of having user & tool information, whereas the more general event may be due to + /// explosions or grid-destruction or other interactions not mediated by the . + /// + public class UserUnanchoredEvent : BaseAnchoredEvent { - public UnanchoredEvent(EntityUid user, EntityUid tool) : base(user, tool) { } + public UserUnanchoredEvent(EntityUid user, EntityUid tool) : base(user, tool) { } } } diff --git a/Content.Server/Disposal/Unit/EntitySystems/DisposalUnitSystem.cs b/Content.Server/Disposal/Unit/EntitySystems/DisposalUnitSystem.cs index a8a47cccb1..0f4ea80077 100644 --- a/Content.Server/Disposal/Unit/EntitySystems/DisposalUnitSystem.cs +++ b/Content.Server/Disposal/Unit/EntitySystems/DisposalUnitSystem.cs @@ -45,15 +45,14 @@ namespace Content.Server.Disposal.Unit.EntitySystems { base.Initialize(); - SubscribeLocalEvent(OnAnchored); - SubscribeLocalEvent(OnUnanchored); + SubscribeLocalEvent(OnAnchorChanged); // TODO: Predict me when hands predicted SubscribeLocalEvent(HandleMovement); SubscribeLocalEvent(HandlePowerChange); // Component lifetime SubscribeLocalEvent(HandleDisposalInit); - SubscribeLocalEvent(HandleDisposalShutdown); + SubscribeLocalEvent(HandleDisposalRemove); SubscribeLocalEvent(HandleThrowCollide); @@ -244,7 +243,7 @@ namespace Content.Server.Disposal.Unit.EntitySystems } } - private void HandleDisposalShutdown(EntityUid uid, DisposalUnitComponent component, ComponentShutdown args) + private void HandleDisposalRemove(EntityUid uid, DisposalUnitComponent component, ComponentRemove args) { foreach (var entity in component.Container.ContainedEntities.ToArray()) { @@ -313,15 +312,11 @@ namespace Content.Server.Disposal.Unit.EntitySystems Remove(component, args.Entity); } - private void OnAnchored(EntityUid uid, DisposalUnitComponent component, AnchoredEvent args) + private void OnAnchorChanged(EntityUid uid, DisposalUnitComponent component, ref AnchorStateChangedEvent args) { UpdateVisualState(component); - } - - private void OnUnanchored(EntityUid uid, DisposalUnitComponent component, UnanchoredEvent args) - { - UpdateVisualState(component); - TryEjectContents(component); + if (!args.Anchored) + TryEjectContents(component); } #endregion diff --git a/Content.Server/Fluids/EntitySystems/PuddleSystem.cs b/Content.Server/Fluids/EntitySystems/PuddleSystem.cs index 8c24dbbd91..c63dfba73b 100644 --- a/Content.Server/Fluids/EntitySystems/PuddleSystem.cs +++ b/Content.Server/Fluids/EntitySystems/PuddleSystem.cs @@ -37,7 +37,7 @@ namespace Content.Server.Fluids.EntitySystems { base.Initialize(); - SubscribeLocalEvent(OnUnanchored); + SubscribeLocalEvent(OnAnchorChanged); SubscribeLocalEvent(HandlePuddleExamined); SubscribeLocalEvent(OnUpdate); SubscribeLocalEvent(OnInit); @@ -95,12 +95,10 @@ namespace Content.Server.Fluids.EntitySystems } } - private void OnUnanchored(EntityUid uid, PuddleComponent puddle, UnanchoredEvent unanchoredEvent) + private void OnAnchorChanged(EntityUid uid, PuddleComponent puddle, ref AnchorStateChangedEvent args) { - if (!EntityManager.GetComponent(puddle.Owner).Anchored) - return; - - EntityManager.QueueDeleteEntity(puddle.Owner); + if (!args.Anchored) + QueueDel(uid); } /// diff --git a/Content.Server/Nuke/NukeSystem.cs b/Content.Server/Nuke/NukeSystem.cs index 5d2cee9ce0..0393e807ea 100644 --- a/Content.Server/Nuke/NukeSystem.cs +++ b/Content.Server/Nuke/NukeSystem.cs @@ -46,8 +46,7 @@ namespace Content.Server.Nuke // anchoring logic SubscribeLocalEvent(OnAnchorAttempt); SubscribeLocalEvent(OnUnanchorAttempt); - SubscribeLocalEvent(OnWasAnchored); - SubscribeLocalEvent(OnWasUnanchored); + SubscribeLocalEvent(OnAnchorChanged); // ui events SubscribeLocalEvent(OnEjectButtonPressed); @@ -154,12 +153,7 @@ namespace Content.Server.Nuke } } - private void OnWasUnanchored(EntityUid uid, NukeComponent component, UnanchoredEvent args) - { - UpdateUserInterface(uid, component); - } - - private void OnWasAnchored(EntityUid uid, NukeComponent component, AnchoredEvent args) + private void OnAnchorChanged(EntityUid uid, NukeComponent component, ref AnchorStateChangedEvent args) { UpdateUserInterface(uid, component); }