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