44 lines
1.1 KiB
GDScript
44 lines
1.1 KiB
GDScript
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"))
|