Esempio n. 1
0
        public DraggableItem Drop()
        {
            MouseState mouseState = Mouse.GetState();

            if (CurrentItem != null)
            {
                Rectangle rect = CurrentItem.GlobalBounds;
                rect.X = mouseState.X - rect.Width / 2;
                rect.Y = mouseState.Y - rect.Height / 2;

                GUIComponent drop = GetIntersectingSlot(rect);


                if (drop != null)
                {
                    foreach (GUIComponent slotDropper in IllegalDrags.Keys)
                    {
                        if (CurrentItem.HasAnscestor(slotDropper))
                        {
                            foreach (GUIComponent illegals in IllegalDrags[slotDropper].Keys)
                            {
                                if (drop.HasAnscestor(illegals))
                                {
                                    CurrentItem.Item.CurrentAmount += CurrentDragAmount;
                                    OnDragEnded.Invoke(CurrentItem, null, 0);
                                    return(null);
                                }
                            }
                        }
                    }

                    DraggableItem toReturn = null;
                    bool          wasNew   = false;
                    bool          success  = Drag(CurrentItem, CurrentDragAmount, drop, out toReturn, out wasNew);

                    if (!success)
                    {
                        CurrentItem.Item.CurrentAmount += CurrentDragAmount;
                        OnDragEnded.Invoke(CurrentItem, null, 0);
                        return(null);
                    }
                    else if (wasNew)
                    {
                        OnDragEnded.Invoke(CurrentItem, toReturn, CurrentDragAmount);
                        return(toReturn);
                    }
                    else
                    {
                        OnDragEnded.Invoke(CurrentItem, null, CurrentDragAmount);
                        return(null);
                    }
                }
                else
                {
                    CurrentItem.Item.CurrentAmount += CurrentDragAmount;
                    OnDragEnded.Invoke(CurrentItem, null, 0);
                    return(null);
                }
            }


            CurrentItem       = null;
            CurrentDragAmount = 0;
            OnDragEnded.Invoke(CurrentItem, null, 0);
            return(null);
        }