Inventory slots are highlighted if the cursor is within 5 pixels of the rect. The spacing between inventory slots is 10 px, so now items can't be accidentally dropped by releasing the cursor between slots.

This commit is contained in:
Joonas Rikkonen
2017-08-11 17:49:43 +03:00
parent 75a4d641bf
commit 98b4b904d4
2 changed files with 15 additions and 13 deletions
@@ -95,18 +95,15 @@ namespace Barotrauma
int rectWidth = 40, rectHeight = 40; int rectWidth = 40, rectHeight = 40;
Rectangle slotRect = new Rectangle(0, 0, rectWidth, rectHeight);
for (int i = 0; i < capacity; i++) for (int i = 0; i < capacity; i++)
{ {
if (slots[i] == null) slots[i] = new InventorySlot(slotRect); Rectangle slotRect = new Rectangle(
(int)(SlotPositions[i].X + DrawOffset.X),
slots[i].Disabled = false; (int)(SlotPositions[i].Y + DrawOffset.Y),
rectWidth, rectHeight);
slotRect.X = (int)(SlotPositions[i].X + DrawOffset.X);
slotRect.Y = (int)(SlotPositions[i].Y + DrawOffset.Y);
slots[i].Rect = slotRect;
slots[i] = new InventorySlot(slotRect);
slots[i].Disabled = false;
slots[i].Color = limbSlots[i] == InvSlotType.Any ? Color.White * 0.2f : Color.White * 0.4f; slots[i].Color = limbSlots[i] == InvSlotType.Any ? Color.White * 0.2f : Color.White * 0.4f;
} }
@@ -182,7 +179,7 @@ namespace Barotrauma
if (rootContainer != null) if (rootContainer != null)
{ {
rootInventory = rootContainer.ParentInventory != null ? rootInventory = rootContainer.ParentInventory != null ?
rootContainer.ParentInventory : rootContainer.GetComponent<Items.Components.ItemContainer>().Inventory; rootContainer.ParentInventory : rootContainer.GetComponent<ItemContainer>().Inventory;
} }
if (rootInventory != null && if (rootInventory != null &&
@@ -209,6 +206,7 @@ namespace Barotrauma
if (Items[n] == Items[i]) if (Items[n] == Items[i])
{ {
slots[i].Rect = Rectangle.Union(slots[i].Rect, slots[n].Rect); slots[i].Rect = Rectangle.Union(slots[i].Rect, slots[n].Rect);
slots[i].InteractRect = Rectangle.Union(slots[i].InteractRect, slots[n].InteractRect);
slots[n].Disabled = true; slots[n].Disabled = true;
} }
} }
@@ -10,6 +10,8 @@ namespace Barotrauma
{ {
public Rectangle Rect; public Rectangle Rect;
public Rectangle InteractRect;
public bool Disabled; public bool Disabled;
public GUIComponent.ComponentState State; public GUIComponent.ComponentState State;
@@ -30,6 +32,8 @@ namespace Barotrauma
public InventorySlot(Rectangle rect) public InventorySlot(Rectangle rect)
{ {
Rect = rect; Rect = rect;
InteractRect = rect;
InteractRect.Inflate(5, 5);
State = GUIComponent.ComponentState.None; State = GUIComponent.ComponentState.None;
Color = Color.White * 0.4f; Color = Color.White * 0.4f;
} }
@@ -151,7 +155,7 @@ namespace Barotrauma
if (draggingItem != null && if (draggingItem != null &&
(draggingSlot == null || (!draggingSlot.Rect.Contains(PlayerInput.MousePosition) && draggingItem.ParentInventory == this))) (draggingSlot == null || (!draggingSlot.InteractRect.Contains(PlayerInput.MousePosition) && draggingItem.ParentInventory == this)))
{ {
if (!PlayerInput.LeftButtonHeld()) if (!PlayerInput.LeftButtonHeld())
{ {
@@ -166,7 +170,7 @@ namespace Barotrauma
protected void UpdateSlot(InventorySlot slot, int slotIndex, Item item, bool isSubSlot) protected void UpdateSlot(InventorySlot slot, int slotIndex, Item item, bool isSubSlot)
{ {
bool mouseOn = slot.Rect.Contains(PlayerInput.MousePosition) && !Locked; bool mouseOn = slot.InteractRect.Contains(PlayerInput.MousePosition) && !Locked;
slot.State = GUIComponent.ComponentState.None; slot.State = GUIComponent.ComponentState.None;
@@ -268,7 +272,7 @@ namespace Barotrauma
} }
if (draggingItem != null && if (draggingItem != null &&
(draggingSlot == null || (!draggingSlot.Rect.Contains(PlayerInput.MousePosition) && draggingItem.ParentInventory == this))) (draggingSlot == null || (!draggingSlot.InteractRect.Contains(PlayerInput.MousePosition) && draggingItem.ParentInventory == this)))
{ {
Rectangle dragRect = new Rectangle( Rectangle dragRect = new Rectangle(
(int)PlayerInput.MousePosition.X - 10, (int)PlayerInput.MousePosition.X - 10,