1 using Microsoft.Xna.Framework;
2 using Microsoft.Xna.Framework.Graphics;
3 using System.Collections.Generic;
7 namespace Loot.UI.Common.Core
12 internal abstract class DraggableUIState : VisibilityUI
14 private int _dragging;
16 private readonly List<(UIElement, UIElement)> _draggingList =
new List<(UIElement, UIElement)>();
17 private readonly Dictionary<UIElement, Vector2> _offsets =
new Dictionary<UIElement, Vector2>();
19 protected void AddDragging(UIElement dragger, UIElement draggable = null)
21 draggable = draggable ?? dragger;
22 _draggingList.Add((dragger, draggable));
23 if (!_offsets.ContainsKey(dragger))
25 _offsets.Add(dragger, Vector2.Zero);
28 dragger.OnMouseDown += (evt, element) =>
31 _offsets[dragger] =
new Vector2(evt.MousePosition.X - draggable.Left.Pixels, evt.MousePosition.Y - draggable.Top.Pixels);
35 dragger.OnMouseUp += (evt, element) =>
38 Vector2 end = evt.MousePosition;
41 draggable.Left.Set(end.X - _offsets[dragger].X, 0f);
42 draggable.Top.Set(end.Y - _offsets[dragger].Y, 0f);
44 dragger.Recalculate();
45 draggable.Recalculate();
49 protected override void DrawSelf(SpriteBatch spriteBatch)
51 Main.LocalPlayer.mouseInterface = IsMouseHovering;
58 foreach (var (dragger, draggable) in _draggingList)
60 draggable.Left.Set(Main.MouseScreen.X - _offsets[dragger].X, 0f);
61 draggable.Top.Set(Main.MouseScreen.Y - _offsets[dragger].Y, 0f);
63 dragger.Recalculate();
64 draggable.Recalculate();