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(); }
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; } }
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; } }