public void AddWeapons(IReadOnlyCollection <RangedWeapon> rangedWeapons, IReadOnlyCollection <MeleeWeapon> meleeWeapons) { if (rangedWeapons?.Count > 0) { RangedWeapons.AddRange(rangedWeapons); } if (meleeWeapons?.Count > 0) { MeleeWeapons.AddRange(meleeWeapons); } if (RangedWeapons.Count > 0) { if (RangedWeapons.Count == 1) { EquippedRangedWeapons.AddRange(RangedWeapons); } else if (RangedWeapons[0].Template.Location == EquipLocation.OneHand && RangedWeapons[1].Template.Location == EquipLocation.OneHand) { EquippedRangedWeapons.Add(RangedWeapons[0]); EquippedRangedWeapons.Add(RangedWeapons[1]); } else { EquippedRangedWeapons.Add(RangedWeapons[0]); } } if (MeleeWeapons.Count > 0) { if (EquippedRangedWeapons.Count == 0) { // we have two hands free for close combat weapons if (MeleeWeapons.Count == 1) { EquippedMeleeWeapons.AddRange(MeleeWeapons); } else if (MeleeWeapons[0].Template.Location == EquipLocation.OneHand && MeleeWeapons[1].Template.Location == EquipLocation.OneHand) { EquippedMeleeWeapons.Add(MeleeWeapons[0]); EquippedMeleeWeapons.Add(MeleeWeapons[1]); } else { EquippedMeleeWeapons.Add(MeleeWeapons[0]); } } else if (EquippedRangedWeapons.Count == 1 && EquippedRangedWeapons[0].Template.Location == EquipLocation.OneHand) { if (MeleeWeapons[0].Template.Location == EquipLocation.OneHand) { EquippedMeleeWeapons.Add(MeleeWeapons[0]); } else if (MeleeWeapons.Count > 1 && MeleeWeapons[1].Template.Location == EquipLocation.OneHand) { EquippedMeleeWeapons.Add(MeleeWeapons[1]); } } } }