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; } } }
private void RemoveItem(SlotItem slotItem) { _grabedItem = null; SetDropStats(slotItem, null, false); }