- Home /
Question by
austinsun102 · Jan 03, 2019 at 09:42 PM ·
interfacedrag-and-dropdragginginterfaces
IDropHandler only getting called when flicking the mouse
I am using an IDropHandler for a drag and drop system. I tested the Idrophandler and the drop method only calls if I flick my mouse or I move my mouse really fast. If I move my mouse slowly, it doesn't work. I followed a tutorial by kryzarel and his code seemed to work completely fine.`private void Drop(BaseItemSlot dropItemSlot) { if (dragItemSlot == null) return;
if (dropItemSlot.CanAddStack(dragItemSlot.Item))
{
AddStacks(dropItemSlot);
}
else if (dropItemSlot.CanReceiveItem(dragItemSlot.Item) && dragItemSlot.CanReceiveItem(dropItemSlot.Item))
{
SwapItems(dropItemSlot);
}
EndDrag(dropItemSlot);
}`
private void SwapItems(BaseItemSlot dropItemSlot) { EquippableItem dragEquipItem = dragItemSlot.Item as EquippableItem; EquippableItem dropEquipItem = dropItemSlot.Item as EquippableItem;
if (dropItemSlot is EquipmentSlot)
{
if (dragEquipItem != null) dragEquipItem.Equip(this);
if (dropEquipItem != null) dropEquipItem.Unequip(this);
}
if (dragItemSlot is EquipmentSlot)
{
if (dragEquipItem != null) dragEquipItem.Unequip(this);
if (dropEquipItem != null) dropEquipItem.Equip(this);
}
statPanel.UpdateStatValues();
Item draggedItem = dragItemSlot.Item;
int draggedItemAmount = dragItemSlot.Amount;
dragItemSlot.Item = dropItemSlot.Item;
dragItemSlot.Amount = dropItemSlot.Amount;
dropItemSlot.Item = draggedItem;
dropItemSlot.Amount = draggedItemAmount;
}
private void AddStacks(BaseItemSlot dropItemSlot)
{
int addableAmount = dropItemSlot.Item.MaxStackSize - dropItemSlot.Amount;
int stacksToAdd = Mathf.Min(addableAmount, dropItemSlot.Amount);
dropItemSlot.Amount += stacksToAdd;
dragItemSlot.Amount -= stacksToAdd;
}
Comment