//-------------------------------------------------------------------------------------- // GrenadeExplode: Finds all colliders in the m_fExplosionRadius and calls damage functions, // and knockback in the Soldiers case. // //-------------------------------------------------------------------------------------- private void GrenadeExplode() { // Collect all possible colliders Collider[] aSoldierColliders = Physics.OverlapSphere(transform.position, m_fSoldierExplosionRadius, m_lmUnitMask); Collider[] aTeddyColliders = Physics.OverlapSphere(transform.position, m_fTeddyExplosionRadius, m_lmTeddyMask); for (int i = 0; i < aSoldierColliders.Length; i++) { Rigidbody rbTarget = aSoldierColliders[i].GetComponent <Rigidbody>(); //if it does not have a rigidbody if (!rbTarget) { continue; } if (!Physics.Linecast(transform.position, rbTarget.position, m_lmEnvironmentMask)) { SoldierActor gtarget = rbTarget.GetComponent <SoldierActor>(); // Soldier will take damage based on position (See CalculateDamge function below) gtarget.TakeDamage(CalculateDamage(aSoldierColliders[i].transform.position, m_fSoldierExplosionRadius)); // add explosive force for knockback // NOTE: May be replaced with a non-rigidbody knockback if (CalculateDamage(aSoldierColliders[i].transform.position, m_fSoldierExplosionRadius) > 0) { rbTarget.AddExplosionForce(m_ExplosionForce, transform.position, m_fSoldierExplosionRadius, 0.0f, ForceMode.Impulse); } } } for (int i = 0; i < aTeddyColliders.Length; i++) { Rigidbody rbTarget = aTeddyColliders[i].GetComponent <Rigidbody>(); //if it does not have a rigidbody if (!rbTarget) { continue; } Teddy gtarget = rbTarget.GetComponent <Teddy>(); // Teddy will take damage based on position (See CalculateDamge function below) gtarget.TakeDamage(CalculateDamage(aTeddyColliders[i].transform.position, m_fTeddyExplosionRadius)); } }
//-------------------------------------------------------------------------------------- // RocketExplode: This function is called when the Rocket should explode. // Calls CalculateDamage after it finds target in the sphere. //-------------------------------------------------------------------------------------- private void RocketExplode() { //m_asAudioSource.PlayOneShot(m_acExplosionSound); // Rocket Explodes, damaging anything within the radius // Collect all possible colliders Collider[] aSoldierColliders = Physics.OverlapSphere(transform.position, m_fSoldierExplosionRadius, m_lmUnitMask); Collider[] aTeddyColliders = Physics.OverlapSphere(transform.position, m_fTeddyExplosionRadius, m_lmTeddyMask); for (int i = 0; i < aSoldierColliders.Length; i++) { Rigidbody rbTarget = aSoldierColliders[i].GetComponent <Rigidbody>(); //if it does not have a rigidbody if (!rbTarget) { continue; } // if an object in collision zone is a Soldier if (aSoldierColliders[i].gameObject.tag == "Soldier") { // TODO: Explosion particle effect here if (!Physics.Linecast(transform.position, rbTarget.position, m_lmEnvironmentMask)) { SoldierActor gtarget = rbTarget.GetComponent <SoldierActor>(); // Soldier will take damage based on position (See CalculateDamge function below) gtarget.TakeDamage(CalculateDamage(aSoldierColliders[i].transform.position, m_fSoldierExplosionRadius)); // add explosive force for knockback // NOTE: May be replaced with a non-rigidbody knockback if (CalculateDamage(aSoldierColliders[i].transform.position, m_fSoldierExplosionRadius) > 1) { rbTarget.AddExplosionForce(m_ExplosionForce, transform.position, m_fSoldierExplosionRadius, 0.0f, ForceMode.Impulse); } } } } for (int i = 0; i < aTeddyColliders.Length; i++) { Rigidbody rbTarget = aTeddyColliders[i].GetComponent <Rigidbody>(); //if it does not have a rigidbody if (!rbTarget) { continue; } // if an object in collision zone is a Teddy if (aTeddyColliders[i].gameObject.tag == "Teddy") { // TODO: Explosion particle effect here if (!Physics.Linecast(transform.position, rbTarget.position, m_lmEnvironmentMask)) { Teddy gtarget = rbTarget.GetComponent <Teddy>(); // Teddy will take damage based on position (See CalculateDamge function below) gtarget.TakeDamage(CalculateDamage(aTeddyColliders[i].transform.position, m_fTeddyExplosionRadius)); } } } }