extends Node const MIN_LENGTH := 5 const MAX_LENGTH := 5 const GENERABLE_WORDS_FILENAME = "res://words/popular-filtered.txt" const ALL_WORDS_FILENAME := "res://words/enable1.txt" var daily_mode := true var generable_words: Dictionary var all_words: Dictionary func _ready() -> void: randomize() generable_words = parse_words(GENERABLE_WORDS_FILENAME, MIN_LENGTH, MAX_LENGTH) all_words = parse_words(ALL_WORDS_FILENAME, MIN_LENGTH, MAX_LENGTH) func parse_words(filename: String, min_len: int, max_len: int) -> Dictionary: var dict := {} for i in range(min_len, max_len + 1): dict[i] = [] var file := File.new() var error := file.open(filename, File.READ) assert(not error) while not file.eof_reached(): var line := file.get_line() var length = line.length() if length < min_len || length > max_len: continue dict[length].append(line.to_upper()) file.close() return dict func generate_word(length: int, random_seed = null) -> String: var random_value: int if typeof(random_seed) == TYPE_INT: var rng = RandomNumberGenerator.new() rng.set_seed(random_seed) random_value = rng.randi() else: random_value = randi() var words_list := generable_words[length] as Array return words_list[random_value % words_list.size()] func is_valid_word(word: String) -> bool: var length := word.length() if length < MIN_LENGTH or length > MAX_LENGTH: return false var words_list := all_words[length] as Array return word.to_upper() in words_list