public void Use(AbilityUseParams useParams) { DealRadialDamage(useParams); PlayParticleEffect(); audioSource.clip = config.GetAudioClip(); audioSource.Play(); }
private void DealRadialDamage(AbilityUseParams useParams) { // Static sphere cast for targets RaycastHit[] hits = Physics.SphereCastAll( transform.position, config.GetRadius(), Vector3.up, config.GetRadius() ); foreach (RaycastHit hit in hits) { var damageable = hit.collider.gameObject.GetComponent <IDamageable>(); bool hitPlayer = hit.collider.gameObject.GetComponent <Player>(); if (damageable != null && !hitPlayer) { float damageToDeal = useParams.baseDamage + config.GetDamageToEachTarget(); // TODO ok Rick? damageable.TakeDamage(damageToDeal); } } }
public void Use(AbilityUseParams useParams) { print("Area Effect used by " + gameObject.name); // Static sphere cast for targets RaycastHit[] hits = Physics.SphereCastAll( transform.position, config.GetRadius(), Vector3.up, config.GetRadius() ); foreach (RaycastHit hit in hits) { var damageable = hit.collider.gameObject.GetComponent <IDamageable>(); if (damageable != null) { float damageToDeal = useParams.baseDamage + config.GetDamageToEachTarget(); // TODO ok Rick? damageable.TakeDamage(damageToDeal); } } }
public void UseAbility(int abilityIndex) //TODO change to individual ability casts per PlayerInput assignment { var energyComponent = GetComponent <Energy>(); var energyCost = abilities[abilityIndex].GetEnergyCost(); if (energyComponent.IsEnergyAvailable(energyCost)) { energyComponent.ConsumeEnergy(energyCost); if (UnityEngine.Random.Range(1.0f, 100.0f) < critChance && UnityEngine.Random.Range(1, 100) > enemy.dodgechance) { var abilityParams = new AbilityUseParams(enemy, critDamage); abilities[abilityIndex].Use(abilityParams); } else if (UnityEngine.Random.Range(1, 100) > enemy.dodgechance) { var abilityParams = new AbilityUseParams(enemy, damage); abilities[abilityIndex].Use(abilityParams); } } else { DamageTextController.CreateFloatingNotEnoughEnergyText("Not Enough Energy.", transform); } }