Beispiel #1
0
        ITileMatcher <TTile, Nothing> CreateDecoMatcher(ITileRegistry <TTile> tiles)
        {
            var gd      = GameData;
            var map     = gd.Map.DecorationLayer;
            var wallMap = gd.Map.WallLayer;

            bool IsNeitherWallOrPassageFn(int x, int y)
            {
                var tile = wallMap[x, y];

                return(!gd.Rules.Walls.Stone.Equals(tile) && !gd.Rules.Walls.Passage.Equals(tile));
            }

            var wallsAsCardinals = new CardinalTileRegistry <TTile>(tiles);

            var wallTypeSelector =
                new DistinctTileMatcher <IDecorationType, TTile, Nothing>((x, y) => map[x, y]);

            foreach (var decorationType in gd.Rules.DecorationTypes.Skip(1))
            {
                var target = decorationType;
                wallTypeSelector.Add(decorationType,
                                     new CardinalTileSelector <TTile, Nothing>(IsNeitherWallOrPassageFn,
                                                                               CreateMatcher(map, target),
                                                                               RenderingConfig.MatcherNavigator,
                                                                               wallsAsCardinals, target.Name));
            }

            return(wallTypeSelector);
        }
Beispiel #2
0
        public List <TextureTile> Generate(TextureGrid grid)
        {
            var keys   = CardinalTileSelectorKey.Values;
            var reg    = new CardinalTileRegistry <string>(new ReflectorRegistry(), null, grid.Pattern);
            var retval = new List <TextureTile>();

            for (var index = 0; index < keys.Length; index++)
            {
                var key = keys[index];
                if (!reg.TryFind(grid.Name, key, out var tileName))
                {
                    continue;
                }

                var x = index % 4;
                var y = index / 4;
                retval.Add(new TextureTile(true, x, y, tileName)
                {
                    SelectorHint = key.ToString()
                });
            }

            return(retval);
        }
Beispiel #3
0
        ITileMatcher <TTile, Nothing> CreateWallMatcher(ITileRegistry <TTile> tiles)
        {
            var gd  = GameData;
            var map = gd.Map.WallLayer;

            bool IsWallOrPassageFn(int x, int y)
            {
                var tile = map[x, y];

                return(gd.Rules.Walls.Stone.Equals(tile) || gd.Rules.Walls.Passage.Equals(tile));
            }

            var wallsAsCardinals = new CardinalTileRegistry <TTile>(tiles);

            var wallTypeSelector = new DistinctTileMatcher <IWallType, TTile, Nothing>((x, y) => map[x, y]);

            wallTypeSelector.Add(gd.Rules.Walls.Stone,
                                 new CardinalTileSelector <TTile, Nothing>(IsWallOrPassageFn,
                                                                           CreateMatcher(map, gd.Rules.Walls.Stone),
                                                                           RenderingConfig.MatcherNavigator,
                                                                           wallsAsCardinals,
                                                                           gd.Rules.Walls.Stone.Name));
            return(wallTypeSelector);
        }