From e3ead6a3baa0e351930db5e78993e53f3b9ad0db Mon Sep 17 00:00:00 2001 From: Leon Friedrich <60421075+ElectroJr@users.noreply.github.com> Date: Sun, 13 Mar 2022 21:47:28 +1300 Subject: [PATCH] Remove IDropped (#7075) --- .../Atmos/Components/GasAnalyzerComponent.cs | 10 +--- .../Atmos/Components/GasTankComponent.cs | 9 +--- .../Atmos/EntitySystems/GasTankSystem.cs | 7 +++ Content.Server/Crayon/CrayonSystem.cs | 2 +- .../Extinguisher/FireExtinguisherSystem.cs | 14 +----- Content.Server/Strip/StrippableComponent.cs | 3 ++ .../Hands/Components/SharedHandsComponent.cs | 11 ++-- .../Interaction/Events/DroppedEvent.cs | 20 ++++++++ Content.Shared/Interaction/IDropped.cs | 50 ------------------- .../Interaction/SharedInteractionSystem.cs | 33 +----------- 10 files changed, 42 insertions(+), 117 deletions(-) create mode 100644 Content.Shared/Interaction/Events/DroppedEvent.cs delete mode 100644 Content.Shared/Interaction/IDropped.cs diff --git a/Content.Server/Atmos/Components/GasAnalyzerComponent.cs b/Content.Server/Atmos/Components/GasAnalyzerComponent.cs index b4389ad8b4..53c23450dc 100644 --- a/Content.Server/Atmos/Components/GasAnalyzerComponent.cs +++ b/Content.Server/Atmos/Components/GasAnalyzerComponent.cs @@ -14,7 +14,7 @@ namespace Content.Server.Atmos.Components { [RegisterComponent] [ComponentReference(typeof(SharedGasAnalyzerComponent))] - public sealed class GasAnalyzerComponent : SharedGasAnalyzerComponent, IAfterInteract, IDropped + public sealed class GasAnalyzerComponent : SharedGasAnalyzerComponent, IAfterInteract { [Dependency] private readonly IEntityManager _entities = default!; @@ -256,13 +256,5 @@ namespace Content.Server.Atmos.Components return true; } - - void IDropped.Dropped(DroppedEventArgs eventArgs) - { - if (_entities.TryGetComponent(eventArgs.User, out ActorComponent? actor)) - { - CloseInterface(actor.PlayerSession); - } - } } } diff --git a/Content.Server/Atmos/Components/GasTankComponent.cs b/Content.Server/Atmos/Components/GasTankComponent.cs index 820a8b2e6a..c41d81de55 100644 --- a/Content.Server/Atmos/Components/GasTankComponent.cs +++ b/Content.Server/Atmos/Components/GasTankComponent.cs @@ -21,7 +21,7 @@ namespace Content.Server.Atmos.Components { [RegisterComponent] #pragma warning disable 618 - public sealed class GasTankComponent : Component, IExamine, IGasMixtureHolder, IDropped + public sealed class GasTankComponent : Component, IExamine, IGasMixtureHolder #pragma warning restore 618 { [Dependency] private readonly IEntityManager _entMan = default!; @@ -31,8 +31,6 @@ namespace Content.Server.Atmos.Components private int _integrity = 3; - [Dependency] private readonly IEntityManager _entityManager = default!; - [ViewVariables] private BoundUserInterface? _userInterface; [DataField("ruptureSound")] private SoundSpecifier _ruptureSound = new SoundPathSpecifier("Audio/Effects/spray.ogg"); @@ -289,10 +287,5 @@ namespace Content.Server.Atmos.Components if (_integrity < 3) _integrity++; } - - void IDropped.Dropped(DroppedEventArgs eventArgs) - { - DisconnectFromInternals(eventArgs.User); - } } } diff --git a/Content.Server/Atmos/EntitySystems/GasTankSystem.cs b/Content.Server/Atmos/EntitySystems/GasTankSystem.cs index af969e75b3..2286f65beb 100644 --- a/Content.Server/Atmos/EntitySystems/GasTankSystem.cs +++ b/Content.Server/Atmos/EntitySystems/GasTankSystem.cs @@ -1,5 +1,6 @@ using Content.Server.Atmos.Components; using Content.Shared.Actions; +using Content.Shared.Interaction.Events; using Content.Shared.Toggleable; using Content.Shared.Verbs; using JetBrains.Annotations; @@ -21,6 +22,12 @@ namespace Content.Server.Atmos.EntitySystems SubscribeLocalEvent>(AddOpenUIVerb); SubscribeLocalEvent(OnGetActions); SubscribeLocalEvent(OnActionToggle); + SubscribeLocalEvent(OnDropped); + } + + private void OnDropped(EntityUid uid, GasTankComponent component, DroppedEvent args) + { + component.DisconnectFromInternals(args.User); } private void OnGetActions(EntityUid uid, GasTankComponent component, GetActionsEvent args) diff --git a/Content.Server/Crayon/CrayonSystem.cs b/Content.Server/Crayon/CrayonSystem.cs index 0a9e2f2a12..ee5d5623d5 100644 --- a/Content.Server/Crayon/CrayonSystem.cs +++ b/Content.Server/Crayon/CrayonSystem.cs @@ -116,7 +116,7 @@ public sealed class CrayonSystem : EntitySystem private void OnCrayonDropped(EntityUid uid, CrayonComponent component, DroppedEvent args) { - if (TryComp(args.UserUid, out var actor)) + if (TryComp(args.User, out var actor)) component.UserInterface?.Close(actor.PlayerSession); } } diff --git a/Content.Server/Extinguisher/FireExtinguisherSystem.cs b/Content.Server/Extinguisher/FireExtinguisherSystem.cs index b06e28142f..e3db53433a 100644 --- a/Content.Server/Extinguisher/FireExtinguisherSystem.cs +++ b/Content.Server/Extinguisher/FireExtinguisherSystem.cs @@ -1,19 +1,14 @@ -using Content.Server.Chemistry.Components; +using Content.Server.Chemistry.Components; using Content.Server.Chemistry.EntitySystems; using Content.Server.Fluids.EntitySystems; using Content.Server.Popups; -using Content.Shared.ActionBlocker; using Content.Shared.Audio; -using Content.Shared.CharacterAppearance.Systems; using Content.Shared.Extinguisher; using Content.Shared.FixedPoint; using Content.Shared.Interaction; using Content.Shared.Interaction.Events; using Content.Shared.Verbs; using Robust.Shared.Audio; -using Robust.Shared.GameObjects; -using Robust.Shared.IoC; -using Robust.Shared.Localization; using Robust.Shared.Player; namespace Content.Server.Extinguisher; @@ -28,7 +23,6 @@ public sealed class FireExtinguisherSystem : EntitySystem base.Initialize(); SubscribeLocalEvent(OnFireExtinguisherInit); - SubscribeLocalEvent(OnDropped); SubscribeLocalEvent(OnUseInHand); SubscribeLocalEvent(OnAfterInteract); SubscribeLocalEvent>(OnGetInteractionVerbs); @@ -43,12 +37,6 @@ public sealed class FireExtinguisherSystem : EntitySystem } } - private void OnDropped(EntityUid uid, FireExtinguisherComponent component, DroppedEvent args) - { - // idk why this has to be done?????????? - UpdateAppearance(uid, component); - } - private void OnUseInHand(EntityUid uid, FireExtinguisherComponent component, UseInHandEvent args) { if (args.Handled) diff --git a/Content.Server/Strip/StrippableComponent.cs b/Content.Server/Strip/StrippableComponent.cs index 10221bc8dd..8b112e303d 100644 --- a/Content.Server/Strip/StrippableComponent.cs +++ b/Content.Server/Strip/StrippableComponent.cs @@ -8,6 +8,7 @@ using Content.Server.UserInterface; using Content.Shared.ActionBlocker; using Content.Shared.DragDrop; using Content.Shared.Hands.Components; +using Content.Shared.Interaction.Events; using Content.Shared.Inventory; using Content.Shared.Popups; using Content.Shared.Strip.Components; @@ -247,6 +248,8 @@ namespace Content.Server.Strip if (invSystem.TryGetSlotEntity(Owner, slot, out var item) && invSystem.TryUnequip(user, Owner, slot)) { + // Raise a dropped event, so that things like gas tank internals properly deactivate when stripping + _entities.EventBus.RaiseLocalEvent(item.Value, new DroppedEvent(user)); userHands.PutInHandOrDrop(item.Value); } diff --git a/Content.Shared/Hands/Components/SharedHandsComponent.cs b/Content.Shared/Hands/Components/SharedHandsComponent.cs index 9e37a8df9b..dff5d0a54f 100644 --- a/Content.Shared/Hands/Components/SharedHandsComponent.cs +++ b/Content.Shared/Hands/Components/SharedHandsComponent.cs @@ -4,6 +4,7 @@ using System.Diagnostics.CodeAnalysis; using System.Linq; using Content.Shared.ActionBlocker; using Content.Shared.Interaction; +using Content.Shared.Interaction.Events; using Content.Shared.Item; using Robust.Shared.Containers; using Robust.Shared.GameObjects; @@ -635,12 +636,15 @@ namespace Content.Shared.Hands.Components } /// - /// Puts an item any hand, prefering the active hand, or puts it on the floor under the player. + /// Puts an item any hand, preferring the active hand, or puts it on the floor under the player. /// public void PutInHandOrDrop(EntityUid entity, bool checkActionBlocker = true) { - if (!PutInHand(entity, checkActionBlocker)) - _entMan.GetComponent(entity).Coordinates = _entMan.GetComponent(Owner).Coordinates; + if (PutInHand(entity, checkActionBlocker)) + return; + + _entMan.GetComponent(entity).AttachParentToContainerOrGrid(_entMan); + _entMan.EventBus.RaiseLocalEvent(entity, new DroppedEvent(Owner)); } public void PutInHandOrDrop(SharedItemComponent item, bool checkActionBlocker = true) @@ -648,7 +652,6 @@ namespace Content.Shared.Hands.Components PutInHandOrDrop(item.Owner, checkActionBlocker); } - /// /// Tries to pick up an entity into the active hand. If it cannot, tries to pick up the entity into each other hand. /// diff --git a/Content.Shared/Interaction/Events/DroppedEvent.cs b/Content.Shared/Interaction/Events/DroppedEvent.cs new file mode 100644 index 0000000000..c83d112413 --- /dev/null +++ b/Content.Shared/Interaction/Events/DroppedEvent.cs @@ -0,0 +1,20 @@ +using JetBrains.Annotations; + +namespace Content.Shared.Interaction.Events; + +/// +/// Raised when an entity is dropped from a users hands, or directly removed from a users inventory, but not when moved between hands & inventory. +/// +[PublicAPI] +public sealed class DroppedEvent : HandledEntityEventArgs +{ + /// + /// Entity that dropped the item. + /// + public EntityUid User { get; } + + public DroppedEvent(EntityUid user) + { + User = user; + } +} diff --git a/Content.Shared/Interaction/IDropped.cs b/Content.Shared/Interaction/IDropped.cs deleted file mode 100644 index 58a5ca6cbf..0000000000 --- a/Content.Shared/Interaction/IDropped.cs +++ /dev/null @@ -1,50 +0,0 @@ -using System; -using JetBrains.Annotations; -using Robust.Shared.Analyzers; -using Robust.Shared.GameObjects; - -namespace Content.Shared.Interaction -{ - /// - /// This interface gives components behavior when they're dropped by a mob. - /// - [RequiresExplicitImplementation] - public interface IDropped - { - [Obsolete("Use DroppedMessage instead")] - void Dropped(DroppedEventArgs eventArgs); - } - - public sealed class DroppedEventArgs : EventArgs - { - public DroppedEventArgs(EntityUid user) - { - User = user; - } - - public EntityUid User { get; } - } - - /// - /// Raised when an entity is dropped - /// - [PublicAPI] - public sealed class DroppedEvent : HandledEntityEventArgs - { - /// - /// Entity that dropped the item. - /// - public EntityUid UserUid { get; } - - /// - /// Item that was dropped. - /// - public EntityUid DroppedUid { get; } - - public DroppedEvent(EntityUid user, EntityUid dropped) - { - UserUid = user; - DroppedUid = dropped; - } - } -} diff --git a/Content.Shared/Interaction/SharedInteractionSystem.cs b/Content.Shared/Interaction/SharedInteractionSystem.cs index db4c8dd713..1b201ad6a1 100644 --- a/Content.Shared/Interaction/SharedInteractionSystem.cs +++ b/Content.Shared/Interaction/SharedInteractionSystem.cs @@ -836,46 +836,15 @@ namespace Content.Shared.Interaction } #endregion - #region Drop - /// - /// Activates the Dropped behavior of an object - /// Verifies that the user is capable of doing the drop interaction first - /// - public bool TryDroppedInteraction(EntityUid user, EntityUid item) - { - if (!_actionBlockerSystem.CanDrop(user)) return false; - - DroppedInteraction(user, item); - return true; - } - - /// - /// Calls Dropped on all components that implement the IDropped interface - /// on an entity that has been dropped. - /// public void DroppedInteraction(EntityUid user, EntityUid item) { - var dropMsg = new DroppedEvent(user, item); + var dropMsg = new DroppedEvent(user); RaiseLocalEvent(item, dropMsg); if (dropMsg.Handled) - { _adminLogSystem.Add(LogType.Drop, LogImpact.Low, $"{ToPrettyString(user):user} dropped {ToPrettyString(item):entity}"); - return; - } - Transform(item).LocalRotation = Angle.Zero; - - var comps = AllComps(item).ToList(); - - // Call Land on all components that implement the interface - foreach (var comp in comps) - { - comp.Dropped(new DroppedEventArgs(user)); - } - _adminLogSystem.Add(LogType.Drop, LogImpact.Low, $"{ToPrettyString(user):user} dropped {ToPrettyString(item):entity}"); } #endregion - #endregion /// /// If a target is in range, but not in the same container as the user, it may be inside of a backpack. This