private void BeginDrag(UICatalogElement item, uint uid) { DragUID = uid; DragItem = new UICatalogItem(true); DragItem.SetDisabled(false); DragItem.Info = item; DragItem.Info.CalcPrice = item.CalcPrice; DragItem.Icon = (item.Special?.Res != null) ? item.Special.Res.GetIcon(item.Special.ResID) : Catalog.GetObjIcon(item.Item.GUID); DragItem.Tooltip = (item.CalcPrice > 0) ? ("$" + item.CalcPrice.ToString()) : null; LastMouse = true; Add(DragItem); BuildInventory(); BuildOffer(MyOffer.ObjectOffer, OfferCatalog); }
public override void Update(UpdateState state) { var mouseDown = state.MouseState.LeftButton == ButtonState.Pressed; if (QueryPanel.Parent != this) { Remove(QueryPanel); Add(QueryPanel); } for (int i = 0; i < NotifyRects.Count; i++) { var rect = NotifyRects[i]; var time = rect.Item2 - 1f / (FSOEnvironment.RefreshRate * 4); if (time < 0) { NotifyRects.RemoveAt(i--); } else { NotifyRects[i] = new Tuple <Rectangle, float>(rect.Item1, time); } } if (TimeSinceType > 0) { TimeSinceType--; } else { var str = MyOffer.MoneyOffer.ToString(); if (AmountEntry.CurrentText != str) { _InternalChange = true; AmountEntry.CurrentText = str; _InternalChange = false; } } base.Update(state); bool refreshInventory = false; //are we currently moving an inventory item? if (DragItem != null) { DragItem.Position = GlobalPoint(state.MouseState.Position.ToVector2() - new Vector2(22, 22)); if (!mouseDown) { //try place the item down var inventoryRect = LocalRect(Catalog.Position.X, Catalog.Position.Y, (Catalog.PageSize / 2) * 45, 80); var myOfferRect = LocalRect(OfferCatalog.Position.X, OfferCatalog.Position.Y, (OfferCatalog.PageSize / 2) * 45, 80); if (inventoryRect.Contains(state.MouseState.Position)) { //remove from my offer, if it's present var index = Array.FindIndex(MyOffer.ObjectOffer, x => x != null && (x.PID == DragUID || (x.GUID < 3 && x.GUID == DragUID))); if (index != -1) { MyOffer.ObjectOffer[index] = null; Send("trade_offer", "i0|" + index); } } else if (myOfferRect.Contains(state.MouseState.Position)) { //add to my offer, it it isn't present. var index = Array.FindIndex(MyOffer.ObjectOffer, x => x != null && x.PID == DragUID); if (index == -1) { var targ = Math.Min(4, (state.MouseState.Position.X - myOfferRect.X) / 45); if (DragUID == 1 || DragUID == 2) { MyOffer.ObjectOffer[targ] = new VMEODSecureTradeObject(DragUID, 0, null); Send("trade_offer", "p" + ((DragUID == 2)?"o":"n") + targ); } else { var obj = LastInventory.First(x => x.ObjectPID == DragUID); MyOffer.ObjectOffer[targ] = new VMEODSecureTradeObject(obj.GUID, obj.ObjectPID, null); Send("trade_offer", "i" + obj.ObjectPID + "|" + targ); } } } //do nothing, stop dragging Remove(DragItem); DragUID = 0; DragItem = null; BuildOffer(MyOffer.ObjectOffer, OfferCatalog); refreshInventory = true; } } var inventory = LotController.vm.MyInventory; if (LastInventory != null) { if (LastInventory.Count != inventory.Count) { refreshInventory = true; } else { for (int i = 0; i < inventory.Count; i++) { if (LastInventory[i] != inventory[i]) { refreshInventory = true; break; } } } } else { refreshInventory = true; } if (refreshInventory) { BuildInventory(); } LastMouse = mouseDown; }