private void CheckAttack(BaseAttack attack) { if (attack == null) { return; } Vector2 attackCenter = attack.AttackCenterPoint; attackCenter.x *= _playerController.DirectionX; Vector2 direction = (Vector2)_playerController.transform.position + attackCenter; Collider2D[] hits = Physics2D.OverlapCircleAll(direction, attack.AttackRadius, _playerData.DamageableMask); if (hits.Length > 0) { foreach (Collider2D enemy in hits) { if (enemy.gameObject.TryGetComponent(out IDamageable damageable)) { damageable.TakeDamage(attack); } } } }
public void TakeDamage(BaseAttack attack) { if (attack.ApplyKnockback) { Vector2 force = new Vector2(attack.KnockbackForce.x * _player.DirectionX, attack.KnockbackForce.y); GetComponent <Rigidbody2D>().AddForce(force, ForceMode2D.Impulse); } }
private void CreateAttacks() { _swordAttack1 = new BaseAttack(_playerData.SwordAttack1.Damage, _playerData.SwordAttack1.AttackRadius, _playerData.SwordAttack1.AttackCenterPoint, _playerData.SwordAttack1.KnockbackForce, _playerData.SwordAttack1.ApplyKnockback); _swordAttack2 = new BaseAttack(_playerData.SwordAttack2.Damage, _playerData.SwordAttack2.AttackRadius, _playerData.SwordAttack2.AttackCenterPoint, _playerData.SwordAttack2.KnockbackForce, _playerData.SwordAttack2.ApplyKnockback); _swordAttack3 = new BaseAttack(_playerData.SwordAttack3.Damage, _playerData.SwordAttack3.AttackRadius, _playerData.SwordAttack3.AttackCenterPoint, _playerData.SwordAttack3.KnockbackForce, _playerData.SwordAttack3.ApplyKnockback); }
public void SwordAttack(int attackId) { BaseAttack attack = GetSwordAttackById(attackId); CheckAttack(attack); }