class_name PlayerInteractionResult extends RefCounted const KIND_ANIMAL := &"animal" const KIND_RESOURCE := &"resource" const KIND_PANTRY := &"pantry" const KIND_STORAGE_DEPOSIT := &"storage_deposit" const KIND_ACTIVITY := &"activity" const KIND_DIALOGUE := &"dialogue" var kind: StringName var action_id: StringName var target_id: StringName var display_name: String var prompt_text: String var detail_text: String var blocked_reason: String var target_node: Node var expected_state_revision: int var target_generation: int var target_context_id: StringName var target_registry_instance_id: int func _init( interaction_kind: StringName, interaction_action_id: StringName, interaction_target_id: StringName, interaction_display_name: String, interaction_prompt_text: String, interaction_detail_text: String, interaction_target_node: Node, metadata: Dictionary = {} ) -> void: kind = interaction_kind action_id = interaction_action_id target_id = interaction_target_id display_name = interaction_display_name prompt_text = interaction_prompt_text detail_text = interaction_detail_text target_node = interaction_target_node blocked_reason = String(metadata.get("blocked_reason", "")) expected_state_revision = int(metadata.get("expected_state_revision", -1)) target_generation = int(metadata.get("target_generation", -1)) target_context_id = StringName(metadata.get("target_context_id", &"")) target_registry_instance_id = int(metadata.get("target_registry_instance_id", 0)) func is_available() -> bool: return blocked_reason.is_empty() func cache_key() -> String: return ( "|" . join( [ String(kind), String(action_id), String(target_id), prompt_text, detail_text, blocked_reason, str(expected_state_revision), str(target_generation), String(target_context_id), str(target_registry_instance_id), ] ) )