From ef57295c028870ae9d4e1946bbdf869a314eb29e Mon Sep 17 00:00:00 2001 From: PatrikLundell Date: Tue, 4 Dec 2018 14:58:10 +0100 Subject: [PATCH] Added coal search to embark-assistant --- plugins/embark-assistant/survey.cpp | 60 +++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) diff --git a/plugins/embark-assistant/survey.cpp b/plugins/embark-assistant/survey.cpp index 4071d78b3..f19f3cd4a 100644 --- a/plugins/embark-assistant/survey.cpp +++ b/plugins/embark-assistant/survey.cpp @@ -10,6 +10,7 @@ #include "modules/Materials.h" #include "DataDefs.h" +#include "df/builtin_mats.h" #include "df/coord2d.h" #include "df/creature_interaction_effect.h" #include "df/creature_interaction_effect_display_symbolst.h" @@ -34,6 +35,9 @@ #include "df/interaction_target_materialst.h" #include "df/material_common.h" #include "df/reaction.h" +#include "df/reaction_product.h" +#include "df/reaction_product_itemst.h" +#include "df/reaction_product_type.h" #include "df/region_map_entry.h" #include "df/syndrome.h" #include "df/viewscreen.h" @@ -66,6 +70,7 @@ namespace embark_assist { struct states { uint16_t clay_reaction = -1; uint16_t flux_reaction = -1; + std::vector coals; uint16_t x; uint16_t y; uint8_t local_min_x; @@ -104,6 +109,19 @@ namespace embark_assist { out.printerr("The reaction 'PIG_IRON_MAKING' was not found, so flux can't be identified.\n"); } + for (uint16_t i = 0; i < world->raws.inorganics.size(); i++) { + for (uint16_t k = 0; k < world->raws.inorganics[i]->economic_uses.size(); k++) { + for (uint16_t l = 0; l < world->raws.reactions.reactions[world->raws.inorganics[i]->economic_uses[k]]->products.size(); l++) { + df::reaction_product_itemst *product = static_cast(world->raws.reactions.reactions[world->raws.inorganics[i]->economic_uses[k]]->products[l]); + + if (product->mat_type == df::builtin_mats::COAL) { + state->coals.push_back(i); + break; + } + } + } + } + for (uint16_t i = 0; i < world_data->geo_biomes.size(); i++) { geo_summary->at(i).possible_metals.resize(state->max_inorganic); geo_summary->at(i).possible_economics.resize(state->max_inorganic); @@ -154,6 +172,13 @@ namespace embark_assist { } } + for (uint16_t l = 0; l < state->coals.size(); l++) { + if (layer->mat_index == state->coals[l]) { + geo_summary->at(i).coal_absent = false; + break; + } + } + size = (uint16_t)layer->vein_mat.size(); for (uint16_t l = 0; l < size; l++) { @@ -176,6 +201,14 @@ namespace embark_assist { geo_summary->at(i).flux_absent = false; } } + + for (uint16_t m = 0; m < state->coals.size(); m++) { + if (vein== state->coals[m]) { + geo_summary->at(i).coal_absent = false; + break; + } + } + } } @@ -531,6 +564,7 @@ void embark_assist::survey::high_level_world_survey(embark_assist::defs::geo_dat results.clay_count = 0; results.sand_count = 0; results.flux_count = 0; + results.coal_count = 0; results.min_region_soil = 10; results.max_region_soil = 0; results.waterfall = false; @@ -576,6 +610,7 @@ void embark_assist::survey::high_level_world_survey(embark_assist::defs::geo_dat if (!geo_summary->at(geo_index).clay_absent) results.clay_count++; if (!geo_summary->at(geo_index).sand_absent) results.sand_count++; if (!geo_summary->at(geo_index).flux_absent) results.flux_count++; + if (!geo_summary->at(geo_index).coal_absent) results.coal_count++; if (geo_summary->at(geo_index).soil_size < results.min_region_soil) results.min_region_soil = geo_summary->at(geo_index).soil_size; @@ -614,6 +649,8 @@ void embark_assist::survey::high_level_world_survey(embark_assist::defs::geo_dat if (results.clay_count == offset_count) results.clay_count = 256; if (results.sand_count == offset_count) results.sand_count = 256; if (results.flux_count == offset_count) results.flux_count = 256; + if (results.coal_count == offset_count) results.coal_count = 256; + for (uint8_t l = 0; l < 3; l++) { if (results.savagery_count[l] == offset_count) results.savagery_count[l] = 256; if (results.evilness_count[l] == offset_count) results.evilness_count[l] = 256; @@ -776,6 +813,8 @@ void embark_assist::survey::survey_mid_level_tile(embark_assist::defs::geo_data mlt->at(i).at(k).clay = false; mlt->at(i).at(k).sand = false; mlt->at(i).at(k).flux = false; + mlt->at(i).at(k).coal = false; + if (max_soil_depth == 0) { mlt->at(i).at(k).soil_depth = 0; } @@ -869,6 +908,13 @@ void embark_assist::survey::survey_mid_level_tile(embark_assist::defs::geo_data mlt->at(i).at(k).flux = true; } } + + for (uint16_t m = 0; m < state->coals.size(); m++) { + if (layer->mat_index == state->coals [m]) { + mlt->at(i).at(k).coal = true; + break; + } + } } end_check_m = static_cast(layer->vein_mat.size()); @@ -895,6 +941,13 @@ void embark_assist::survey::survey_mid_level_tile(embark_assist::defs::geo_data mlt->at(i).at(k).flux = true; } } + + for (uint16_t n = 0; n < state->coals.size(); n++) { + if (layer->vein_mat [m] == state->coals[n]) { + mlt->at(i).at(k).coal = true; + break; + } + } } } @@ -911,6 +964,7 @@ void embark_assist::survey::survey_mid_level_tile(embark_assist::defs::geo_data survey_results->at(x).at(y).clay_count = 0; survey_results->at(x).at(y).sand_count = 0; survey_results->at(x).at(y).flux_count = 0; + survey_results->at(x).at(y).coal_count = 0; survey_results->at(x).at(y).min_region_soil = 10; survey_results->at(x).at(y).max_region_soil = 0; survey_results->at(x).at(y).savagery_count[0] = 0; @@ -929,6 +983,7 @@ void embark_assist::survey::survey_mid_level_tile(embark_assist::defs::geo_data if (mlt->at(i).at(k).clay) { survey_results->at(x).at(y).clay_count++; } if (mlt->at(i).at(k).sand) { survey_results->at(x).at(y).sand_count++; } if (mlt->at(i).at(k).flux) { survey_results->at(x).at(y).flux_count++; } + if (mlt->at(i).at(k).coal) { survey_results->at(x).at(y).coal_count++; } if (mlt->at(i).at(k).soil_depth < survey_results->at(x).at(y).min_region_soil) { survey_results->at(x).at(y).min_region_soil = mlt->at(i).at(k).soil_depth; @@ -1170,6 +1225,7 @@ void embark_assist::survey::survey_embark(embark_assist::defs::mid_level_tiles * site_info->clay = false; site_info->sand = false; site_info->flux = false; + site_info->coal = false; site_info->metals.clear(); site_info->economics.clear(); site_info->metals.clear(); @@ -1222,6 +1278,10 @@ void embark_assist::survey::survey_embark(embark_assist::defs::mid_level_tiles * site_info->flux = true; } + if (mlt->at(i).at(k).coal) { + site_info->coal = true; + } + for (uint16_t l = 0; l < state->max_inorganic; l++) { metals[l] = metals[l] || mlt->at(i).at(k).metals[l]; economics[l] = economics[l] || mlt->at(i).at(k).economics[l];