feat: enforce activity site capacity
This commit is contained in:
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user