2 using Microsoft.Xna.Framework;
3 using Microsoft.Xna.Framework.Graphics;
8 namespace Loot.UI.Common.Controls.Button
10 internal class GuiInteractableItemButton : GuiItemButton
12 protected bool RightClickFunctionalityEnabled =
true;
13 protected bool TakeUserItemOnClick =
true;
14 public Action<Item> OnItemChange;
16 public bool PerformRegularClickInteraction {
get;
protected internal set; } =
true;
18 internal GuiInteractableItemButton(ButtonType buttonType,
int netId = 0,
int stack = 0, Texture2D hintTexture = null,
string hintText = null,
string hintOnHover = null) : base(buttonType, netId, stack, hintTexture, hintText, hintOnHover)
20 OnClick += HandleClickAction;
23 public override void Update(GameTime gameTime)
25 base.Update(gameTime);
26 if (!RightClickFunctionalityEnabled || !IsMouseHovering || !Main.mouseRight)
35 Main.playerInventory =
true;
38 if (Main.stackSplit <= 1 &&
39 (Main.mouseItem.type == Item.type
40 || Main.mouseItem.IsAir))
42 int num2 = Main.superFastStack + 1;
43 for (
int j = 0; j < num2; j++)
46 if (!Main.mouseItem.IsAir && ((Main.mouseItem.stack >= Main.mouseItem.maxStack) || Item.stack <= 0))
54 Main.PlaySound(18, -1, -1, 1);
58 if (Main.mouseItem.IsAir)
60 Main.mouseItem = Item.Clone();
64 Main.mouseItem.Prefix((
int)Item.prefix);
67 Main.mouseItem.stack = 0;
71 Main.mouseItem.stack++;
74 Main.stackSplit = Main.stackSplit == 0 ? 15 : Main.stackDelay;
88 public virtual void ChangeItem(
int type, Item item = null)
100 Item.SetDefaults(type);
103 OnItemChange?.Invoke(Item);
106 public virtual bool CanTakeItem(Item givenItem) => !givenItem.IsAir;
108 public virtual void PostOnRightClick()
112 public virtual void PreOnClick(UIMouseEvent evt, UIElement e)
116 public virtual void PostOnClick(UIMouseEvent evt, UIElement e)
120 private void HandleClickAction(UIMouseEvent evt, UIElement e)
124 if (PerformRegularClickInteraction)
130 if (Main.mouseItem.IsAir)
132 Main.PlaySound(SoundID.Grab);
133 Main.playerInventory =
true;
134 if (TakeUserItemOnClick)
136 Main.mouseItem = Item.Clone();
143 else if (CanTakeItem(Main.mouseItem))
145 Main.PlaySound(SoundID.Grab);
146 Main.playerInventory =
true;
148 if (Item.type == Main.mouseItem.type)
151 var newStack = Item.stack + Main.mouseItem.stack;
153 if (Item.maxStack >= newStack)
155 Item.stack = newStack;
156 if (TakeUserItemOnClick)
158 Main.mouseItem.TurnToAir();
164 var stackDiff = newStack - Item.maxStack;
165 Item.stack = Item.maxStack;
166 if (TakeUserItemOnClick)
168 Main.mouseItem.stack = stackDiff;
176 var tmp = Item.Clone();
177 var tmp2 = Main.mouseItem.Clone();
178 if (TakeUserItemOnClick)
180 Main.mouseItem = tmp;
189 else if (CanTakeItem(Main.mouseItem))
191 Main.PlaySound(SoundID.Grab);
192 Main.playerInventory =
true;
193 ChangeItem(0, Main.mouseItem.Clone());
194 if (TakeUserItemOnClick)
196 Main.mouseItem.TurnToAir();