示例#1
0
        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);
        }
示例#2
0
        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();
        }
示例#3
0
        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)
            });
        }