Пример #1
0
        public void MoveBetweenTwoLists(params List <SlotItem>[] listOfLists)
        {
            if (listOfLists.Where(s => s != null).All(s => s.Count > 0))
            {
                if (Input.GetMouseButtonDown(0) && (_eDragAndDrop == EDragAndDrop.Pick || _eDragAndDrop == EDragAndDrop.Stack)) //uchpen předmět
                {
                    foreach (List <SlotItem> slotList in listOfLists.Where(s => s != null).Where(s => s.Count > 0))
                    {
                        if (Input.GetKey(KeyCode.LeftShift) && slotList.Any(s => s.Rect.Contains(MyInput.CurrentMousePosition()) && s.Item != null && !s.Item.Grabed))
                        {
                            _eDragAndDrop = EDragAndDrop.Stack;
                            _click++;                                                                                                                  //přičítání počtu kliků
                            SlotItem actSlotItem = slotList.Find(s => s != null && s.Rect.Contains(MyInput.CurrentMousePosition()) && s.Item != null); //najdení slotu itemů
                            Item     newItem     = new Item(actSlotItem.Item);                                                                         //vytvoření nového itemu
                            _grabPosition = DeltaPosition(actSlotItem.Position, MyInput.CurrentMousePosition());
                            if (actSlotItem.Item.ActualStack > 0)
                            {
                                newItem.ActualStack = _click;       //zápis stacků do itemu
                                actSlotItem.Item.ActualStack--;     //odečtení staků
                            }
                            if (actSlotItem.Item.ActualStack == 0)
                            {
                                RemoveItem(actSlotItem); //odstraň item
                            }
                            _grabedItem = newItem;       //nastav jako uchycený item
                            SetPickStats(newItem, MyInput.CurrentMousePosition() - _grabPosition);
                        }
                        //sebrání itemu na který bylo kliknuto
                        else if (slotList.Any(s => s.Rect.Contains(MyInput.CurrentMousePosition()) && s.Item != null && !s.Item.Grabed) && _grabedItem == null)
                        {
                            SetItemGrabed(slotList.Find(s => s != null && s.Rect.Contains(MyInput.CurrentMousePosition()) && s.Item != null));
                        }
                    }
                }
                else if (Input.GetKeyUp(KeyCode.LeftShift) && _eDragAndDrop == EDragAndDrop.Stack)
                {
                    //pokud pustím shift a stackuju
                    _eDragAndDrop = EDragAndDrop.Drop;
                    _click        = 0;
                }

                if (_eDragAndDrop == EDragAndDrop.Drop)
                {
                    //neustálé nastavování hodnot
                    SetPickStats(_grabedItem, MyInput.CurrentMousePosition() - _grabPosition);
                }
                if (Input.GetMouseButtonUp(0) && _eDragAndDrop == EDragAndDrop.Drag)
                {
                    //pokud neni zmáčknuto tlačítko myši a je drag
                    _eDragAndDrop = EDragAndDrop.Drop;
                    AddRemoveStats(_previousSlot, false);
                }
                else if (Input.GetMouseButtonDown(0) && _eDragAndDrop == EDragAndDrop.Drop)
                {
                    bool saved = false;
                    foreach (List <SlotItem> slotList in listOfLists.Where(s => s != null))
                    {
                        //výběr ze všech listů které nejsou null a obsahují kurzor(kolidují s rectem)
                        if (_grabedItem != null)
                        {
                            if (
                                slotList.Any(s => s.Rect.Contains(MyInput.CurrentMousePosition()) || s.Rect.Overlaps(_grabedItem.Rect)))
                            {
                                saved = true;
                                DropService(slotList);
                            }
                        }
                    }
                    if (!saved && _eDragAndDrop != EDragAndDrop.Drag)
                    {   //ošetření aby nebylo drag(tzn. pokud budu dávat na stack a ten stack bude neprázdný a zbydou mi itemy tak je to nezahodí)
                        _eDragAndDrop = EDragAndDrop.None;
                        RemoveItem(_previousSlot);
                    }
                }
                else if (_eDragAndDrop == EDragAndDrop.None)
                {
                    //pokud je state none automaticky nastaví na pick...
                    _eDragAndDrop = EDragAndDrop.Pick;
                }
            }
        }
Пример #2
0
 private void RemoveItem(SlotItem slotItem)
 {
     _grabedItem = null;
     SetDropStats(slotItem, null, false);
 }