Skip to content

Commit 5db0803

Browse files
committed
updates and code cleanup: DragAndDrop_HandleDrop overrides
- Required logic update after fixes for item's icon handling. - hotkeys and bags handling for DragAndDrop_HandleDrop - (bags seriously need a big refactor): replaced direct packet store (buggy) and slider (never been coded properly) for at least, a simple and functional YesNo Prompt that stores whole item stacks from inventory. - HotbarItem case returns false (required so items don't go invisible when placing them to hotbars). - SpellItem to Hotbar case returns false (required so spells don't go invisible when placing them to hotbars). - fixes quantityLabels logic - visually functional bags and bank items when moving them around
1 parent 09fd463 commit 5db0803

14 files changed

Lines changed: 64 additions & 71 deletions

File tree

Intersect.Client.Core/Entities/Player.cs

Lines changed: 13 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1121,41 +1121,32 @@ public void TryStoreItemInBag(int inventorySlotIndex, int bagSlotIndex)
11211121
}
11221122

11231123
var quantity = inventorySlot.Quantity;
1124-
var maxQuantity = quantity;
1125-
1126-
if (maxQuantity < 2)
1127-
{
1128-
PacketSender.SendStoreBagItem(inventorySlotIndex, 1, bagSlotIndex);
1129-
return;
1130-
}
11311124

11321125
_ = new InputBox(
11331126
title: Strings.Bags.StoreItem,
11341127
prompt: Strings.Bags.StoreItemPrompt.ToString(itemDescriptor.Name),
1135-
inputType: InputType.NumericSliderInput,
1128+
inputType: InputType.YesNo,
11361129
quantity: quantity,
1137-
maximumQuantity: maxQuantity,
1138-
userData: new Tuple<int, int>(inventorySlotIndex, bagSlotIndex),
1130+
userData: new Tuple<int, int, int>(inventorySlotIndex, bagSlotIndex, quantity),
11391131
onSubmit: TryStoreItemInBagOnSubmit
11401132
);
11411133
}
11421134

11431135
private static void TryStoreItemInBagOnSubmit(Base sender, InputSubmissionEventArgs args)
11441136
{
1145-
if (sender is not InputBox { UserData: (int inventorySlotIndex, int bagSlotIndex) })
1137+
if (sender is not InputBox { UserData: (int inventorySlotIndex, int bagSlotIndex, int quantity) })
11461138
{
11471139
return;
11481140
}
11491141

1150-
if (args.Value is not NumericalSubmissionValue submissionValue)
1142+
if (args.Value is not BooleanSubmissionValue submissionValue)
11511143
{
11521144
return;
11531145
}
11541146

1155-
var value = (int)Math.Round(submissionValue.Value);
1156-
if (value > 0)
1147+
if (submissionValue.Value)
11571148
{
1158-
PacketSender.SendStoreBagItem(inventorySlotIndex, value, bagSlotIndex);
1149+
PacketSender.SendStoreBagItem(inventorySlotIndex, quantity, bagSlotIndex);
11591150
}
11601151
}
11611152

@@ -1445,12 +1436,17 @@ public void AddToHotbar(int hotbarSlot, sbyte itemType, int itemSlot)
14451436
PacketSender.SendHotbarUpdate(hotbarSlot, itemType, itemSlot);
14461437
}
14471438

1448-
public void HotbarSwap(int index, int swapIndex)
1439+
public bool HotbarSwap(int index, int swapIndex)
14491440
{
14501441
var itemId = Hotbar[index].ItemOrSpellId;
14511442
var bagId = Hotbar[index].BagId;
14521443
var stats = Hotbar[index].PreferredStatBuffs;
14531444

1445+
if (Hotbar[swapIndex].ItemOrSpellId == itemId)
1446+
{
1447+
return false;
1448+
}
1449+
14541450
Hotbar[index].ItemOrSpellId = Hotbar[swapIndex].ItemOrSpellId;
14551451
Hotbar[index].BagId = Hotbar[swapIndex].BagId;
14561452
Hotbar[index].PreferredStatBuffs = Hotbar[swapIndex].PreferredStatBuffs;
@@ -1460,6 +1456,7 @@ public void HotbarSwap(int index, int swapIndex)
14601456
Hotbar[swapIndex].PreferredStatBuffs = stats;
14611457

14621458
PacketSender.SendHotbarSwap(index, swapIndex);
1459+
return true;
14631460
}
14641461

14651462
// Change the dimension if the player is on a gateway

Intersect.Client.Core/Interface/Game/Bag/BagItem.cs

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -19,15 +19,13 @@ public partial class BagItem : SlotItem
1919
{
2020
// Controls
2121
private readonly Label _quantityLabel;
22-
private readonly BagWindow _bagWindow;
2322

2423
// Context Menu Handling
2524
private readonly MenuItem _withdrawContextItem;
2625

27-
public BagItem(BagWindow bagWindow, Base parent, int index, ContextMenu contextMenu)
26+
public BagItem(Base parent, int index, ContextMenu contextMenu)
2827
: base(parent, nameof(BagItem), index, contextMenu)
2928
{
30-
_bagWindow = bagWindow;
3129
TextureFilename = "bagitem.png";
3230

3331
Icon.HoverEnter += Icon_HoverEnter;
@@ -157,6 +155,16 @@ private void Icon_DoubleClicked(Base sender, MouseButtonState arguments)
157155

158156
public override bool DragAndDrop_HandleDrop(Package package, int x, int y)
159157
{
158+
if (Globals.Me is not { } player)
159+
{
160+
return false;
161+
}
162+
163+
if (Globals.BagSlots is not { Length: > 0 } bagSlots)
164+
{
165+
return false;
166+
}
167+
160168
var targetNode = Interface.FindComponentUnderCursor();
161169

162170
// Find the first parent acceptable in that tree that can accept the package
@@ -166,11 +174,11 @@ public override bool DragAndDrop_HandleDrop(Package package, int x, int y)
166174
{
167175
case BagItem bagItem:
168176
PacketSender.SendMoveBagItems(SlotIndex, bagItem.SlotIndex);
169-
return true;
177+
return bagSlots[bagItem.SlotIndex] is not { Quantity: > 0 };
170178

171179
case InventoryItem inventoryItem:
172-
Globals.Me?.TryRetrieveItemFromBag(SlotIndex, inventoryItem.SlotIndex);
173-
return true;
180+
player.TryRetrieveItemFromBag(SlotIndex, inventoryItem.SlotIndex);
181+
return bagSlots[inventoryItem.SlotIndex] is not { Quantity: > 0 };
174182

175183
default:
176184
targetNode = targetNode.Parent;
@@ -206,7 +214,7 @@ public override void Update()
206214
var bagSlot = bagSlots[SlotIndex];
207215
var descriptor = bagSlot.Descriptor;
208216

209-
_quantityLabel.IsVisibleInParent = !Icon.IsDragging && descriptor.IsStackable && bagSlot.Quantity > 1;
217+
_quantityLabel.IsVisibleInParent = !Icon.IsHidden && descriptor.IsStackable && bagSlot.Quantity > 1;
210218
if (_quantityLabel.IsVisibleInParent)
211219
{
212220
_quantityLabel.Text = Strings.FormatQuantityAbbreviated(bagSlot.Quantity);

Intersect.Client.Core/Interface/Game/Bag/BagWindow.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ private void InitItemContainer()
5858

5959
for (var slotIndex = 0; slotIndex < bagSlots.Length; slotIndex++)
6060
{
61-
Items.Add(new BagItem(this, _slotContainer, slotIndex, _contextMenu));
61+
Items.Add(new BagItem(_slotContainer, slotIndex, _contextMenu));
6262
}
6363

6464
PopulateSlotContainer.Populate(_slotContainer, Items);

Intersect.Client.Core/Interface/Game/Bank/BankItem.cs

Lines changed: 15 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -22,15 +22,12 @@ public partial class BankItem : SlotItem
2222
{
2323
// Controls
2424
private readonly Label _quantityLabel;
25-
private BankWindow _bankWindow;
2625

2726
// Context Menu Handling
2827
private MenuItem _withdrawContextItem;
2928

30-
public BankItem(BankWindow bankWindow, Base parent, int index, ContextMenu contextMenu) :
31-
base(parent, nameof(BankItem), index, contextMenu)
29+
public BankItem(Base parent, int index, ContextMenu contextMenu) : base(parent, nameof(BankItem), index, contextMenu)
3230
{
33-
_bankWindow = bankWindow;
3431
TextureFilename = "bankitem.png";
3532

3633
Icon.HoverEnter += Icon_HoverEnter;
@@ -117,6 +114,7 @@ private void Icon_HoverEnter(Base? sender, EventArgs? arguments)
117114

118115
if (bankSlots[SlotIndex] is not { Descriptor: not null } or { Quantity: <= 0 })
119116
{
117+
_quantityLabel.IsVisibleInParent = false;
120118
return;
121119
}
122120

@@ -206,29 +204,28 @@ public override bool DragAndDrop_HandleDrop(Package package, int x, int y)
206204
}
207205
}
208206

207+
if (Globals.BankSlots is not { Length: > 0 } bankSlots)
208+
{
209+
return false;
210+
}
211+
209212
var targetNode = Interface.FindComponentUnderCursor();
210213

211214
// Find the first parent acceptable in that tree that can accept the package
212215
while (targetNode != default)
213216
{
217+
if (bankSlots[SlotIndex] is not { Quantity: > 0 } slot)
218+
{
219+
return false;
220+
}
221+
214222
switch (targetNode)
215223
{
216224
case BankItem bankItem:
217225
PacketSender.SendMoveBankItems(SlotIndex, bankItem.SlotIndex);
218-
return true;
226+
return bankSlots[bankItem.SlotIndex] is not { Quantity: > 0 };
219227

220228
case InventoryItem inventoryItem:
221-
222-
if (Globals.BankSlots is not { Length: > 0 } bankSlots)
223-
{
224-
return false;
225-
}
226-
227-
if (bankSlots[SlotIndex] is not { Quantity: > 0 } slot)
228-
{
229-
return false;
230-
}
231-
232229
player.TryRetrieveItemFromBank(
233230
SlotIndex,
234231
inventorySlotIndex: inventoryItem.SlotIndex,
@@ -271,7 +268,7 @@ public override void Update()
271268
var bankSlot = bankSlots[SlotIndex];
272269
var descriptor = bankSlot.Descriptor;
273270

274-
_quantityLabel.IsVisibleInParent = !Icon.IsDragging && descriptor.IsStackable && bankSlot.Quantity > 1;
271+
_quantityLabel.IsVisibleInParent = descriptor.IsStackable && bankSlot.Quantity > 1 && !Icon.IsHidden;
275272
if (_quantityLabel.IsVisibleInParent)
276273
{
277274
_quantityLabel.Text = Strings.FormatQuantityAbbreviated(bankSlot.Quantity);
@@ -295,6 +292,7 @@ public override void Update()
295292
{
296293
Icon.Texture = default;
297294
Icon.IsVisibleInParent = false;
295+
_quantityLabel.IsVisibleInParent = false;
298296
}
299297
}
300298
}

Intersect.Client.Core/Interface/Game/Bank/BankWindow.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ private void InitItemContainer()
6767
{
6868
for (var slotIndex = 0; slotIndex < Globals.BankSlotCount; slotIndex++)
6969
{
70-
Items.Add(new BankItem(this, _slotContainer, slotIndex, _contextMenu));
70+
Items.Add(new BankItem(_slotContainer, slotIndex, _contextMenu));
7171
}
7272

7373
PopulateSlotContainer.Populate(_slotContainer, Items);

Intersect.Client.Core/Interface/Game/Crafting/RecipeItem.cs

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
using Intersect.Client.General;
55
using Intersect.Framework.Core.GameObjects.Crafting;
66
using Intersect.Framework.Core.GameObjects.Items;
7-
using Intersect.GameObjects;
87

98
namespace Intersect.Client.Interface.Game.Crafting;
109

@@ -14,8 +13,6 @@ public partial class RecipeItem
1413

1514
public ImagePanel? Container;
1615

17-
public bool IsDragging;
18-
1916
//Dragging
2017
private bool mCanDrag;
2118

Intersect.Client.Core/Interface/Game/Hotbar/HotbarItem.cs

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -217,12 +217,9 @@ public override bool DragAndDrop_HandleDrop(Package package, int x, int y)
217217
if (targetNode is HotbarItem hotbarItem)
218218
{
219219
player.HotbarSwap(SlotIndex, hotbarItem.SlotIndex);
220-
return true;
221-
}
222-
else
223-
{
224-
targetNode = targetNode.Parent;
225220
}
221+
222+
targetNode = targetNode.Parent;
226223
}
227224

228225
// If we've reached the top of the tree, we can't drop here, so cancel drop

Intersect.Client.Core/Interface/Game/Inventory/InventoryItem.cs

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313
using Intersect.Client.Interface.Game.Hotbar;
1414
using Intersect.Client.Interface.Game.Shop;
1515
using Intersect.Client.Localization;
16-
using Intersect.Client.Networking;
1716
using Intersect.Configuration;
1817
using Intersect.Framework.Core.GameObjects.Items;
1918
using Intersect.GameObjects;
@@ -421,7 +420,7 @@ public override bool DragAndDrop_HandleDrop(Package package, int x, int y)
421420

422421
case BagItem bagItem:
423422
player.TryStoreItemInBag(SlotIndex, bagItem.SlotIndex);
424-
return true;
423+
return false;
425424

426425
case BankItem bankItem:
427426
return player.TryStoreItemInBank(
@@ -433,11 +432,11 @@ public override bool DragAndDrop_HandleDrop(Package package, int x, int y)
433432

434433
case HotbarItem hotbarItem:
435434
player.AddToHotbar(hotbarItem.SlotIndex, 0, SlotIndex);
436-
return true;
435+
return false;
437436

438437
case ShopWindow:
439438
player.TrySellItem(SlotIndex);
440-
return true;
439+
return false;
441440

442441
default:
443442
targetNode = targetNode.Parent;
@@ -496,17 +495,14 @@ public override void Update()
496495
}
497496

498497
var equipped = Globals.Me.MyEquipment.Any(s => s == SlotIndex);
499-
var isDragging = Icon.IsDragging;
500-
_equipImageBackground.IsVisibleInParent = !isDragging && equipped;
501-
_equipLabel.IsVisibleInParent = !isDragging && equipped;
502-
503-
_quantityLabel.IsVisibleInParent = !isDragging && descriptor.IsStackable && inventorySlot.Quantity > 1;
498+
_equipImageBackground.IsVisibleInParent = !Icon.IsDragging && equipped;
499+
_equipLabel.IsVisibleInParent = !Icon.IsHidden && equipped;
500+
_quantityLabel.IsVisibleInParent = !Icon.IsHidden && descriptor.IsStackable && inventorySlot.Quantity > 1;
504501
if (_quantityLabel.IsVisibleInParent)
505502
{
506503
_quantityLabel.Text = Strings.FormatQuantityAbbreviated(inventorySlot.Quantity);
507504
}
508-
509-
_cooldownLabel.IsVisibleInParent = !isDragging && Globals.Me.IsItemOnCooldown(SlotIndex);
505+
_cooldownLabel.IsVisibleInParent = !Icon.IsHidden && Globals.Me.IsItemOnCooldown(SlotIndex);
510506
if (_cooldownLabel.IsVisibleInParent)
511507
{
512508
var itemCooldownRemaining = Globals.Me.GetItemRemainingCooldown(SlotIndex);

Intersect.Client.Core/Interface/Game/Shop/ShopItem.cs

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,11 @@ namespace Intersect.Client.Interface.Game.Shop;
1616
public partial class ShopItem : SlotItem
1717
{
1818
private readonly int _mySlot;
19-
private readonly ShopWindow _shopWindow;
2019
private readonly MenuItem _buyMenuItem;
2120

22-
public ShopItem(ShopWindow shopWindow, Base parent, int index, ContextMenu contextMenu)
21+
public ShopItem(Base parent, int index, ContextMenu contextMenu)
2322
: base(parent, nameof(ShopItem), index, contextMenu)
2423
{
25-
_shopWindow = shopWindow;
2624
_mySlot = index;
2725
TextureFilename = "shopitem.png";
2826

@@ -106,7 +104,7 @@ private void Icon_DoubleClicked(Base sender, MouseButtonState arguments)
106104
Globals.Me?.TryBuyItem(_mySlot);
107105
}
108106

109-
private void _buyMenuItem_Clicked(Base sender, Framework.Gwen.Control.EventArguments.MouseButtonState arguments)
107+
private void _buyMenuItem_Clicked(Base sender, MouseButtonState arguments)
110108
{
111109
Globals.Me?.TryBuyItem(_mySlot);
112110
}

Intersect.Client.Core/Interface/Game/Shop/ShopWindow.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ private void InitItemContainer()
5858

5959
for (var slotIndex = 0; slotIndex < gameShop.SellingItems.Count; slotIndex++)
6060
{
61-
_items.Add(new ShopItem(this, _slotContainer, slotIndex, _contextMenu));
61+
_items.Add(new ShopItem(_slotContainer, slotIndex, _contextMenu));
6262
}
6363

6464
PopulateSlotContainer.Populate(_slotContainer, _items);

0 commit comments

Comments
 (0)