Esempio n. 1
0
        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);
 }