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