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; } } } } }
// 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; } }