void CheckHit()
    {
        if (!hasHit)
        {
            Collider2D[] collider2Ds = new Collider2D[200];

            Physics2D.OverlapCollider(collider, contactFilter, collider2Ds);
            foreach (Collider2D collider in collider2Ds)
            {
                if (collider != null)
                {
                    Enemy       enemyHit       = collider.GetComponent <Enemy>();
                    Boss        bossHit        = collider.GetComponent <Boss>();
                    ChestAndBox chestAndBoxHit = collider.GetComponent <ChestAndBox>();

                    // Enemy Hit
                    if (enemyHit != null)
                    {
                        Vector2 enemyPos = enemyHit.transform.position;
                        Vector2 vector   = enemyPos - (Vector2)transform.position;
                        Vector2 dir      = vector.normalized;
                        float   dist     = vector.magnitude;

                        RaycastHit2D hit = Physics2D.Raycast((Vector2)transform.position, dir, dist, LayerMask.NameToLayer("mapColliders"));

                        if (!hit)
                        {
                            int damages = Mathf.CeilToInt(baseDamages * player.stats.capacitiesDamagesM);

                            // FeedBacks
                            enemyHit.TakeDamage(damages);

                            hasHit          = true;
                            currentLifeTime = 0;
                        }
                    }
                    // BOSS HIT CHECK
                    if (bossHit != null)
                    {
                        Vector2 playerCenter = (Vector2)player.centerTransform.position;
                        Vector2 bossPos      = bossHit.transform.position;
                        Vector2 vector       = bossPos - playerCenter;
                        Vector2 dir          = vector.normalized;
                        float   dist         = vector.magnitude;

                        RaycastHit2D hit = Physics2D.Raycast(player.centerTransform.position, dir, dist, LayerMask.NameToLayer("mapColliders"));

                        if (!hit)
                        {
                            int damages = Mathf.CeilToInt(baseDamages * player.stats.capacitiesDamagesM);

                            // FeedBacks
                            bossHit.TakeDamage(damages);

                            hasHit          = true;
                            currentLifeTime = 0;
                        }
                    }
                    // CHEST HIT CHECK
                    if (chestAndBoxHit != null)
                    {
                        chestAndBoxHit.Hit();

                        hasHit          = true;
                        currentLifeTime = 0;
                    }
                }
            }
        }
    }
Esempio n. 2
0
    // Verify if the Attack collider is collide with something
    void CheckHit()
    {
        if (checkHit)
        {
            Collider2D[] collider2Ds = new Collider2D[200];

            Physics2D.OverlapCollider(AttackBoxCollider, hitFilter, collider2Ds);
            foreach (Collider2D collider in collider2Ds)
            {
                if (collider != null)
                {
                    Enemy       enemyHit       = collider.GetComponent <Enemy>();
                    Boss        bossHit        = collider.GetComponent <Boss>();
                    ChestAndBox chestAndBoxHit = collider.GetComponent <ChestAndBox>();

                    // Enemy Hit
                    if (enemyHit != null)
                    {
                        Vector2 playerCenter = (Vector2)player.centerTransform.position;
                        Vector2 enemyPos     = enemyHit.transform.position;
                        Vector2 vector       = enemyPos - playerCenter;
                        Vector2 dir          = vector.normalized;
                        float   dist         = vector.magnitude;

                        RaycastHit2D hit = Physics2D.Raycast(player.centerTransform.position, dir, dist, LayerMask.NameToLayer("mapColliders"));
                        if (!hit)
                        {
                            int  damages = Mathf.CeilToInt(player.stats.normalDamages * meleeCombos[comboID].attacks[comboAttackID].damagesMultiplier * player.stats.normalDamagesMultiplier);
                            bool isCrit  = CalculateCritDamages(ref damages);

                            if (isCrit)
                            {
                                CanvasWorld.Singleton.damageTextManager.GenerateCritFeedback(enemyHit.centerEntity);
                            }

                            // FeedBacks
                            enemyHit.TakeDamage(damages);

                            StopComboVelocity();
                            player.stats.velocity = Vector2.zero;
                        }
                    }

                    if (bossHit != null)
                    {
                        Vector2 playerCenter = (Vector2)player.centerTransform.position;
                        Vector2 bossPos      = bossHit.transform.position;
                        Vector2 vector       = bossPos - playerCenter;
                        Vector2 dir          = vector.normalized;
                        float   dist         = vector.magnitude;

                        RaycastHit2D hit = Physics2D.Raycast(player.centerTransform.position, dir, dist, LayerMask.NameToLayer("mapColliders"));

                        if (!hit)
                        {
                            int  damages = Mathf.CeilToInt(player.stats.normalDamages * meleeCombos[comboID].attacks[comboAttackID].damagesMultiplier * player.stats.normalDamagesMultiplier);
                            bool isCrit  = CalculateCritDamages(ref damages);

                            if (isCrit)
                            {
                                CanvasWorld.Singleton.damageTextManager.GenerateCritFeedback(bossHit.entityCenter);
                            }

                            // FeedBacks
                            bossHit.TakeDamage(damages);

                            StopComboVelocity();
                            player.stats.velocity = Vector2.zero;
                        }
                    }

                    if (chestAndBoxHit != null)
                    {
                        chestAndBoxHit.Hit();
                    }
                }
            }

            checkHit = false;
        }
    }