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