private void clickSet(object sender, EventArgs e) { if (!checkSpecialWonderCard(mg)) return; sender = ((sender as ToolStripItem)?.Owner as ContextMenuStrip)?.SourceControl ?? sender as PictureBox; int index = Array.IndexOf(pba, sender); // Hijack to the latest unfilled slot if index creates interstitial empty slots. int lastUnfilled = getLastUnfilledByType(mg, mga); if (lastUnfilled > -1 && lastUnfilled < index) index = lastUnfilled; if (mg is PCD && mga.Gifts[index] is PGT) mg = (mg as PCD).Gift; else if (mg.Type != mga.Gifts[index].Type) { WinFormsUtil.Alert("Can't set slot here.", $"{mg.Type} != {mga.Gifts[index].Type}"); return; } setBackground(index, Properties.Resources.slotSet); mga.Gifts[index] = mg.Clone(); setGiftBoxes(); setCardID(mg.CardID); }
private void pbBoxSlot_DragDrop(object sender, DragEventArgs e) { int index = Array.IndexOf(pba, sender); // Hijack to the latest unfilled slot if index creates interstitial empty slots. int lastUnfilled = getLastUnfilledByType(mg, mga); if (lastUnfilled > -1 && lastUnfilled < index && mga.Gifts[lastUnfilled].Type == mga.Gifts[index].Type) index = lastUnfilled; if (wc_slot == -1) // dropped { string[] files = (string[])e.Data.GetData(DataFormats.FileDrop); if (files.Length < 1) return; if (PCD.Size < (int)new FileInfo(files[0]).Length) { WinFormsUtil.Alert("Data size invalid.", files[0]); return; } byte[] data = File.ReadAllBytes(files[0]); MysteryGift gift = MysteryGift.getMysteryGift(data, new FileInfo(files[0]).Extension); if (gift is PCD && mga.Gifts[index] is PGT) gift = (gift as PCD).Gift; else if (gift.Type != mga.Gifts[index].Type) { WinFormsUtil.Alert("Can't set slot here.", $"{gift.Type} != {mga.Gifts[index].Type}"); return; } setBackground(index, Properties.Resources.slotSet); mga.Gifts[index] = gift.Clone(); setCardID(mga.Gifts[index].CardID); viewGiftData(mga.Gifts[index]); } else // Swap Data { MysteryGift s1 = mga.Gifts[index]; MysteryGift s2 = mga.Gifts[wc_slot]; if (s2 is PCD && s1 is PGT) { // set the PGT to the PGT slot instead viewGiftData(s2); clickSet(pba[index], null); { WinFormsUtil.Alert($"Set {s2.Type} gift to {s1.Type} slot."); return; } } if (s1.Type != s2.Type) { WinFormsUtil.Alert($"Can't swap {s2.Type} with {s1.Type}."); return; } mga.Gifts[wc_slot] = s1; mga.Gifts[index] = s2; if (mga.Gifts[wc_slot].Empty) // empty slot created, slide down { int i = wc_slot; while (i < index) { if (mga.Gifts[i + 1].Empty) break; if (mga.Gifts[i + 1].Type != mga.Gifts[i].Type) break; i++; var mg1 = mga.Gifts[i]; var mg2 = mga.Gifts[i - 1]; mga.Gifts[i - 1] = mg1; mga.Gifts[i] = mg2; } index = i-1; } } setBackground(index, Properties.Resources.slotView); setGiftBoxes(); }