feat: enforce activity site capacity

This commit is contained in:
2026-07-07 16:12:13 +02:00
parent 9d87372a15
commit 1c389ec23d
7 changed files with 87 additions and 26 deletions
+14 -2
View File
@@ -6,6 +6,7 @@ class FakeActiveWorld:
var resource_candidates: Array[Dictionary] = []
var activity_position := Vector3(4.0, 0.0, 7.0)
var activity_candidates: Array[Dictionary] = []
func get_resource_candidates(_action_id: StringName) -> Array[Dictionary]:
return resource_candidates
@@ -13,6 +14,9 @@ class FakeActiveWorld:
func get_activity_target(_action_id: StringName, _origin: Vector3 = Vector3.ZERO) -> Dictionary:
return {"target_id": "", "position": activity_position}
func get_activity_candidates(_action_id: StringName) -> Array[Dictionary]:
return activity_candidates
var failures: Array[String] = []
var travel_requests: Array[Vector3] = []
@@ -135,14 +139,22 @@ func _test_target_resolution_and_travel_are_separate() -> void:
)
manager.release_npc_reservation(npc.id)
adapter.activity_candidates = [
{"target_id": "study_desk_full", "position": Vector3(1.0, 0.0, 0.0), "capacity": 1},
{"target_id": "study_desk_open", "position": Vector3(4.0, 0.0, 7.0), "capacity": 1}
]
var occupying_npc: SimNPC = manager.npcs[1]
occupying_npc.set_task(SimulationIds.ACTION_STUDY)
occupying_npc.target_id = &"study_desk_full"
occupying_npc.task_state = SimNPC.TASK_STATE_WORKING
npc.set_task(SimulationIds.ACTION_STUDY)
_check(
manager.resolve_npc_target(npc.id, Vector3.ZERO),
"Target resolver should resolve an activity through the adapter"
)
_check(
travel_requests.back() == adapter.activity_position,
"Activity resolution should publish the adapter's position"
npc.target_id == &"study_desk_open" and travel_requests.back() == adapter.activity_position,
"Activity resolution should skip a full-capacity site and publish the open site's position"
)
manager.free()
adapter.free()