public void Update() { if (Globals.Bank[mMySlot].ItemId != mCurrentItemId) { mCurrentItemId = Globals.Bank[mMySlot].ItemId; var item = ItemBase.Get(Globals.Bank[mMySlot].ItemId); if (item != null) { var itemTex = Globals.ContentManager.GetTexture(GameContentManager.TextureType.Item, item.Icon); if (itemTex != null) { Pnl.Texture = itemTex; Pnl.RenderColor = item.Color; } else { if (Pnl.Texture != null) { Pnl.Texture = null; } } } else { if (Pnl.Texture != null) { Pnl.Texture = null; } } } if (!IsDragging) { if (mMouseOver) { if (!Globals.InputManager.MouseButtonDown(GameInput.MouseButtons.Left)) { mCanDrag = true; mMouseX = -1; mMouseY = -1; if (Globals.System.GetTimeMs() < mClickTime) { //Globals.Me.TryUseItem(_mySlot); mClickTime = 0; } } else { if (mCanDrag && Draggable.Active == null) { if (mMouseX == -1 || mMouseY == -1) { mMouseX = InputHandler.MousePosition.X - Pnl.LocalPosToCanvas(new Point(0, 0)).X; mMouseY = InputHandler.MousePosition.Y - Pnl.LocalPosToCanvas(new Point(0, 0)).Y; } else { var xdiff = mMouseX - (InputHandler.MousePosition.X - Pnl.LocalPosToCanvas(new Point(0, 0)).X); var ydiff = mMouseY - (InputHandler.MousePosition.Y - Pnl.LocalPosToCanvas(new Point(0, 0)).Y); if (Math.Sqrt(Math.Pow(xdiff, 2) + Math.Pow(ydiff, 2)) > 5) { IsDragging = true; mDragIcon = new Draggable( Pnl.LocalPosToCanvas(new Point(0, 0)).X + mMouseX, Pnl.LocalPosToCanvas(new Point(0, 0)).X + mMouseY, Pnl.Texture ); } } } } } } else { if (mDragIcon.Update()) { //Drug the item and now we stopped IsDragging = false; var dragRect = new FloatRect( mDragIcon.X - sItemXPadding / 2, mDragIcon.Y - sItemYPadding / 2, sItemXPadding / 2 + 32, sItemYPadding / 2 + 32 ); float bestIntersect = 0; var bestIntersectIndex = -1; //So we picked up an item and then dropped it. Lets see where we dropped it to. //Check inventory first. if (mBankWindow.RenderBounds().IntersectsWith(dragRect)) { for (var i = 0; i < Globals.BankSlots; i++) { if (mBankWindow.Items[i].RenderBounds().IntersectsWith(dragRect)) { if (FloatRect.Intersect(mBankWindow.Items[i].RenderBounds(), dragRect).Width * FloatRect.Intersect(mBankWindow.Items[i].RenderBounds(), dragRect).Height > bestIntersect) { bestIntersect = FloatRect.Intersect(mBankWindow.Items[i].RenderBounds(), dragRect).Width * FloatRect.Intersect(mBankWindow.Items[i].RenderBounds(), dragRect).Height; bestIntersectIndex = i; } } } if (bestIntersectIndex > -1) { if (mMySlot != bestIntersectIndex) { var allowed = true; //Permission Check if (Globals.GuildBank) { var rank = Globals.Me.GuildRank; if (string.IsNullOrWhiteSpace(Globals.Me.Guild) || (!rank.Permissions.BankDeposit && Globals.Me.Rank != 0)) { ChatboxMsg.AddMessage(new ChatboxMsg(Strings.Guilds.NotAllowedSwap.ToString(Globals.Me.Guild), CustomColors.Alerts.Error, ChatMessageType.Bank)); allowed = false; } } if (allowed) { PacketSender.SendMoveBankItems(bestIntersectIndex, mMySlot); } //Globals.Me.SwapItems(bestIntersectIndex, _mySlot); } } } mDragIcon.Dispose(); } } }
public void Update() { if (Globals.Bank[mMySlot].ItemId != mCurrentItemId) { mCurrentItemId = Globals.Bank[mMySlot].ItemId; var item = ItemBase.Get(Globals.Bank[mMySlot].ItemId); if (item != null) { var itemTex = Globals.ContentManager.GetTexture(GameContentManager.TextureType.Item, item.Icon); if (itemTex != null) { Pnl.Texture = itemTex; } else { if (Pnl.Texture != null) { Pnl.Texture = null; } } } else { if (Pnl.Texture != null) { Pnl.Texture = null; } } } if (!IsDragging) { if (mMouseOver) { if (!Globals.InputManager.MouseButtonDown(GameInput.MouseButtons.Left)) { mCanDrag = true; mMouseX = -1; mMouseY = -1; if (Globals.System.GetTimeMs() < mClickTime) { //Globals.Me.TryUseItem(_mySlot); mClickTime = 0; } } else { if (mCanDrag && Draggable.Active == null) { if (mMouseX == -1 || mMouseY == -1) { mMouseX = InputHandler.MousePosition.X - Pnl.LocalPosToCanvas(new Point(0, 0)).X; mMouseY = InputHandler.MousePosition.Y - Pnl.LocalPosToCanvas(new Point(0, 0)).Y; } else { var xdiff = mMouseX - (InputHandler.MousePosition.X - Pnl.LocalPosToCanvas(new Point(0, 0)).X); var ydiff = mMouseY - (InputHandler.MousePosition.Y - Pnl.LocalPosToCanvas(new Point(0, 0)).Y); if (Math.Sqrt(Math.Pow(xdiff, 2) + Math.Pow(ydiff, 2)) > 5) { IsDragging = true; mDragIcon = new Draggable( Pnl.LocalPosToCanvas(new Point(0, 0)).X + mMouseX, Pnl.LocalPosToCanvas(new Point(0, 0)).X + mMouseY, Pnl.Texture ); } } } } } } else { if (mDragIcon.Update()) { //Drug the item and now we stopped IsDragging = false; var dragRect = new FloatRect( mDragIcon.X - sItemXPadding / 2, mDragIcon.Y - sItemYPadding / 2, sItemXPadding / 2 + 32, sItemYPadding / 2 + 32 ); float bestIntersect = 0; var bestIntersectIndex = -1; //So we picked up an item and then dropped it. Lets see where we dropped it to. //Check inventory first. if (mBankWindow.RenderBounds().IntersectsWith(dragRect)) { for (var i = 0; i < Options.MaxBankSlots; i++) { if (mBankWindow.Items[i].RenderBounds().IntersectsWith(dragRect)) { if (FloatRect.Intersect(mBankWindow.Items[i].RenderBounds(), dragRect).Width * FloatRect.Intersect(mBankWindow.Items[i].RenderBounds(), dragRect).Height > bestIntersect) { bestIntersect = FloatRect.Intersect(mBankWindow.Items[i].RenderBounds(), dragRect).Width * FloatRect.Intersect(mBankWindow.Items[i].RenderBounds(), dragRect).Height; bestIntersectIndex = i; } } } if (bestIntersectIndex > -1) { if (mMySlot != bestIntersectIndex) { //Try to swap.... PacketSender.SendMoveBankItems(bestIntersectIndex, mMySlot); //Globals.Me.SwapItems(bestIntersectIndex, _mySlot); } } } mDragIcon.Dispose(); } } }