public void EquipPart(AbilityPart part) { if (IsPartEquipped(part)) { return; } Unequip(part.Type); switch (part) { case AbilityBehaviour behaviour: ChangeBehaviour(behaviour); break; case AbilityAction action: ChangeAction(action); break; default: throw new NotImplementedException(); } part.OnEquipped(); }
public IEnumerator CannotHaveNegativeAmmo() { int startAmmo = 0; Ability ability = GetAbility(); // Ensure ability isn't charged AbilityPart nonChargedBehaviour = AbilityLoader.Behaviour.Where(x => !(x is ChargedBehaviour)).Random(); ability.EquipPart(nonChargedBehaviour); // We do this after equipping since changing behaviour will reset ammo count to max ability.CurrentAmmo = startAmmo; GlobalCallbacks.AddUpdateListener(() => ability.UpdateState(FireInput)); // First we wait for the cooldown to expire yield return(new WaitForSeconds(ability.Behaviour.CooldownDuration)); // Then we wait a single frame for the actual shooting to occur yield return(0); Assert.AreEqual(startAmmo, ability.CurrentAmmo); }
private bool IsPartEquipped(AbilityPart part) { return(GetEquippedPartOfType(part.Type) == part); }