Exemplo n.º 1
0
    //--------------------------------------------------------------------------------------
    //  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));
        }
    }
Exemplo n.º 2
0
    //--------------------------------------------------------------------------------------
    // 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));
                }
            }
        }
    }