private void DoAbility(Collider other) { if ((network && network.IsHost()) || !network) { Vector3 position = other ? other.gameObject.transform.position : transform.position; EventController.FireEvent(new WorldVFXMessage(WorldSpaceVFX.WorldVFXType.bomb, position)); if (network) { network.SendWorldVFX(WorldSpaceVFX.WorldVFXType.bomb, position, -1, parent.GetIdOfAbilityBall(this)); } //First radius Collider[] cols = Physics.OverlapSphere(transform.position, lastRadius); foreach (Collider collider in cols) { TargetDummy t = collider.GetComponent <TargetDummy>(); EntityHealth enemy = collider.GetComponent <EntityHealth>(); float sqrDist = (collider.transform.position - transform.position).sqrMagnitude; if (sqrDist <= firstRadius * firstRadius) { if (t) { t.ShowHit(75); } else if (enemy) { DoBombDamage(enemy, 75); } } else if (sqrDist <= secondRadius * secondRadius) { if (t) { t.ShowHit(50); } else if (enemy) { DoBombDamage(enemy, 50); } } else if (sqrDist <= lastRadius * lastRadius) { if (t) { t.ShowHit(50); } else if (enemy) { DoBombDamage(enemy, 50); } } } SoundManager.PlaySoundAt("Bomb Explosion", transform.position); } base.TriggerAbility(); }
public override void TriggerAbility() { //Ball Explosion Collider[] cols = Physics.OverlapSphere(transform.position, radius); foreach (Collider collider in cols) { TargetDummy t = collider.GetComponent <TargetDummy>(); if (t) { t.ShowHit(25); } //Send object away Rigidbody rb = collider.gameObject.GetComponent <Rigidbody>(); if (rb) { //Get Directional vector away from ball Vector3 dir = (rb.gameObject.transform.position - gameObject.transform.position).normalized; //Add force in that direction + some Y component rb.AddForce(new Vector3(dir.x, yVectorIncrease, dir.z) * forceAmount, ForceMode.Impulse); } } base.TriggerAbility(); }