From 329d59910719886c9c18d2488ddfb5027d5a1176 Mon Sep 17 00:00:00 2001 From: metalgearsloth <31366439+metalgearsloth@users.noreply.github.com> Date: Sun, 24 Jan 2021 19:00:58 +1100 Subject: [PATCH] Fix drag-drop stripping (#3001) * Fix drag-drop stripping * More robust Co-authored-by: Metal Gear Sloth --- .../EntitySystems/DragDropSystem.cs | 9 ++++--- .../GUI/SharedStrippingComponent.cs | 27 +++++++++++++++++++ .../Entities/Mobs/Species/human.yml | 1 + 3 files changed, 33 insertions(+), 4 deletions(-) create mode 100644 Content.Shared/GameObjects/Components/GUI/SharedStrippingComponent.cs diff --git a/Content.Client/GameObjects/EntitySystems/DragDropSystem.cs b/Content.Client/GameObjects/EntitySystems/DragDropSystem.cs index ab4e1d601c..f4ef1b72a3 100644 --- a/Content.Client/GameObjects/EntitySystems/DragDropSystem.cs +++ b/Content.Client/GameObjects/EntitySystems/DragDropSystem.cs @@ -302,6 +302,8 @@ namespace Content.Client.GameObjects.EntitySystems foreach (var entity in entities) { + if (entity == _dragDropHelper.Dragged) continue; + // check if it's able to be dropped on by current dragged entity var dropArgs = new DragDropEventArgs(_dragger, args.Coordinates, _dragDropHelper.Dragged, entity); var valid = true; @@ -381,10 +383,9 @@ namespace Content.Client.GameObjects.EntitySystems var pvsEntities = EntityManager.GetEntitiesIntersecting(_eyeManager.CurrentMap, bounds, true); foreach (var pvsEntity in pvsEntities) { - if (!pvsEntity.TryGetComponent(out ISpriteComponent? inRangeSprite)) continue; - - // can't highlight if there's no sprite or it's not visible - if (inRangeSprite.Visible == false) continue; + if (!pvsEntity.TryGetComponent(out ISpriteComponent? inRangeSprite) || + !inRangeSprite.Visible || + pvsEntity == _dragDropHelper.Dragged) continue; var valid = (bool?) null; // check if it's able to be dropped on by current dragged entity diff --git a/Content.Shared/GameObjects/Components/GUI/SharedStrippingComponent.cs b/Content.Shared/GameObjects/Components/GUI/SharedStrippingComponent.cs new file mode 100644 index 0000000000..558a55b741 --- /dev/null +++ b/Content.Shared/GameObjects/Components/GUI/SharedStrippingComponent.cs @@ -0,0 +1,27 @@ +#nullable enable +using Content.Shared.Interfaces.GameObjects.Components; +using Robust.Shared.GameObjects; + +namespace Content.Shared.GameObjects.Components.GUI +{ + /// + /// Give to an entity to say they can strip another entity. + /// + [RegisterComponent] + public class SharedStrippingComponent : Component, IDragDropOn + { + public override string Name => "Stripping"; + + public bool CanDragDropOn(DragDropEventArgs eventArgs) + { + if (!eventArgs.Dragged.TryGetComponent(out SharedStrippableComponent? strippable)) return false; + return strippable.CanBeStripped(Owner); + } + + public bool DragDropOn(DragDropEventArgs eventArgs) + { + // Handled by StrippableComponent + return true; + } + } +} diff --git a/Resources/Prototypes/Entities/Mobs/Species/human.yml b/Resources/Prototypes/Entities/Mobs/Species/human.yml index e85e369fe1..22dc2ab80c 100644 --- a/Resources/Prototypes/Entities/Mobs/Species/human.yml +++ b/Resources/Prototypes/Entities/Mobs/Species/human.yml @@ -196,6 +196,7 @@ - type: Pullable - type: DoAfter - type: CreamPied + - type: Stripping - type: Strippable - type: UserInterface interfaces: