This is tricky. we want to choose an item that can be brought to the job site, but that's not necessarily the same as job->pos. it could be many tiles off in any direction (e.g. for bridges), or up or down (e.g. for stairs). For now, just return if the item is in the same walkability group as a citizen or resident
| 74 | // up or down (e.g. for stairs). For now, just return if the item is in the same walkability group |
| 75 | // as a citizen or resident |
| 76 | static bool isAccessible(color_ostream& out, df::item* item) { |
| 77 | df::coord item_pos = Items::getPosition(item); |
| 78 | uint16_t walkability_group = Maps::getWalkableGroup(item_pos); |
| 79 | bool is_walkable = accessible_walkability_groups.contains(walkability_group); |
| 80 | TRACE(cycle, out).print("item {} in walkability_group {} at ({},{},{}) is {}accessible from job site\n", |
| 81 | item->id, walkability_group, item_pos.x, item_pos.y, item_pos.z, is_walkable ? "(probably) " : "not "); |
| 82 | return is_walkable; |
| 83 | } |
| 84 | |
| 85 | // as of v50, soap, coal, and ash are no longer valid building materials |
| 86 | static bool isUnusableBar(color_ostream& out, df::item* item) { |
no test coverage detected