// 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);
        }
Beispiel #3
0
 public void OnAttacked(CombatActor attacker, Attack attack)
 {
     Destroy(gameObject);
 }