private void setNextWalk(IObject target, IFollowSettings settings, IWalkComponent walk)
        {
            if (isInAllowedDistance(target, settings) && MathUtils.Random().Next(100) <= settings.StayPutPercentage)
            {
                return;
            }

            PointF targetPoint = PointF.Empty;
            int    retries     = 3;

            while (retries > 0)
            {
                targetPoint = getFollowTargetPoint(target, settings);
                if (isWalkingDistanceValid(targetPoint, settings))
                {
                    break;
                }
                retries--;
            }

            if (retries <= 0)
            {
                Debug.WriteLine($"FollowComponent: Failed to get a target point which is not too close");
                return;
            }

            _currentWalk = walk.WalkAsync(new Position(targetPoint.X, targetPoint.Y));
        }
示例#2
0
        private void setNextWalk(IObject target, IFollowSettings settings, IWalkComponent walk)
        {
            PointF targetPoint;

            if (MathUtils.Random().Next(100) <= settings.WanderOffPercentage)
            {
                targetPoint = wanderOff();
            }
            else
            {
                targetPoint = follow(target, settings);
            }

            _currentWalk = walk.WalkAsync(new Position(targetPoint.X, targetPoint.Y));
        }
 public Task <Boolean> WalkAsync(ILocation location)
 {
     return(_walkComponent.WalkAsync(location));
 }