Files
gamedev-the-steward/player/PlayerInteractionResult.gd
T
2026-08-13 00:08:30 +02:00

71 lines
1.8 KiB
GDScript

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),
]
)
)