private static DictionaryData GetDefault(DictionaryData parent) { while (true) { if (parent.Variants.Any()) { return(parent); } foreach (var variant in parent.SubVariants) { return(GetDefault(variant)); } } }
private static DictionaryData GetData(IReadOnlyList <string> bits, string name, int index, TileConfiguration tile, DictionaryData parent, string variantCode = null) { if (variantCode == null) { variantCode = bits[index]; } variantCode = Regex.Replace(variantCode, name, "", RegexOptions.IgnoreCase); variantCode = Regex.Replace(variantCode, "_", ""); if (!parent.Variants.ContainsKey(variantCode) && !parent.SubVariants.Any(x => x.SubVariantKey == variantCode) && !parent.SubVariants.Any(x => x.Variants.ContainsKey(variantCode))) { parent.Variants.Add(variantCode, tile.Code); return(parent); } DictionaryData variant; if (!parent.SubVariants.Any(x => x.SubVariantKey == variantCode)) { variant = new DictionaryData(); variant.SubVariantKey = variantCode; if (parent.Variants.ContainsKey(variantCode)) { var vCode = parent.Variants[variantCode].Split('.').Last(); vCode = Regex.Replace(vCode, variantCode, "", RegexOptions.IgnoreCase); vCode = Regex.Replace(vCode, "_", ""); variant.Variants.Add(vCode, parent.Variants[variantCode]); parent.Variants.Remove(variantCode); } parent.SubVariants.Add(variant); } else { variant = parent.SubVariants.First(x => x.SubVariantKey == variantCode); } if (index + 1 <= bits.Count - 1) { GetData(bits, variantCode, index + 1, tile, variant); } return(parent); }