Пример #1
0
 SelectorDefinition[] PrepareSelectors(string prefix,
                                       ITileRegistryEx <CornerTileSelectionKey, TRenderTile> registry)
 {
     return(new[]
     {
         new SelectorDefinition(prefix,
                                Direction.Up,
                                registry,
                                NeighbourIndex.West.AsInt(),
                                NeighbourIndex.NorthWest.AsInt(),
                                NeighbourIndex.North.AsInt()),
         new SelectorDefinition(prefix,
                                Direction.Right,
                                registry,
                                NeighbourIndex.North.AsInt(),
                                NeighbourIndex.NorthEast.AsInt(),
                                NeighbourIndex.East.AsInt()),
         new SelectorDefinition(prefix,
                                Direction.Down,
                                registry,
                                NeighbourIndex.East.AsInt(),
                                NeighbourIndex.SouthEast.AsInt(),
                                NeighbourIndex.South.AsInt()),
         new SelectorDefinition(prefix,
                                Direction.Left,
                                registry,
                                NeighbourIndex.South.AsInt(),
                                NeighbourIndex.SouthWest.AsInt(),
                                NeighbourIndex.West.AsInt())
     });
 }
Пример #2
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);
 }
Пример #3
0
 public SelectorDefinition(string tag,
                           Direction position,
                           ITileRegistryEx <CornerTileSelectionKey, TRenderTile> registry,
                           params int[] selectorCoordinates)
 {
     Position            = position;
     SelectorCoordinates = selectorCoordinates;
     FillInTags(tag, position, registry, out tiles, out tileExists);
 }
Пример #4
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);
 }
Пример #5
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);
 }
Пример #6
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 };
 }
Пример #7
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);
 }
Пример #8
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);
 }
Пример #9
0
        void Prepopulate(string tag,
                         ITileRegistryEx <NeighbourMatchPosition, TRenderTile> reg,
                         out TRenderTile[] matches,
                         out bool[] matchesExist)
        {
            matches      = new TRenderTile[positions.Length];
            matchesExist = new bool[positions.Length];

            for (var i = 0; i < positions.Length; i++)
            {
                var matchPos = positions[i];
                matchesExist[i] = reg.TryFind(tag, matchPos, out matches[i]);
            }
        }
Пример #10
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);
 }
Пример #11
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);
        }
Пример #12
0
 protected void FillInTags(string prefix,
                           ITileRegistryEx <Direction, TRenderTile> registry,
                           out TRenderTile[] preparedTags,
                           out bool[] preparedTagExists)
 {
     preparedTags      = new TRenderTile[4];
     preparedTagExists = new bool[4];
     preparedTagExists[(int)Direction.Up] =
         registry.TryFind(prefix, Direction.Up, out preparedTags[(int)Direction.Up]);
     preparedTagExists[(int)Direction.Right] =
         registry.TryFind(prefix, Direction.Right, out preparedTags[(int)Direction.Right]);
     preparedTagExists[(int)Direction.Down] =
         registry.TryFind(prefix, Direction.Down, out preparedTags[(int)Direction.Down]);
     preparedTagExists[(int)Direction.Left] =
         registry.TryFind(prefix, Direction.Left, out preparedTags[(int)Direction.Left]);
 }
Пример #13
0
 static void FillInTags(string tag,
                        Direction prefix,
                        ITileRegistryEx <CornerTileSelectionKey, TRenderTile> registry,
                        out TRenderTile[] tags,
                        out bool[] tagExists)
 {
     tags      = new TRenderTile[8];
     tagExists = new bool[8];
     for (var idx = 0; idx < 8; idx += 1)
     {
         var m0 = (idx & 1) == 1;
         var m1 = (idx & 2) == 2;
         var m2 = (idx & 4) == 4;
         tagExists[idx] = registry.TryFind(tag, CornerTileSelectionKey.ValueOf(prefix, m0, m1, m2), out tags[idx]);
     }
 }
Пример #14
0
        protected void PrecomputeTags(string prefix,
                                      ITileRegistryEx <CardinalTileSelectorKey, TRenderTile> registry,
                                      out TRenderTile[] preparedTags,
                                      out bool[] tagExists)
        {
            preparedTags = new TRenderTile[16];
            tagExists    = new bool[16];
            for (var idx = 0; idx < 16; idx += 1)
            {
                var n = (idx & 1) != 0;
                var e = (idx & 2) != 0;
                var s = (idx & 4) != 0;
                var w = (idx & 8) != 0;

                tagExists[idx] = registry.TryFind(prefix, CardinalTileSelectorKey.ValueOf(n, e, s, w),
                                                  out preparedTags[idx]);
            }
        }
Пример #15
0
        void FillInTags(string prefix,
                        ITileRegistryEx <DiagonalTileSelectionKey, TRenderTile> registry,
                        out TRenderTile[] tiles,
                        out bool[] tilesExist)
        {
            tiles      = new TRenderTile[16];
            tilesExist = new bool[16];

            for (var idx = 0; idx < 16; idx += 1)
            {
                var n   = (idx & 1) != 0;
                var e   = (idx & 2) != 0;
                var s   = (idx & 4) != 0;
                var w   = (idx & 8) != 0;
                var key = DiagonalTileSelectionKey.ValueOf(n, e, s, w);
                tilesExist[idx] = registry.TryFind(prefix, key, out tiles[idx]);
            }
        }
Пример #16
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);
        }