// Start is called before the first frame update
    void Start()
    {
        _instance = this;

        Invoke("UpdateCombo", .1f);
    }
Example #2
0
    /// <summary>
    /// Choses what to do, depending on the object hit and the kind of bullet
    /// </summary>
    /// <param name="collideTo"></param>
    /// <param name="v3HitPosition"></param>
    /// <param name="bExplodeAtImpact"></param>
    /// <param name="fExplosionRange"></param>
    /// <param name="bActivateStopTimeAtImpact"></param>
    /// <param name="bulletDamage"></param>
    /// <param name="explosionForce"></param>
    /// <param name="explosionShake"></param>
    public void OnBulletHit(GameObject collideTo, Vector3 v3HitPosition, bool bExplodeAtImpact, float fExplosionRange, bool bActivateStopTimeAtImpact, int bulletDamage, float explosionForce, float explosionShake, float bulletStun, string sBulletName, bool explosionDealsDamage)
    {
        C_ComboManager comboInstance = C_ComboManager.Instance;

        if (collideTo.gameObject.layer == 12 || collideTo.gameObject.layer == 9)
        {
            GetComponent <C_Fx>().ImpactOnEnnemi(v3HitPosition);
            comboInstance.AddCombo(1);
            Invoke("HitMarkerSoundFunc", 0.05f * Time.timeScale);
        }
        else
        {
            if (collideTo.GetComponent <C_ShootTrigger>() == null && collideTo.GetComponent <C_TriggerShootDetection>() == null && collideTo.GetComponent <C_ShooterBullet>() == null)
            {
                comboInstance.BreakCombo(true);
            }

            GetComponent <C_Fx>().ImpactOnWalls(v3HitPosition);
        }


        if (bExplodeAtImpact)
        {
            GetComponent <C_Fx>().BulletExplosion(v3HitPosition, fExplosionRange);
            Collider[] hitItems        = Physics.OverlapSphere(v3HitPosition, fExplosionRange);
            bool       hitableAffected = false;
            if (collideTo.GetComponent <C_BulletAffected>())
            {
                collideTo.GetComponent <C_BulletAffected>().OnBulletHit(bulletDamage, bulletStun, sBulletName);
            }
            foreach (Collider hitObj in hitItems)
            {
                if (hitObj.GetComponent <C_BulletAffected>() != null)
                {
                    // TODO :
                    // Kill entité affectée.
                    hitableAffected = true;
                    if (explosionDealsDamage)
                    {
                        hitObj.GetComponent <C_BulletAffected>().OnBulletHit(bulletDamage, bulletStun, sBulletName);
                    }
                    hitObj.GetComponent <C_BulletAffected>().OnExplosionAffect(v3HitPosition, explosionForce, fExplosionRange, sBulletName);
                }
            }

            if (hitableAffected)
            {
                GameObject.FindObjectOfType <C_Ui>().HitSomethingImportant();
            }
            GameObject.FindObjectOfType <C_Camera>().AddShake(explosionShake);
        }
        else
        {
            // Kill mais pas en AoE
            if (collideTo.GetComponent <C_BulletAffected>() != null)
            {
                // TODO :
                // Kill entité affectée.
                collideTo.GetComponent <C_BulletAffected>().OnBulletHit(bulletDamage, bulletStun, sBulletName);
                GameObject.FindObjectOfType <C_Ui>().HitSomethingImportant();
                collideTo.GetComponent <C_BulletAffected>().OnSoloHitPropulsion(v3HitPosition, explosionForce, sBulletName);
            }
        }
    }