Ejemplo n.º 1
0
 protected virtual void Work()
 {
     FindTarget();
     if (_target != null)
     {
         LookAtEnemy();
         if ((gameObject.transform.position - Target.transform.position).sqrMagnitude <= Mathf.Pow(MINDistToAttack, 2))
         {
             _targetHP    = _target.GetComponent <HealthPoints>();
             _rb.velocity = Vector3.zero;
             if (_animator.GetInteger(_attackAnimationName) == 0)
             {
                 Attack();
             }
             _animator.speed = 2 / attackDelay;
         }
         else
         {
             _animator.SetInteger(_attackAnimationName, 0);
             Vector3 movementDirection = (Target.transform.position - transform.position).normalized;
             _rb.velocity = movementDirection * speed;
         }
     }
     else
     {
         if (UnitSide == UnitSide.PLAYER)
         {
             _uiMethods.Win();
         }
         _rb.velocity = Vector3.zero;
         _animator.SetInteger(_attackAnimationName, 0);
     }
 }
Ejemplo n.º 2
0
        private void CreateExplosion(HealthPoints hp)
        {
            List <HealthPoints> enemies = FindEnemys();

            for (var i = 0; i < enemies.Count; i++)
            {
                if (Vector3.Distance(enemies[i].transform.position, transform.position) < damageRadius)
                {
                    enemies[i].TakeDamage(damage * (1 - (Vector3.Distance(enemies[i].transform.position, transform.position) /
                                                         damageRadius)));
                }
            }
            Destroy(_rb);
            explosionVFX.Play();
            Destroy(gameObject, explosionVFX.startLifetime);
        }
Ejemplo n.º 3
0
 protected float CalculateTrajectory(HealthPoints target)
 {
     if (target != null)
     {
         Vector3 fromTo   = target.transform.position - transform.position;
         Vector3 fromToXZ = new Vector3(fromTo.x, 0, fromTo.z);
         transform.rotation = Quaternion.LookRotation(fromToXZ, Vector3.up);
         float x      = fromToXZ.magnitude;
         float y      = fromTo.y;
         float speed2 = (Physics.gravity.y * x * x) / (2 * (y - Mathf.Tan(_shootAngle * Mathf.Deg2Rad) * x) *
                                                       Mathf.Pow(Mathf.Cos(_shootAngle * Mathf.Deg2Rad), 2));
         float speed = Mathf.Sqrt(Mathf.Abs(speed2));
         return(speed);
     }
     return(0);
 }