public void OnValidate() { List <string> strings = new List <string>(); foreach (NameTemplate template in nameTemplates) { template.Validate(); strings.Add(template.template); } combinedTemplates = new List <NameTemplate>(); foreach (NameTemplate outerTemplate in nameTemplates) { foreach (NameTemplate innerTemplate in nameTemplates) { // Nesting templates within itself is kind of awkward if (outerTemplate == innerTemplate) { continue; } NameTemplate newTemplate = outerTemplate.Combine(innerTemplate); if (newTemplate != null && !strings.Contains(newTemplate.template)) { combinedTemplates.Add(newTemplate); strings.Add(newTemplate.template); } } } combinedTemplates.Sort((w1, w2) => w1.template.CompareTo(w2.template)); }
public string GenerateName(System.Random random, CardTags tags) { List <NameTemplate> templates = GetTemplates(tags); while (templates.Count > 0) { NameTemplate template = templates[random.Next(templates.Count)]; List <WordTags> wordTags = template.GetWordTags(); List <string> replacements = new List <string>(); bool valid = true; foreach (WordTags wTags in wordTags) { List <string> possibleWords = wordBank.GetWordsFromTags(tags, wTags, replacements); if (possibleWords.Count > 0) { replacements.Add(possibleWords[random.Next(possibleWords.Count)]); } else { Debug.LogWarning("Could not generate words to fill out template: " + template.template); valid = false; break; } } if (valid) { return(template.GetName(replacements)); } templates.Remove(template); } return("Untitled"); }
public NameTemplate Combine(NameTemplate innerTemplate) { // the inner template should be a subset of the outer template if ((categoryTags & innerTemplate.categoryTags) == innerTemplate.categoryTags && (requiredTags & innerTemplate.requiredTags) == innerTemplate.requiredTags) { List <WordTags> wordTags = GetWordTags(); MatchCollection matches = Regex.Matches(template, regexPattern); for (int i = 0; i < wordTags.Count; i++) { if ((wordTags[i] & innerTemplate.outputTags) == wordTags[i]) { NameTemplate newTemplate = new NameTemplate(); newTemplate.template = template.Replace(matches[i].Groups[0].Value, innerTemplate.template); newTemplate.categoryTags = categoryTags; newTemplate.requiredTags = requiredTags; newTemplate.requiredTags |= CardTags.MID_COST | CardTags.HIGH_COST; return(newTemplate); } } } return(null); }