class_name ComboWindow extends RefCounted signal window_cleared(reason: String) const SIZE := 4 var slots: Array[String] = [] var pending_clear_reason := "" func record(input: String) -> void: if input.is_empty(): return slots.append(input) if slots.size() >= SIZE: pending_clear_reason = "full" func get_slots() -> Array[String]: return slots.duplicate() func has_pending_clear() -> bool: return not pending_clear_reason.is_empty() func consume_pending_clear_reason() -> String: var reason := pending_clear_reason pending_clear_reason = "" return reason func get_pattern() -> String: var pattern := "" for slot: String in slots: if slot != "Ø": pattern += slot return pattern func get_contiguous_pattern() -> String: var pattern := "" for index: int in range(slots.size() - 1, -1, -1): var slot := slots[index] if slot == "Ø": break pattern = slot + pattern return pattern func clear(reason := "") -> void: slots.clear() pending_clear_reason = "" window_cleared.emit(reason)