Files
gamedev-the-steward/simulation/commands/InteractionAvailabilityDecision.gd
T
2026-08-12 22:09:42 +02:00

76 lines
1.8 KiB
GDScript

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)