Exemplo n.º 1
0
        public void Validate(IMapNavigator <GridDirection> navigator)
        {
            var br = navigator.NavigateTo(Direction, Origin, out var result, Steps);

            br.Should().Be(Result);
            result.Should().Be(ExpectedPosition, "we navigated from origin {0} in direction {1}", Origin, Direction, ExpectedPosition);
        }
Exemplo n.º 2
0
 public static void ValidateAll(this IEnumerable <NavigationTestCase> en, IMapNavigator <GridDirection> nav)
 {
     foreach (var testCase in en)
     {
         testCase.Validate(nav);
     }
 }
Exemplo n.º 3
0
 public BaseTileSelector(GridMatcher matcher,
                         IMapNavigator <GridDirection> gridNavigator,
                         Func <int, int, TContext> contextProvider = null)
 {
     ContextProvider = contextProvider ?? DefaultContextProvider;
     GridNavigator   = gridNavigator ?? throw new ArgumentNullException(nameof(gridNavigator));
     Matcher         = matcher ?? throw new ArgumentNullException(nameof(matcher));
 }
Exemplo n.º 4
0
 public static MapCoordinate NavigateUnconditionally(this IMapNavigator <GridDirection> nav,
                                                     GridDirection d,
                                                     MapCoordinate coord,
                                                     int steps = 1)
 {
     nav.NavigateTo(d, coord, out MapCoordinate results, steps);
     return(results);
 }
Exemplo n.º 5
0
 public LimitedRangeNavigator(IMapNavigator <T> parent, int lowerX, int lowerY, int upperX, int upperY)
 {
     this.parent = parent ?? throw new ArgumentNullException(nameof(parent));
     this.lowerX = lowerX;
     this.lowerY = lowerY;
     this.upperX = upperX - 1;
     this.upperY = upperY - 1;
 }
Exemplo n.º 6
0
 public CachingPlotOperation(IRenderPlotOperation <TRenderTile, TContext> parent,
                             IMapNavigator <GridDirection> mapNavigator,
                             IMapRenderArea viewport)
 {
     this.recordingRenderer = new RecordingRenderer(viewport, mapNavigator, parent.ActiveRenderer);
     this.parent            = parent;
     this.parent.Renderer   = recordingRenderer;
 }
Exemplo n.º 7
0
 public RoadCornerTileSelector(GridMatcher matcher,
                               IMapNavigator <GridDirection> gridNavigator,
                               string prefix,
                               ITileRegistryEx <Direction, TRenderTile> registry,
                               Func <int, int, TContext> contextProvider = null)
     : base(matcher, gridNavigator, contextProvider)
 {
     FillInTags(prefix, registry, out tiles, out tileExists);
 }
Exemplo n.º 8
0
 public BasicTileSelector(GridMatcher matcher,
                          IMapNavigator <GridDirection> gridNavigator,
                          ITileRegistry <TRenderTile> registry,
                          string tag,
                          Func <int, int, TContext> contextProvider = null) : base(matcher, gridNavigator,
                                                                                   contextProvider)
 {
     tileExists = registry.TryFind(tag, out tile);
 }
Exemplo n.º 9
0
 public GridPlotter(IMapRenderArea viewport,
                    IMapNavigator <GridDirection> navigator,
                    IMapNavigator <GridDirection> screenNavigator = null)
 {
     //this.plotOperation = plotOperation ?? throw new ArgumentNullException(nameof(plotOperation));
     this.viewport        = viewport ?? throw new ArgumentNullException(nameof(viewport));
     mapAccessNavigator   = navigator ?? throw new ArgumentNullException(nameof(navigator));
     this.screenNavigator = screenNavigator ?? GridNavigation.CreateNavigator(viewport.RenderType);
 }
Exemplo n.º 10
0
 public FixedOffsetRotationGridNavigator(IMapNavigator <GridDirection> parent, int rotationSteps)
 {
     this.parent     = parent ?? throw new ArgumentNullException(nameof(parent));
     this.directions = new GridDirection[9];
     for (var i = 0; i < directions.Length; i += 1)
     {
         directions[i] = RotationGridNavigator.RotateBy((GridDirection)i, rotationSteps);
     }
 }
Exemplo n.º 11
0
 public SeparateNeighbourTileSelector(GridMatcher matcher,
                                      IMapNavigator <GridDirection> gridNavigator,
                                      ITileRegistryEx <NeighbourMatchPosition, TRenderTile> registry,
                                      string prefix,
                                      Func <int, int, TContext> contextProvider = null) : base(
         matcher, gridNavigator, contextProvider)
 {
     positions = (NeighbourMatchPosition[])Enum.GetValues(typeof(NeighbourMatchPosition));
     Prepopulate(prefix, registry, out tiles, out tileExists);
 }
Exemplo n.º 12
0
 public CardinalTileSelector(GridMatcher matcher,
                             GridMatcher selfMatcher,
                             IMapNavigator <GridDirection> gridNavigator,
                             ITileRegistryEx <CardinalTileSelectorKey, TRenderTile> registry,
                             string prefix,
                             Func <int, int, TContext> contextProvider = null) :
     base(matcher, gridNavigator, contextProvider)
 {
     this.selfMatcher = selfMatcher ?? throw new ArgumentNullException(nameof(selfMatcher));
     PrecomputeTags(prefix, registry, out tags, out tagExists);
 }
Exemplo n.º 13
0
 public CornerTileSelector(GridMatcher matcher,
                           GridMatcher selfMatcher,
                           IMapNavigator <GridDirection> gridNavigator,
                           ITileRegistryEx <CornerTileSelectionKey, TRenderTile> registry,
                           string prefix,
                           Func <int, int, TContext> contextProvider = null)
 {
     this.selfMatcher     = selfMatcher ?? throw new ArgumentNullException(nameof(selfMatcher));
     Matcher              = matcher;
     GridNavigator        = gridNavigator;
     this.contextProvider = contextProvider ?? DefaultContextProvider;
     selectors            = PrepareSelectors(prefix, registry);
 }
Exemplo n.º 14
0
        public WrapAroundNavigator(IMapNavigator <T> parent, Range x, Range y)
        {
            this.parent = parent ?? throw new ArgumentNullException(nameof(parent));

            lowerX = Math.Min(x.Min, x.Max);
            lowerY = Math.Min(y.Min, y.Max);

            var upperX = Math.Max(x.Min, x.Max);
            var upperY = Math.Max(y.Min, y.Max);

            deltaX = upperX - lowerX;
            deltaY = upperY - lowerY;
        }
Exemplo n.º 15
0
 public CellMapTileSelector(ICellMatcher matchers,
                            IMapNavigator <GridDirection> gridNavigator,
                            ITileRegistryEx <CellMapTileSelectorKey, TRenderTile> registry,
                            string prefix,
                            Func <int, int, TContext> contextProvider = null)
 {
     this.matchers        = matchers ?? throw new ArgumentNullException();
     this.gridNavigator   = gridNavigator;
     this.registry        = registry;
     this.prefix          = prefix;
     this.contextProvider = contextProvider ?? DefaultContextProvider;
     Prepare(out tiles, out tileExists);
 }
Exemplo n.º 16
0
 public BlendNeighboursSelector2(ITileRegistryEx <CardinalIndex, TRenderTile> registry,
                                 IMapNavigator <GridDirection> gridNavigator,
                                 MapQuery <string> mapQuery,
                                 MapQuery <bool> isBlending,
                                 MapQuery <TContext> contextProvider = null)
 {
     this.registry        = registry;
     this.gridNavigator   = gridNavigator;
     this.mapQuery        = mapQuery;
     this.isBlending      = isBlending;
     this.contextProvider = contextProvider ?? DefaultContextProvider;
     this.directions      = new[] { CardinalIndex.North, CardinalIndex.East, CardinalIndex.South, CardinalIndex.West };
 }
Exemplo n.º 17
0
 public RoadParityTileSelector(GridMatcher matcher,
                               GridMatcher selfMatcher,
                               IMapNavigator <GridDirection> gridNavigator,
                               ITileRegistry <TRenderTile> isolatedRegistry,
                               ITileRegistryEx <CardinalTileSelectorKey, TRenderTile> cardinalRegistry,
                               ITileRegistryEx <DiagonalTileSelectionKey, TRenderTile> diagonalRegistry,
                               string tag)
 {
     isolatedTileMatcher  = new BasicTileSelector <TRenderTile, TContext>(selfMatcher, gridNavigator, isolatedRegistry, tag);
     diagonalTileSelector =
         new DiagonalTileSelector <TRenderTile, TContext>(matcher, selfMatcher, gridNavigator, diagonalRegistry, tag);
     cardinalTileSelector =
         new CardinalTileSelector <TRenderTile, TContext>(matcher, selfMatcher, gridNavigator, cardinalRegistry, tag);
 }
Exemplo n.º 18
0
        public RiverOutletTileSelector(GridMatcher matcher,
                                       GridMatcher selfMatcher,
                                       IMapNavigator <GridDirection> gridNavigator,
                                       ITileRegistryEx <CardinalIndex, TRenderTile> outletRegistry,
                                       string prefix,
                                       Func <int, int, TContext> contextProvider = null)
            : base(matcher, gridNavigator, contextProvider)
        {
            this.selfMatcher = selfMatcher ?? throw new ArgumentNullException(nameof(selfMatcher));

            this.northTileExists = outletRegistry.TryFind(prefix, CardinalIndex.North, out northTile);
            this.eastTileExists  = outletRegistry.TryFind(prefix, CardinalIndex.East, out eastTile);
            this.southTileExists = outletRegistry.TryFind(prefix, CardinalIndex.South, out southTile);
            this.westTileExists  = outletRegistry.TryFind(prefix, CardinalIndex.West, out westTile);
        }
Exemplo n.º 19
0
        public static MapCoordinate[] NavigateCardinalNeighbours(this IMapNavigator <GridDirection> nav,
                                                                 MapCoordinate coord,
                                                                 MapCoordinate[] retval = null)
        {
            if (retval == null || retval.Length < 4)
            {
                retval = new MapCoordinate[4];
            }

            nav.NavigateTo(GridDirection.North, coord, out retval[0]);
            nav.NavigateTo(GridDirection.East, coord, out retval[1]);
            nav.NavigateTo(GridDirection.South, coord, out retval[2]);
            nav.NavigateTo(GridDirection.West, coord, out retval[3]);
            return(retval);
        }
Exemplo n.º 20
0
        public CornerCellSelector(ICellMatcher matchers,
                                  GridMatcher selfMatcher,
                                  IMapNavigator <GridDirection> gridNavigator,
                                  ITileRegistryEx <CellMapTileSelectorKey, TRenderTile> registry,
                                  string prefix,
                                  Func <int, int, TContext> contextProvider = null)
        {
            this.registry    = registry;
            this.prefix      = prefix;
            this.selfMatcher = selfMatcher ?? throw new ArgumentNullException(nameof(selfMatcher));

            Matchers             = matchers ?? throw new ArgumentNullException();
            GridNavigator        = gridNavigator;
            this.contextProvider = contextProvider ?? DefaultContextProvider;

            directionTileTagSelection = TileTagEntries.CreateDirectionTagEntries();
            selectors = PrepareSelectors();
            Prepare(out tiles, out tileExists);
        }
Exemplo n.º 21
0
 public WrappingFogMap(IFogMap parent, IMapNavigator <GridDirection> navigator)
 {
     this.navigator = navigator;
     this.parent    = parent ?? throw new ArgumentNullException(nameof(parent));
 }
Exemplo n.º 22
0
 public RotationGridNavigator(IMapNavigator <GridDirection> parent, int rotationSteps)
 {
     this.parent     = parent ?? throw new ArgumentNullException(nameof(parent));
     this.directions = new GridDirection[9];
     RotationSteps   = Math.Sign(rotationSteps) * (Math.Abs(rotationSteps) % 8);
 }
Exemplo n.º 23
0
 public WrapAroundNavigator(IMapNavigator <T> parent, int upperX, int upperY) : this(parent, new Range(0, upperX), new Range(0, upperY))
 {
 }
Exemplo n.º 24
0
 public LimitedRangeNavigator(IMapNavigator <T> parent, int upperX, int upperY) : this(parent, 0, 0, upperX, upperY)
 {
 }