feat: project catalog interaction offers
This commit is contained in:
@@ -0,0 +1,75 @@
|
||||
class_name InteractionAvailabilityDecision
|
||||
extends RefCounted
|
||||
|
||||
var _enabled := true
|
||||
var _reason_code: StringName
|
||||
var _reason_message := ""
|
||||
var _reason_trace: Array[StringName] = []
|
||||
var _parameters: Dictionary = {}
|
||||
var _valid := false
|
||||
|
||||
|
||||
func _init(
|
||||
enabled: bool = true,
|
||||
reason_code: StringName = &"",
|
||||
reason_message: String = "",
|
||||
reason_trace: Array = [],
|
||||
parameters: Dictionary = {}
|
||||
) -> void:
|
||||
_enabled = enabled
|
||||
_reason_code = reason_code
|
||||
_reason_message = reason_message
|
||||
_parameters = parameters.duplicate(true)
|
||||
_valid = not WorldTargetCapability._contains_object(_parameters)
|
||||
for trace_value in reason_trace:
|
||||
if trace_value is not String and trace_value is not StringName:
|
||||
_valid = false
|
||||
continue
|
||||
var trace_id := StringName(trace_value)
|
||||
if trace_id.is_empty():
|
||||
_valid = false
|
||||
continue
|
||||
_reason_trace.append(trace_id)
|
||||
if not _enabled and (_reason_code.is_empty() or _reason_message.is_empty()):
|
||||
_valid = false
|
||||
|
||||
|
||||
static func allowed(
|
||||
reason_trace: Array = [&"availability_allowed"], parameters: Dictionary = {}
|
||||
) -> InteractionAvailabilityDecision:
|
||||
return InteractionAvailabilityDecision.new(true, &"", "", reason_trace, parameters)
|
||||
|
||||
|
||||
static func denied(
|
||||
reason_code: StringName,
|
||||
reason_message: String,
|
||||
reason_trace: Array,
|
||||
parameters: Dictionary = {}
|
||||
) -> InteractionAvailabilityDecision:
|
||||
return InteractionAvailabilityDecision.new(
|
||||
false, reason_code, reason_message, reason_trace, parameters
|
||||
)
|
||||
|
||||
|
||||
func is_valid() -> bool:
|
||||
return _valid
|
||||
|
||||
|
||||
func is_enabled() -> bool:
|
||||
return _enabled
|
||||
|
||||
|
||||
func get_reason_code() -> StringName:
|
||||
return _reason_code
|
||||
|
||||
|
||||
func get_reason_message() -> String:
|
||||
return _reason_message
|
||||
|
||||
|
||||
func get_reason_trace() -> Array[StringName]:
|
||||
return _reason_trace.duplicate()
|
||||
|
||||
|
||||
func get_parameters() -> Dictionary:
|
||||
return _parameters.duplicate(true)
|
||||
Reference in New Issue
Block a user