Example #1
0
    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));
    }
Example #2
0
    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");
    }
Example #3
0
    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);
    }