| 805 | } |
| 806 | |
| 807 | static command_result GetMaterialList(color_ostream &stream, const EmptyMessage *in, MaterialList *out) |
| 808 | { |
| 809 | if (!Core::getInstance().isWorldLoaded()) { |
| 810 | //out->set_available(false); |
| 811 | return CR_OK; |
| 812 | } |
| 813 | |
| 814 | auto *raws = &world->raws; |
| 815 | // df::world_history *history = &world->history; |
| 816 | MaterialInfo mat; |
| 817 | for (size_t i = 0; i < raws->inorganics.all.size(); i++) |
| 818 | { |
| 819 | mat.decode(0, i); |
| 820 | MaterialDefinition *mat_def = out->add_material_list(); |
| 821 | mat_def->mutable_mat_pair()->set_mat_type(0); |
| 822 | mat_def->mutable_mat_pair()->set_mat_index(i); |
| 823 | mat_def->set_id(mat.getToken()); |
| 824 | mat_def->set_name(DF2UTF(mat.toString())); //find the name at cave temperature; |
| 825 | if (size_t(raws->inorganics.all[i]->material.state_color[GetState(&raws->inorganics.all[i]->material)]) < raws->descriptors.colors.size()) |
| 826 | { |
| 827 | ConvertDFColorDescriptor(raws->inorganics.all[i]->material.state_color[GetState(&raws->inorganics.all[i]->material)], mat_def->mutable_state_color()); |
| 828 | } |
| 829 | } |
| 830 | for (int i = 0; i < 19; i++) |
| 831 | { |
| 832 | int k = -1; |
| 833 | if (i == 7) |
| 834 | k = 1;// for coal. |
| 835 | for (int j = -1; j <= k; j++) |
| 836 | { |
| 837 | mat.decode(i, j); |
| 838 | MaterialDefinition *mat_def = out->add_material_list(); |
| 839 | mat_def->mutable_mat_pair()->set_mat_type(i); |
| 840 | mat_def->mutable_mat_pair()->set_mat_index(j); |
| 841 | mat_def->set_id(mat.getToken()); |
| 842 | mat_def->set_name(DF2UTF(mat.toString())); //find the name at cave temperature; |
| 843 | if (size_t(raws->mat_table.builtin[i]->state_color[GetState(raws->mat_table.builtin[i])]) < raws->descriptors.colors.size()) |
| 844 | { |
| 845 | ConvertDFColorDescriptor(raws->mat_table.builtin[i]->state_color[GetState(raws->mat_table.builtin[i])], mat_def->mutable_state_color()); |
| 846 | } |
| 847 | } |
| 848 | } |
| 849 | for (size_t i = 0; i < raws->creatures.all.size(); i++) |
| 850 | { |
| 851 | df::creature_raw * creature = raws->creatures.all[i]; |
| 852 | for (size_t j = 0; j < creature->material.size(); j++) |
| 853 | { |
| 854 | mat.decode(j + MaterialInfo::CREATURE_BASE, i); |
| 855 | MaterialDefinition *mat_def = out->add_material_list(); |
| 856 | mat_def->mutable_mat_pair()->set_mat_type(j + 19); |
| 857 | mat_def->mutable_mat_pair()->set_mat_index(i); |
| 858 | mat_def->set_id(mat.getToken()); |
| 859 | mat_def->set_name(DF2UTF(mat.toString())); //find the name at cave temperature; |
| 860 | if (size_t(creature->material[j]->state_color[GetState(creature->material[j])]) < raws->descriptors.colors.size()) |
| 861 | { |
| 862 | ConvertDFColorDescriptor(creature->material[j]->state_color[GetState(creature->material[j])], mat_def->mutable_state_color()); |
| 863 | } |
| 864 | } |