Пример #1
0
        private void SelectPhonotactics(ProceduralLanguageFactory factory)
        {
            Random rng = factory.RNG;

            ImplementPhonotactics(factory.Nucleus.SelectRandom(), ref NucleusChance, 0.25, rng);
            ImplementPhonotactics(factory.WordInitialOnset.SelectRandom(), ref WordInitialOnsetChance, 0.25, rng);
            ImplementPhonotactics(factory.WordMedialOnset.SelectRandom(), ref WordMedialOnsetChance, 0.75, rng);
            ImplementPhonotactics(factory.WordMedialCoda.SelectRandom(), ref WordMedialCodaChance, 0.25, rng);
            WordFinalCodaChance = WordMedialCodaChance;
            Geminates           = factory.Geminates.SelectRandom();
        }
Пример #2
0
        private void ImplementPhonotactics(Phonotactics phonotactics, ref double chance, double minChance, Random rng)
        {
            switch (phonotactics)
            {
            case Phonotactics.Forbidden:
                chance = 0.0;
                break;

            case Phonotactics.Optional:
                //chance = minChance + (rng.NextDouble() + rng.NextDouble()) / 2 * (1 - minChance);
                chance = minChance + rng.NextDouble() * (1 - minChance);
                break;

            case Phonotactics.Required:
                chance = 1.0;
                break;
            }
        }
Пример #3
0
        private void SelectPhonemes(ProceduralLanguageFactory factory)
        {
            Random rng = factory.RNG;

            Onsets.Clear();
            Nuclei.Clear();
            Codae.Clear();

            Phonotactics        diphthongs = factory.Diphthongs.SelectRandom();
            IEnumerable <Vowel> vowels     = factory.SelectRandomVowels();

            switch (diphthongs)
            {
            case Phonotactics.Forbidden:
                AddNuclei(vowels, 0.2, 1, rng);
                break;

            case Phonotactics.Optional:
                AddNuclei(vowels, 0.2, 1, rng);
                AddNuclei(factory.SelectMatchingDiphthongs(vowels), 0.01, 0.1, rng);
                break;

            case Phonotactics.Required:
                AddNuclei(factory.SelectMatchingDiphthongs(vowels), 0.01, 0.1, rng);
                break;
            }

            Phonotactics            clusters   = factory.ConsonantClusters.SelectRandom();
            IEnumerable <Consonant> consonants = factory.SelectRandomConsonants();

            switch (clusters)
            {
            case Phonotactics.Forbidden:
                if (AllowsOnset)
                {
                    AddOnsets(consonants, 0.2, 1, rng);
                }
                if (AllowsCoda)
                {
                    AddCodae(consonants, 0.2, 1, rng);
                }
                break;

            case Phonotactics.Optional:
                if (AllowsOnset)
                {
                    AddOnsets(consonants, 0.2, 1, rng);
                    AddOnsetClusters(factory.SelectMatchingClusters(consonants), 0.01, 0.1, rng);
                }
                if (AllowsCoda)
                {
                    AddCodae(consonants, 0.2, 1, rng);
                    AddCodaClusters(factory.SelectMatchingClusters(consonants), 0.01, 0.1, rng);
                }
                break;

            case Phonotactics.Required:
                if (AllowsOnset)
                {
                    AddOnsetClusters(factory.SelectMatchingClusters(consonants), 0.01, 0.1, rng);
                }
                if (AllowsCoda)
                {
                    AddCodaClusters(factory.SelectMatchingClusters(consonants), 0.01, 0.1, rng);
                }
                break;
            }
        }