feat: replace activity markers with typed sites

This commit is contained in:
2026-07-07 13:27:02 +02:00
parent e5bd93d705
commit 4c090f1635
19 changed files with 308 additions and 126 deletions
+25 -10
View File
@@ -1,9 +1,6 @@
class_name ActiveWorldAdapter
extends Node
@export var guard_marker: Marker3D
@export var study_marker: Marker3D
@export var rest_marker: Marker3D
@export var pantry_storage: StorageNode
@@ -18,22 +15,40 @@ func get_resource_candidates(action_id: StringName) -> Array[Dictionary]:
return candidates
func get_activity_target(action_id: StringName) -> Dictionary:
var marker: Marker3D
func get_activity_target(action_id: StringName, origin: Vector3 = Vector3.ZERO) -> Dictionary:
match action_id:
SimulationIds.ACTION_PATROL:
marker = guard_marker
return _get_activity_site_target(action_id, origin)
SimulationIds.ACTION_STUDY:
marker = study_marker
return _get_activity_site_target(action_id, origin)
SimulationIds.ACTION_REST:
marker = rest_marker
return _get_activity_site_target(action_id, origin)
SimulationIds.ACTION_EAT:
return _get_storage_target(pantry_storage)
SimulationIds.ACTION_DEPOSIT_FOOD, SimulationIds.ACTION_WITHDRAW_FOOD:
return _get_storage_target(pantry_storage)
if marker == null:
return {}
func _get_activity_site_target(action_id: StringName, origin: Vector3) -> Dictionary:
var best_site: ActivitySite
var best_distance := INF
for candidate in ActivitySite.get_all():
var site := candidate as ActivitySite
if site == null:
continue
if not site.supports_action(action_id):
continue
var distance := origin.distance_squared_to(site.get_interaction_position())
if distance < best_distance:
best_distance = distance
best_site = site
if best_site == null:
return {}
return {"target_id": "", "position": marker.global_position}
return {
"target_id": String(best_site.site_id),
"position": best_site.get_interaction_position()
}
func _get_storage_target(storage_node: StorageNode) -> Dictionary: