class_name GoalData extends Resource @export var id: StringName = &"" @export var requirements: Array[GoalRequirementData] = [] func has_id() -> bool: return not String(id).strip_edges().is_empty() func get_valid_requirements() -> Array[Resource]: var result: Array[Resource] = [] for requirement_resource in requirements: if requirement_resource == null: continue if not bool(requirement_resource.call("is_valid")): continue result.append(requirement_resource) return result func is_valid() -> bool: if not has_id(): return false return not get_valid_requirements().is_empty() func is_met() -> bool: var valid_requirements: Array[Resource] = get_valid_requirements() if valid_requirements.is_empty(): return false for requirement_resource in valid_requirements: if not bool(requirement_resource.call("is_met")): return false return true func get_first_requirement_summary() -> String: var valid_requirements: Array[Resource] = get_valid_requirements() if valid_requirements.is_empty(): return "" return String(valid_requirements[0].call("get_summary_text"))