public bool AddRandomWeaponQuality(ref float budget, SpecificWeapon specificWeapon) { List <WeaponQuality> qualities = qualityCollection.items.ToList(); int weaponIndex = -1; for (int i = 0; i < itemCollection.Length; i++) { if (itemCollection[i] == specificWeapon.weapon) { weaponIndex = i; } } bool hasMaterial = specificWeapon.specialMaterial != null; bool needsBonus = !Campaign.UsesAutomaticBonusProgressionRules && specificWeapon.enhancementBonus == null; List <WeaponQuality> currentWeaponQualities = new List <WeaponQuality>(specificWeapon.specialAbilities); if (!needsBonus) { currentWeaponQualities.Add(specificWeapon.enhancementBonus); } WeaponQuality[] currentQualities = currentWeaponQualities.ToArray(); for (int i = 0; i < qualities.Count; i++) { string qualityType = qualities[i].qualityType; bool isBonus = qualityType == "EnhancementBonus"; bool isMaterial = qualityType == "SpecialMaterial"; bool isSpecial = qualityType == "SpecialMaterial"; if (!matrix[weaponIndex, i] || (isBonus && !needsBonus) || (isSpecial && needsBonus) || (isMaterial && hasMaterial) || qualities[i].CostToIncrease(currentQualities) > budget) { qualities.RemoveAt(i); i--; } } if (qualities.Count == 0) { return(false); } WeaponQuality chosenQuality = WeaponQuality.PickItem(qualities.ToArray()); if (chosenQuality.qualityType == "EnhancementBonus") { specificWeapon.enhancementBonus = chosenQuality; } if (chosenQuality.qualityType == "SpecialMaterial") { specificWeapon.specialMaterial = chosenQuality; } if (chosenQuality.qualityType == "SpecialAbility") { specificWeapon.AddSpecialAbility(chosenQuality); } return(true); }
public void AssignRandomWeapon(ref float budget, SpecificWeapon specificWeapon) { specificWeapon.weapon = itemCollection.PickWeapon(ref budget); }