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