feat: enforce activity site capacity
This commit is contained in:
@@ -23,13 +23,17 @@ func get_resource_candidates(action_id: StringName) -> Array[Dictionary]:
|
||||
|
||||
|
||||
func get_activity_target(action_id: StringName, origin: Vector3 = Vector3.ZERO) -> Dictionary:
|
||||
var best_candidate: Dictionary = {}
|
||||
var best_distance := INF
|
||||
for candidate in get_activity_candidates(action_id):
|
||||
var position: Vector3 = candidate["position"]
|
||||
var distance := origin.distance_squared_to(position)
|
||||
if distance < best_distance:
|
||||
best_distance = distance
|
||||
best_candidate = candidate
|
||||
if not best_candidate.is_empty():
|
||||
return best_candidate
|
||||
match action_id:
|
||||
SimulationIds.ACTION_PATROL:
|
||||
return _get_activity_site_target(action_id, origin)
|
||||
SimulationIds.ACTION_STUDY:
|
||||
return _get_activity_site_target(action_id, origin)
|
||||
SimulationIds.ACTION_REST:
|
||||
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:
|
||||
@@ -37,25 +41,22 @@ func get_activity_target(action_id: StringName, origin: Vector3 = Vector3.ZERO)
|
||||
return {}
|
||||
|
||||
|
||||
func _get_activity_site_target(action_id: StringName, origin: Vector3) -> Dictionary:
|
||||
var best_site: ActivitySite
|
||||
var best_distance := INF
|
||||
func get_activity_candidates(action_id: StringName) -> Array[Dictionary]:
|
||||
var candidates: Array[Dictionary] = []
|
||||
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": String(best_site.site_id),
|
||||
"position": best_site.get_interaction_position()
|
||||
}
|
||||
candidates.append(
|
||||
{
|
||||
"target_id": String(site.site_id),
|
||||
"position": site.get_interaction_position(),
|
||||
"capacity": site.capacity
|
||||
}
|
||||
)
|
||||
return candidates
|
||||
|
||||
|
||||
func _get_storage_target(storage_node: StorageNode) -> Dictionary:
|
||||
|
||||
Reference in New Issue
Block a user