class_name ActionDefinition extends Resource @export var action_id: StringName @export var display_name: String @export_range(0.0, 1000.0, 0.1) var default_duration := 1.0 @export var preferred_profession_id: StringName @export var target_type: StringName = SimulationIds.TARGET_ACTIVITY @export var resource_action_id: StringName @export var completion_cost_resource_id: StringName @export_range(0.0, 1000.0, 0.1) var completion_cost_amount := 0.0 func validate() -> Array[String]: var errors: Array[String] = [] if action_id.is_empty(): errors.append("action_id is empty") if display_name.is_empty(): errors.append("display_name is empty for '%s'" % action_id) if default_duration <= 0.0: errors.append("default_duration must be positive for '%s'" % action_id) if ( target_type not in [ SimulationIds.TARGET_RESOURCE, SimulationIds.TARGET_ACTIVITY, SimulationIds.TARGET_ANIMAL, SimulationIds.TARGET_FREE, ] ): errors.append("target_type '%s' is invalid for '%s'" % [target_type, action_id]) if target_type == SimulationIds.TARGET_RESOURCE and resource_action_id.is_empty(): errors.append("resource_action_id is required for '%s'" % action_id) if completion_cost_resource_id.is_empty() and completion_cost_amount > 0.0: errors.append("completion cost resource is required for '%s'" % action_id) if not completion_cost_resource_id.is_empty() and completion_cost_amount <= 0.0: errors.append("completion cost amount must be positive for '%s'" % action_id) return errors func has_completion_cost() -> bool: return not completion_cost_resource_id.is_empty() and completion_cost_amount > 0.0