/// <summary> /// Echange la position de deux items par réflexion /// </summary> /// <param name=""></param> /// <param name=""></param> public static void ExchangeItems(InventorySlot src, InventorySlot dest) { if (src == null || dest == null) return; BindingFlags reflectionFlags = BindingFlags.Instance | BindingFlags.Public; InventorySlot tempDest = new InventorySlot(dest.IsEmpty, dest.Item, dest.Amount, dest.Type); // Slot destinataire rempli avec les données du slot source dest.GetType().GetProperty("IsEmpty", reflectionFlags).SetValue(dest, src.IsEmpty, null); dest.GetType().GetProperty("Item", reflectionFlags).SetValue(dest, src.Item, null); dest.GetType().GetProperty("Amount", reflectionFlags).SetValue(dest, src.Amount, null); dest.GetType().GetProperty("Type", reflectionFlags).SetValue(dest, src.Type, null); // Slot source rempli avec les données du slot destinataire gardées temporairement src.GetType().GetProperty("IsEmpty", reflectionFlags).SetValue(src, tempDest.IsEmpty, null); src.GetType().GetProperty("Item", reflectionFlags).SetValue(src, tempDest.Item, null); src.GetType().GetProperty("Amount", reflectionFlags).SetValue(src, tempDest.Amount, null); src.GetType().GetProperty("Type", reflectionFlags).SetValue(src, tempDest.Type, null); }
/// <summary> /// A partir de deux références, copie les propriétés d'un slot vers un autre par réflexion /// </summary> /// <param name="src"></param> /// <param name="dest"></param> /// <param name="isToMerge"> Si mis à vrai, rassembler deux même objets dans une seule stack</param> public static void MoveOrMergeItem(InventorySlot src, InventorySlot dest, bool isToMerge) { if (src == null || dest == null) return; BindingFlags reflectionFlags = BindingFlags.Instance | BindingFlags.Public; dest.GetType().GetProperty("IsEmpty", reflectionFlags).SetValue(dest, src.IsEmpty, null); dest.GetType().GetProperty("Item", reflectionFlags).SetValue(dest, src.Item, null); dest.GetType().GetProperty("Amount", reflectionFlags).SetValue(dest, src.Amount + (isToMerge ? dest.Amount : 0) , null); dest.GetType().GetProperty("Type", reflectionFlags).SetValue(dest, src.Type, null); // le slot source est réinitialisé src.GetType().GetProperty("IsEmpty", reflectionFlags).SetValue(src, true, null); src.GetType().GetProperty("Item", reflectionFlags).SetValue(src, new Item(), null); src.GetType().GetProperty("Amount", reflectionFlags).SetValue(src, 0, null); src.GetType().GetProperty("Type", reflectionFlags).SetValue(src, 0, null); }
/// <summary> /// Créée un nouvel item associé au slot destinataire et répartie la quantité totale sur le slot source et celui-ci (par réflexion) /// </summary> /// <param name="src"></param> /// <param name="dest"></param> public static void SeparateItemStack(InventorySlot src, InventorySlot dest) { if (src.Amount < 2 || src == null || dest == null) return; BindingFlags reflectionFlags = BindingFlags.Instance | BindingFlags.Public; PropertyInfo pi = dest.GetType().GetProperty("IsEmpty", reflectionFlags); pi.SetValue(dest, src.IsEmpty, null); pi = dest.GetType().GetProperty("Item", reflectionFlags); pi.SetValue(dest, src.Item, null); pi = dest.GetType().GetProperty("Amount", reflectionFlags); pi.SetValue(dest, src.Amount/2, null); pi = dest.GetType().GetProperty("Type", reflectionFlags); pi.SetValue(dest, src.Type, null); src.GetType().GetProperty("Amount", reflectionFlags).SetValue(src, src.Amount / 2 + ((src.Amount % 2 == 0) ? 0 : 1), null); }
/// <summary> /// Remplit les tableau de slots d'emplacements vides /// </summary> public static void InitSlotsTable() { for (int i = 0; i < SLOTS_NBR; i++) { slots[i] = new InventorySlot(); } for (int i = 0; i < SHORTCUTSLOTS_NBR; i++) shorcutSlots[i] = new InventorySlot(); }