public List <TextureTile> Generate(TextureGrid grid) { var ni = new Dictionary <CardinalIndex, IntPoint> { { CardinalIndex.North, new IntPoint(0, 0) }, { CardinalIndex.East, new IntPoint(1, 0) }, { CardinalIndex.South, new IntPoint(0, 1) }, { CardinalIndex.West, new IntPoint(1, 1) } }; var reg = new CardinalIndexTileRegistry <string>(new ReflectorRegistry(), TileTagEntries.CreateCardinalIndexTagEntries(), grid.Pattern); var retval = new List <TextureTile>(); foreach (var name in ni) { if (!reg.TryFind(grid.Name, name.Key, out var tileName)) { continue; } retval.Add(new TextureTile(true, name.Value.X, name.Value.Y, tileName) { SelectorHint = name.Key.ToString() }); } return(retval); }
public BlendingTileGenerator(ITileRegistry <TTile> tileRegistry, ITextureOperations <TTexture, TColor> textureOperations, IDerivedTileProducer <TTile, TTexture> tileProducer, RenderType renderType, IntDimension tileSize, TTile ditherMask, string prefix = "t.blend.gen.") { this.tileRegistry = tileRegistry ?? throw new ArgumentNullException(nameof(tileRegistry)); this.tileProducer = tileProducer; this.renderType = renderType; this.tileSize = tileSize; this.ditherMask = ditherMask; this.prefix = prefix ?? "t.blend.gen"; this.textureOperations = textureOperations ?? throw new ArgumentNullException(nameof(textureOperations)); cardinalMaskRegistry = CardinalIndexTileRegistry <TTile> .CreateLong(tileRegistry); this.maskCache = PopulateCache(); }
IEnumerable <TileMatchControl> CreateRiverLayer() { var terrain = GameData.Terrain; var riverId = GameData.Rules.Roads.River.DataId; bool IsRiver(int x, int y) { return(terrain[x, y].Improvement.Read(riverId)); } var isOceanMatcher = CreateTerrainMatcher( tidx => GameData.Rules.TerrainTypes[tidx] .Class .Contains(StrategyGameRules.DefinedTerrains.OceanicClass)); bool IsRiverOrOcean(int x, int y) { return(IsRiver(x, y) || isOceanMatcher(x, y)); } // river matcher is a simple cardinal matcher. var riverBase = new CardinalTileSelector <TTile, Nothing>( IsRiverOrOcean, IsRiver, RenderingConfig.MatcherNavigator, new CardinalTileRegistry <TTile>(Tiles), "road.river_s"); // outlets are rendered on top of ocean tiles. var outletMatcher = new RiverOutletTileSelector <TTile, Nothing> (IsRiver, isOceanMatcher, RenderingConfig.MatcherNavigator, CardinalIndexTileRegistry <TTile> .CreateShort(Tiles), "road.river_outlet"); return(new List <TileMatchControl> { new TileMatchControl(riverBase, TileMatchControl.CacheControlNoOp), new TileMatchControl(outletMatcher, TileMatchControl.CacheControlNoOp) }); }