| 863 | } |
| 864 | |
| 865 | static void guess_job_material(df::job *job, MaterialInfo &mat, df::dfhack_material_category &mat_mask) |
| 866 | { |
| 867 | using namespace df::enums::job_type; |
| 868 | |
| 869 | if (job->job_type == PrepareMeal) |
| 870 | mat.decode(-1); |
| 871 | else |
| 872 | mat.decode(job); |
| 873 | |
| 874 | mat_mask.whole = job->material_category.whole; |
| 875 | |
| 876 | // Material from the job enum |
| 877 | const char *job_material = ENUM_ATTR(job_type, material, job->job_type); |
| 878 | if (job_material) |
| 879 | { |
| 880 | MaterialInfo info; |
| 881 | if (info.findBuiltin(job_material)) |
| 882 | mat = info; |
| 883 | else |
| 884 | parseJobMaterialCategory(&mat_mask, job_material); |
| 885 | } |
| 886 | |
| 887 | // Material from the job reagent |
| 888 | if (!mat.isValid() && !job->job_items.elements.empty() && |
| 889 | (job->job_items.elements.size() == 1 || |
| 890 | job->job_items.elements[0]->item_type == item_type::PLANT)) |
| 891 | { |
| 892 | mat.decode(job->job_items.elements[0]); |
| 893 | |
| 894 | switch (job->job_items.elements[0]->item_type) |
| 895 | { |
| 896 | case item_type::WOOD: |
| 897 | mat_mask.bits.wood = mat_mask.bits.wood2 = true; |
| 898 | break; |
| 899 | |
| 900 | default: |
| 901 | break; |
| 902 | } |
| 903 | } |
| 904 | } |
| 905 | |
| 906 | static int cbEnumJobOutputs(lua_State *L) |
| 907 | { |
no test coverage detected