// Create stats for damage calculation here. public void PerformAttackHit(CombatActor attacker, GameObject target, Attack attack) { var attackedComponents = target.GetComponentsInChildren(typeof(ICanBeAttacked)); foreach (ICanBeAttacked a in attackedComponents) { a.OnAttacked(attacker, attack); } }
public void Fire(CombatActor attacker) { _result.Clear(); _hitNum = Physics2D.RaycastNonAlloc(transform.position, transform.right, _raycastHits, _range, _layer); for (int i = 0; i < _hitNum; i++) { _result.Add(_raycastHits[i]); } _result.Sort((a, b) => a.distance.CompareTo(b.distance)); if (!_pierce && _result.Count > 1) { _result.RemoveRange(1, _result.Count - 1); } List <Vector3> targetPositons = new List <Vector3>(); Vector3 endPosition = transform.position + (transform.right * _range); foreach (var hit in _result) { targetPositons.Add(hit.point); } if (_result.Count > 0) { endPosition = _result[_result.Count - 1].point; } _bulletTracer?.CreateTracer(transform.position, endPosition); PlayImpactVfx(targetPositons); foreach (RaycastHit2D hit in _result) { Attack attack = _attackDefinition.CreateAttack(hit.point, transform.right); attacker.PerformAttackHit(attacker, hit.collider.gameObject, attack); } gameObject.SetActive(false); }
public void OnAttacked(CombatActor attacker, Attack attack) { Destroy(gameObject); }