public TileConfiguration GetTileConfiguration(AdjBlendTile[] adj_config) { ushort[] explicit_rule = ConvertAdjacentToBytes(adj_config); TileConfiguration config = new TileConfiguration(); int tile_index = ClassifyTileConfiguration(explicit_rule); if (tile_index < 0) { config.tile = _default_tile; } else { config.tile = _blend_tiles[tile_index]; } config.shift = 0; if (config.tile == _default_tile) { return(config); } BlendRuleElement element = _rule_lists[tile_index].GetElement(explicit_rule); //calculate shift config.shift = BlendRuleElement.RulesMatch(element.rule_options, explicit_rule, config.tile.UpperSides()); return(config); }
public BlendRuleElement GetElement(ushort[] generic_rule) { for (int k = 0; k < _rules.Count; k++) { int shift = BlendRuleElement.RulesMatch(generic_rule, _rules[k].rule_options); if (shift >= 0) { return(_rules[k]); } } return(null); }