From 1837bc0d2d6b57b7bbb583084757470a9e0d409f Mon Sep 17 00:00:00 2001 From: Rijad Zuzo Date: Sat, 4 Jul 2026 19:24:19 +0200 Subject: [PATCH] fix: detect duplicate ResourceNode node_id and use interaction_point for distance calc - Push error and disable node when duplicate node_id is registered to prevent silent conflict during find_available() - Use interaction_point.global_position instead of self.global_position in find_available() so distance is measured to the marker NPCs actually navigate toward --- world/resource_nodes/ResourceNode.gd | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/world/resource_nodes/ResourceNode.gd b/world/resource_nodes/ResourceNode.gd index 7f75a32..a58c9a9 100644 --- a/world/resource_nodes/ResourceNode.gd +++ b/world/resource_nodes/ResourceNode.gd @@ -24,6 +24,12 @@ var reserved_by: int = -1 func _ready(): if node_id.is_empty(): push_error("ResourceNode at %s has empty node_id" % get_path()) + enabled = false + else: + var existing := get_by_id(node_id) + if existing != null: + push_error("Duplicate ResourceNode node_id '%s' at %s; first registered at %s" % [node_id, get_path(), existing.get_path()]) + enabled = false _all.append(self) add_to_group("resource_nodes") amount_changed.connect(_update_debug_label) @@ -93,7 +99,7 @@ static func find_available(action: StringName, agent_id: int, from_position: Vec continue if not node.is_available_for(agent_id): continue - var dist := from_position.distance_squared_to(node.global_position) + var dist := from_position.distance_squared_to(node.interaction_point.global_position) if dist < best_dist: best_dist = dist best = node