60 lines
1.8 KiB
GDScript
60 lines
1.8 KiB
GDScript
class_name Random
|
|
|
|
const MIN_WORD_LEN = 4
|
|
const MAX_WORD_LEN = 8
|
|
|
|
const VOWEL = ["a","e","i","o","u","y"]
|
|
const CONSONANTS = ["b", "c", "d", "f", "g", "h", "j", "k", "l", "m", "n", "p", "q", "r", "s", "t", "v", "w", "x", "z"]
|
|
|
|
|
|
static func generate_random_word(_random_seed = randi()) -> String:
|
|
var word_len = randf_range(4,8)
|
|
var word = ''
|
|
var last_letter_is_vowel = false
|
|
|
|
for i in range(word_len):
|
|
if last_letter_is_vowel:
|
|
word += CONSONANTS.pick_random()
|
|
else:
|
|
word += VOWEL.pick_random()
|
|
|
|
last_letter_is_vowel = not last_letter_is_vowel
|
|
return word.capitalize()
|
|
|
|
static func mutate_word(word : String) -> String:
|
|
var rand_int = randi()
|
|
|
|
if len(word) > MIN_WORD_LEN and rand_int % 3 == 0:
|
|
return shorten_word(word)
|
|
elif len(word) < MAX_WORD_LEN and rand_int % 3 == 1:
|
|
return elongate_word(word)
|
|
|
|
return replace_character(word)
|
|
|
|
|
|
static func shorten_word(word : String):
|
|
if randi()%2 == 0:
|
|
return word.left(len(word) - 1).capitalize()
|
|
else :
|
|
return word.right(len(word) - 1).capitalize()
|
|
|
|
static func elongate_word(word : String):
|
|
if randi()%2 == 0:
|
|
var letter = CONSONANTS.pick_random() if word.left(1) in VOWEL else VOWEL.pick_random()
|
|
return (letter + word).capitalize()
|
|
else :
|
|
var letter = CONSONANTS.pick_random() if word.right(1) in VOWEL else VOWEL.pick_random()
|
|
return (word + letter).capitalize()
|
|
|
|
static func replace_character(word : String):
|
|
var character_id = randi_range(0, len(word))
|
|
var character = word[character_id]
|
|
|
|
if character in VOWEL:
|
|
character = VOWEL.pick_random()
|
|
else:
|
|
character = CONSONANTS.pick_random()
|
|
|
|
word[character_id] = character
|
|
return word
|