private void CheckHealth()
    {
        var currentLife = _minionController.lifeController.GetCurrentLife(); // Gets Current Life.

        CheckHealCooldown();                                                 // Check Heal Cooldown
        currentLife = _minionController.lifeController.GetCurrentLife();

        if (currentLife < _minionController._lowHealth) // If Minion is Low Health
        {
            var fleeDirection = _flee.GetDirection() + _minionController.transform.position;
            _avoid.SetTargetByVector(fleeDirection);       // Set flee World Position as Target
            _minionController.Move(_avoid.GetDirection()); // Move to Flee Position
        } // Recover Health & Flee.

        if (currentLife < _minionController._recoverHealth)
        {
            if (_minionController.isBoss)
            {
                _minionController.AlertFlee();

                if (fleeTimer <= 0)
                {
                    _minionController.Kamikaze();
                }
            }
        } // Recover Health & Not Flee.

        if (currentLife >= _minionController._recoverHealth)
        {
            _minionController._speed = _minionController._ogSpeed;
            _fsm.Transition(MinionController.States.IDLE);
        } // Back to Battle.
    }
示例#2
0
    public override void Execute()
    {
        if (_pointer < _path.Count)
        {
            _avoid.SetTarget(_path[_pointer].transform);
            _minionController.Move(_avoid.GetDirection());
            _minionController.Look(_path[_pointer].transform.position);

            Vector3 target          = _path[_pointer].transform.position;
            Vector3 difference      = target - _transform.transform.position;
            var     waypointDistace = difference.magnitude;

            if (waypointDistace <= _minionController.enemyMovement.safeDistanceToWaypoint) // Reached Waypoint
            {
                _pointer++;
            }
        } // Run A*
        else
        {
            for (int i = 0; i < _minionController.allyMinionsList.Count; i++)
            {
                var currentMinion = _minionController.allyMinionsList[i].GetComponent <MinionController>();
                if (currentMinion != null)
                {
                    currentMinion.fsm.Transition(MinionController.States.IDLE);
                }
            }

            _pointer = 0;
        } // If End of Path, Minions IDLE
    }
示例#3
0
    private void CheckDistance()
    {
        if (_enemyTransform == null)
        {
            return;
        }
        currentDistance = (_enemyTransform.position - _minionController.transform.position).magnitude;

        if (currentDistance > 8)
        {
            avoid.SetTarget(_minionController.currentEnemy);
            _minionController.Move(avoid.GetDirection());
            _minionController.Look(_enemyTransform.position);

            //Debug.Log($"Enemy Transform: {_enemyTransform.position}");
        }

        if (currentDistance <= 10)
        {
            AttackEnemy();
        }
    }
示例#4
0
    public override void Execute()
    {
        // Get Nearby Allies.
        List <Transform> context = _flockingEntity.GetNearbyEntities();

        // If there is none, idle.
        if (context.Count == 0)
        {
            _fsm.Transition(MinionController.States.IDLE);
        }

        // If there are allies, flock.
        else
        {
            Vector3 flockingDirection  = _flockingEntity.UpdateDirection();
            Vector3 worldPositionFlock = flockingDirection + _minionController.transform.position;
            //_minionController.Move(flockingDirection.normalized);

            _avoid.SetTargetByVector(worldPositionFlock);
            _minionController.Move(_avoid.GetDirection());
            _minionController.Look(worldPositionFlock);
        }
    }