public void Move() { IfMustBeMoved(() => { if (!_currentTrainNetwork.Contains(CurrentPosition)) { Trail.Enqueue(_currentTrainNetwork.First()); } else { var queryNext = CurrentPosition .GetNorthEastSouthWest() .OrderBy(x => Random.Next()) .Where(x => x.HasMatch) .Select(x => x.MatchingObject) .Where(_currentTrainNetwork.Contains) .AsQueryable(); var next = queryNext .FirstOrDefault(x => x != PreviousPosition && x != CurrentPosition) ?? queryNext.FirstOrDefault(); Move(next); } }); }
protected BaseVehicle(Func <ISet <IZoneInfo> > getZoneInfosFunc, IZoneInfo currentPosition) { GetZoneInfosFunc = getZoneInfosFunc; Trail.Enqueue(currentPosition); }