private ItemData Unequip(EquipmentSlotCombination slotCombination) { foreach (var slotType in slotCombination.SlotsTaken) { if (slotType != slotCombination.PrimarySlot) { GetEquipmentSlot(slotType).Unequip(); } } ItemData result = GetEquipmentSlot(slotCombination.PrimarySlot).UnequipAndReturn(); Main.MessageBus.Publish(new ItemEquipMessage(ItemEquipMessage.EventType.Unequip, result, slotCombination.PrimarySlot)); return(result); }
public CanEquipResult CanEquip(EquipmentSlotCombination slotCombination) { var result = new CanEquipResult(); bool primaryConflictDetected = false; bool secondaryConflictDetected = false; foreach (var slotType in slotCombination.SlotsTaken) { EquipmentSlotData slotData = GetEquipmentSlot(slotType); if (slotData == null) { result.Status = CanEquipStatus.No_Impossible; return(result); } if (!slotData.Empty) { result.AddConflictingItem(slotData.Item); if (slotType == slotCombination.PrimarySlot) { primaryConflictDetected = true; } else { secondaryConflictDetected = true; } } } if (primaryConflictDetected && !secondaryConflictDetected) { result.Status = CanEquipStatus.No_PrimaryConflict; } else if (secondaryConflictDetected) { result.Status = CanEquipStatus.No_SecondaryConflict; } else { result.Status = CanEquipStatus.Yes; } return(result); }