Exemplo n.º 1
0
        private void SphereCastEnemy()
        {
            if (UnitEnemy != null)
            {
                UnitEnemy.Status.HP.OnCurrentHealthUpdated.RemoveListener(OnEnemyDead);

                UnitEnemy = null;
                OnCatchedEnemyReleased.Invoke();
                return;
            }

            var radius = 10.0f;
            var layer  = LayerMask.GetMask(LayerManager.LAYER_AI);

            var colliders = Physics.OverlapSphere(transform.position, radius, layer);

            if (colliders.Length == 0)
            {
                OnCatchedNothing.Invoke();
                return;
            }

            var mainCamera = GameManager.MainCamera;

            UnitEnemy = null;
            var distance = float.MaxValue;
            var myPos    = transform.position;

            foreach (var c in colliders)
            {
                if (c.transform.IsInsideCameraFrustum(mainCamera) == false)
                {
                    continue;
                }

                var unitEnemy = c.GetComponent <Unit_AI>();
                if (unitEnemy.Status.IsDead == true || unitEnemy.Behaviour == AIBehaviour.Neutral)
                {
                    continue;
                }

                var dist = Vector3.Distance(myPos, c.transform.position);
                if (dist < distance)
                {
                    distance  = dist;
                    UnitEnemy = unitEnemy;
                }
            }

            if (UnitEnemy == null)
            {
                Debug.Log("Unable to catch any enemy!!", Debug.LogType.Error);
                OnCatchedNothing.Invoke();
                return;
            }

            UnitEnemy.Status.HP.OnCurrentHealthUpdated.AddListener(OnEnemyDead);
            OnEnemyCatched.Invoke(UnitEnemy);
        }
Exemplo n.º 2
0
 private void OnEnemyDead(float enemyCurrentHealthRate)
 {
     if (UnitEnemy.Status.IsDead == true)
     {
         UnitEnemy = null;
         OnCatchedEnemyReleased.Invoke();
     }
 }