public bool Match(int x, int y, out ITileTagEntrySelection result) { var idx = map[x, y].TerrainIdx; result = selections[idx]; return(result != null); }
public bool Match(int x, int y, out ITileTagEntrySelection result) { var state = map[x, y]; result = states[(int)state]; return(true); }
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)); }
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)); }
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); }
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); }
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); }