From 4f933e0a368a14743408331b3a02d26e2517ec02 Mon Sep 17 00:00:00 2001 From: Myk Taylor Date: Sun, 26 Feb 2023 23:06:25 -0800 Subject: [PATCH] ensure reachability for selected items --- plugins/buildingplan/buildingplan_cycle.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/plugins/buildingplan/buildingplan_cycle.cpp b/plugins/buildingplan/buildingplan_cycle.cpp index 655dc8c1a..329ee3b99 100644 --- a/plugins/buildingplan/buildingplan_cycle.cpp +++ b/plugins/buildingplan/buildingplan_cycle.cpp @@ -5,6 +5,7 @@ #include "modules/Items.h" #include "modules/Job.h" +#include "modules/Maps.h" #include "modules/Materials.h" #include "df/building_design.h" @@ -151,6 +152,10 @@ static df::building * popInvalidTasks(color_ostream &out, Bucket &task_queue, return NULL; } +static bool isAccessibleFrom(df::item *item, df::job *job) { + return Maps::canWalkBetween(Items::getPosition(item), job->pos); +} + static void doVector(color_ostream &out, df::job_item_vector_id vector_id, map &buckets, unordered_map &planned_buildings) { @@ -182,9 +187,10 @@ static void doVector(color_ostream &out, df::job_item_vector_id vector_id, auto job = bld->jobs[0]; auto filter_idx = task.second; auto &pb = planned_buildings.at(id); - if (matchesFilters(item, job->job_items[filter_idx], pb.heat_safety, + if (isAccessibleFrom(item, job) + && matchesFilters(item, job->job_items[filter_idx], pb.heat_safety, pb.item_filters[filter_idx]) - && Job::attachJobItem(job, item, + && Job::attachJobItem(job, item, df::job_item_ref::Hauled, filter_idx)) { MaterialInfo material;