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: