Refactor drag and drop to use a shared interface (#2012)
* WIP in progress hours * Cleanup * Fix bugle * Fix nullable error * Merge fixes * Merge fixes * Merge fixes
This commit is contained in:
@@ -1,10 +1,10 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using Content.Client.Interfaces.GameObjects.Components.Interaction;
|
||||
using Content.Client.State;
|
||||
using Content.Shared.GameObjects;
|
||||
using Content.Shared.GameObjects.EntitySystemMessages;
|
||||
using Content.Shared.GameObjects.EntitySystems;
|
||||
using Content.Shared.Interfaces.GameObjects.Components;
|
||||
using JetBrains.Annotations;
|
||||
using Robust.Client.GameObjects;
|
||||
using Robust.Client.GameObjects.EntitySystems;
|
||||
@@ -52,7 +52,7 @@ namespace Content.Client.GameObjects.EntitySystems
|
||||
// entity performing the drag action
|
||||
private IEntity _dragger;
|
||||
private IEntity _draggedEntity;
|
||||
private readonly List<IClientDraggable> _draggables = new List<IClientDraggable>();
|
||||
private readonly List<IDraggable> _draggables = new List<IDraggable>();
|
||||
private IEntity _dragShadow;
|
||||
private DragState _state;
|
||||
// time since mouse down over the dragged entity
|
||||
@@ -146,10 +146,10 @@ namespace Content.Client.GameObjects.EntitySystems
|
||||
}
|
||||
|
||||
var canDrag = false;
|
||||
foreach (var draggable in entity.GetAllComponents<IClientDraggable>())
|
||||
foreach (var draggable in entity.GetAllComponents<IDraggable>())
|
||||
{
|
||||
var dragEventArgs = new CanDragEventArgs(args.Session.AttachedEntity, entity);
|
||||
if (draggable.ClientCanDrag(dragEventArgs))
|
||||
var dragEventArgs = new StartDragDropEventArgs(args.Session.AttachedEntity, entity);
|
||||
if (draggable.CanStartDrag(dragEventArgs))
|
||||
{
|
||||
// wait to initiate a drag
|
||||
_dragger = dragger;
|
||||
@@ -202,19 +202,26 @@ namespace Content.Client.GameObjects.EntitySystems
|
||||
foreach (var entity in entities)
|
||||
{
|
||||
// check if it's able to be dropped on by current dragged entity
|
||||
var canDropArgs = new CanDropEventArgs(_dragger, _draggedEntity, entity);
|
||||
var anyValidDraggable = _draggables.Any(draggable => draggable.ClientCanDropOn(canDropArgs));
|
||||
var dropArgs = new DragDropEventArgs(_dragger, args.Coordinates, _draggedEntity, entity);
|
||||
|
||||
if (anyValidDraggable)
|
||||
foreach (var draggable in _draggables)
|
||||
{
|
||||
if (!draggable.CanDrop(dropArgs))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
// tell the server about the drop attempt
|
||||
RaiseNetworkEvent(new DragDropMessage(args.Coordinates, _draggedEntity.Uid,
|
||||
entity.Uid));
|
||||
|
||||
draggable.Drop(dropArgs);
|
||||
|
||||
CancelDrag(false, null);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
CancelDrag(false, null);
|
||||
return false;
|
||||
}
|
||||
@@ -283,8 +290,8 @@ namespace Content.Client.GameObjects.EntitySystems
|
||||
if (inRangeSprite.Visible == false) continue;
|
||||
|
||||
// check if it's able to be dropped on by current dragged entity
|
||||
var canDropArgs = new CanDropEventArgs(_dragger, _draggedEntity, pvsEntity);
|
||||
var anyValidDraggable = _draggables.Any(draggable => draggable.ClientCanDropOn(canDropArgs));
|
||||
var canDropArgs = new CanDropEventArgs(_dragger, _draggedEntity, pvsEntity);
|
||||
var anyValidDraggable = _draggables.Any(draggable => draggable.CanDrop(canDropArgs));
|
||||
|
||||
if (anyValidDraggable)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user