Beispiel #1
0
            public bool Match(int x, int y, out ITileTagEntrySelection result)
            {
                var idx = map[x, y].TerrainIdx;

                result = selections[idx];
                return(result != null);
            }
Beispiel #2
0
            public bool Match(int x, int y, out ITileTagEntrySelection result)
            {
                var state = map[x, y];

                result = states[(int)state];
                return(true);
            }
Beispiel #3
0
        public ICellMatcher CreateMatcher(int layerIndex, RenderLayerDefinition rd)
        {
            // In cell matching with multiple targets, the matcher must include a self-match.
            var matchSpecs = new List <string>();

            if (rd.MatchAs != null)
            {
                matchSpecs.Add(rd.MatchAs);
            }

            matchSpecs.AddRange(rd.MatchWith);

            // tagname -> List of matching ITerrains
            var otherGraphicTags = ComputeMatchingTerrains(layerIndex, matchSpecs);
            var factory          = TileTagEntrySelectionFactory.FromTagsAsSingleCharKey(otherGraphicTags.Keys.ToArray());
            var rules            = Context.GameData.Rules;
            var terrainsByKey    = new ITileTagEntrySelection[rules.TerrainTypes.Count];

            foreach (var pair in otherGraphicTags)
            {
                var key = factory.Lookup(pair.Key);
                foreach (var terrain in pair.Value)
                {
                    var b = rules.TerrainTypes.IndexOf(terrain);
                    terrainsByKey[b] = key;
                }
            }

            var map = Context.GameData.Terrain;

            return(new LookupMatcher(map, factory, terrainsByKey));
        }
Beispiel #4
0
 public CellMapTileSelectorKey(ITileTagEntrySelection north,
                               ITileTagEntrySelection east,
                               ITileTagEntrySelection south,
                               ITileTagEntrySelection west)
 {
     MatchA = north ?? throw new ArgumentNullException(nameof(north));
     MatchB = east ?? throw new ArgumentNullException(nameof(east));
     MatchC = south ?? throw new ArgumentNullException(nameof(south));
     MatchD = west ?? throw new ArgumentNullException(nameof(west));
 }
Beispiel #5
0
        public static ITileTagEntrySelection <TSelector>[] ToSelectionArray <TSelector>(this ITileTagEntrySelectionFactory <TSelector> factory)
        {
            var retval = new ITileTagEntrySelection <TSelector> [factory.Count];

            for (var i = 0; i < retval.Length; i++)
            {
                retval[i] = factory[i];
            }

            return(retval);
        }
Beispiel #6
0
            public bool Match(int x, int y, out ITileTagEntrySelection selection)
            {
                foreach (var pair in matchers)
                {
                    if (pair.Value(x, y))
                    {
                        selection = pair.Key;
                        return(true);
                    }
                }

                selection = default;
                return(false);
            }
Beispiel #7
0
        public static int LinearIndexOf(ITileTagEntrySelection a,
                                        ITileTagEntrySelection b,
                                        ITileTagEntrySelection c,
                                        ITileTagEntrySelection d)
        {
            int card  = 1;
            int index = 0;

            index += a.Index;
            card  *= Math.Max(1, a.Cardinality);

            index += b.Index * card;
            card  *= Math.Max(1, b.Cardinality);

            index += c.Index * card;
            card  *= Math.Max(1, c.Cardinality);

            index += d.Index * card;
            return(index);
        }