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