class_name SituationPredicate extends Resource const SOURCE_EVENT := &"event" const SOURCE_STATE := &"state" @export var predicate_id: StringName @export var evaluator_id: StringName @export_enum("event", "state") var source: String = String(SOURCE_EVENT) @export var parameters: Dictionary = {} func validate() -> Array[String]: var errors: Array[String] = [] if predicate_id.is_empty(): errors.append("predicate_id is empty") if evaluator_id.is_empty(): errors.append("evaluator_id is empty for predicate '%s'" % predicate_id) if StringName(source) not in [SOURCE_EVENT, SOURCE_STATE]: errors.append("predicate '%s' has invalid source '%s'" % [predicate_id, source]) for key in parameters: if not key is String and not key is StringName: errors.append("predicate '%s' has a non-string parameter key" % predicate_id) return errors func duplicate_predicate() -> SituationPredicate: var copy := SituationPredicate.new() copy.predicate_id = predicate_id copy.evaluator_id = evaluator_id copy.source = source copy.parameters = parameters.duplicate(true) return copy