60 lines
1.6 KiB
GDScript
60 lines
1.6 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[GoalRequirementData]:
|
|
var result: Array[GoalRequirementData] = []
|
|
for requirement_resource in requirements:
|
|
if requirement_resource == null:
|
|
continue
|
|
if not bool(requirement_resource.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[GoalRequirementData] = get_valid_requirements()
|
|
if valid_requirements.is_empty():
|
|
return false
|
|
|
|
for requirement_resource in valid_requirements:
|
|
if not bool(requirement_resource.is_met()):
|
|
return false
|
|
|
|
return true
|
|
|
|
func get_first_requirement_summary() -> String:
|
|
var valid_requirements: Array[GoalRequirementData] = get_valid_requirements()
|
|
if valid_requirements.is_empty():
|
|
return ""
|
|
return String(valid_requirements[0].get_summary_text())
|
|
|
|
func get_progress() -> float:
|
|
var valid_requirements: Array[GoalRequirementData] = get_valid_requirements()
|
|
if valid_requirements.is_empty():
|
|
return 0.0
|
|
|
|
var min_progress: float = 1.0
|
|
for requirement in valid_requirements:
|
|
if requirement == null or not requirement.is_valid():
|
|
continue
|
|
|
|
var requirement_progress: float = requirement.get_progress()
|
|
if requirement_progress < min_progress:
|
|
min_progress = requirement_progress
|
|
|
|
return min_progress
|