Beispiel #1
0
        public override CognitionState Update()
        {
            if (Map.IsPositionDangorous(Unit.LogicPosition))
            {
                return(RememberCurrent().AndChangeStateTo(StatesFactory.CreateStrafing(_target)));
            }

            if (_target.IsVisible)
            {
                if (ProbabilisticTriggering.TestOnAverageOnceEvery(0.1f))
                {
                    _path = Map.PathFinder.FindPath(Unit.LogicPosition,
                                                    _target.Position);
                }

                TargetingHelper.ManageAimingAtTheTarget(_target);

                var distanceToTarget = (_target.Position - Unit.LogicPosition).magnitude;
                if (distanceToTarget > 4)
                {
                    MovementHelper.ManageMovingAlongThePath(_path);
                }

                return(this);
            }

            return(DisposeCurrent().AndChangeStateTo(StatesFactory.CreateSearching(_target)));
        }
Beispiel #2
0
 public override CognitionState Update()
 {
     if (!Map.IsPositionDangorous(Unit.LogicPosition))
     {
         return(DisposeCurrent().AndReturnToThePreviousState());
     }
     ProbabilisticTriggering.PerformOnAverageOnceEvery(0.3f,
                                                       () => _path = Map.PathFinder.FindSafespot(Unit.LogicPosition));
     MovementHelper.ManageMovingAlongThePath(_path);
     if (_target.IsVisible)
     {
         TargetingHelper.ManageAimingAtTheTarget(_target);
     }
     return(this);
 }