diff --git a/docs/changelog.txt b/docs/changelog.txt index 4ade95841..f7a9b28a1 100644 --- a/docs/changelog.txt +++ b/docs/changelog.txt @@ -34,6 +34,7 @@ changelog.txt uses a syntax similar to RST, with a few special sequences: # Future ## Misc Improvements +- `embark-assistant`: slightly improved performance of surveying - `quickfort`: Dreamfort blueprint set improvements: `significant `_ refinements across the entire blueprint set. Dreamfort is now much faster, much more efficient, and much easier to use. The `checklist `__ now includes a mini-walkthrough for quick reference. The spreadsheet now also includes `embark profile suggestions `__ - `quickfort`: added aliases for configuring masterwork and artifact core quality for all stockpile categories that have them; made it possible to take from multiple stockpiles in the ``quantumstop`` alias diff --git a/plugins/embark-assistant/embark-assistant.cpp b/plugins/embark-assistant/embark-assistant.cpp index 626d96023..61a1b4f83 100644 --- a/plugins/embark-assistant/embark-assistant.cpp +++ b/plugins/embark-assistant/embark-assistant.cpp @@ -47,6 +47,7 @@ namespace embark_assist { embark_assist::defs::match_results match_results; embark_assist::defs::match_iterators match_iterator; uint16_t max_inorganic; + embark_assist::defs::mid_level_tiles mlt; }; static states *state = nullptr; @@ -64,14 +65,12 @@ namespace embark_assist { } auto screen = Gui::getViewscreenByType(0); - embark_assist::defs::mid_level_tiles mlt; - embark_assist::survey::initiate(&mlt); embark_assist::survey::survey_mid_level_tile(&state->geo_summary, &state->survey_results, - &mlt); + &state->mlt); - embark_assist::survey::survey_embark(&mlt, + embark_assist::survey::survey_embark(&state->mlt, &state->survey_results, &state->site_info, false); @@ -129,6 +128,7 @@ namespace embark_assist { void shutdown() { // color_ostream_proxy out(Core::getInstance().getConsole()); embark_assist::survey::shutdown(); + embark_assist::matcher::shutdown(); embark_assist::finder_ui::shutdown(); embark_assist::overlay::shutdown(); delete state; @@ -309,6 +309,8 @@ command_result embark_assistant(color_ostream &out, std::vector & } embark_assist::survey::setup(embark_assist::main::state->max_inorganic); + embark_assist::survey::initiate(&embark_assist::main::state->mlt); + embark_assist::matcher::setup(); embark_assist::main::state->geo_summary.resize(world_data->geo_biomes.size()); embark_assist::main::state->survey_results.resize(world->worldgen.worldgen_parms.dim_x); @@ -378,7 +380,7 @@ command_result embark_assistant(color_ostream &out, std::vector & embark_assist::survey::survey_region_sites(&embark_assist::main::state->region_sites); embark_assist::overlay::set_sites(&embark_assist::main::state->region_sites); - embark_assist::defs::mid_level_tiles mlt; + embark_assist::defs::mid_level_tiles &mlt = embark_assist::main::state->mlt; embark_assist::survey::survey_mid_level_tile(&embark_assist::main::state->geo_summary, &embark_assist::main::state->survey_results, &mlt); embark_assist::survey::survey_embark(&mlt, &embark_assist::main::state->survey_results, &embark_assist::main::state->site_info, false); embark_assist::overlay::set_embark(&embark_assist::main::state->site_info); diff --git a/plugins/embark-assistant/matcher.cpp b/plugins/embark-assistant/matcher.cpp index 3c46c4033..33ab66e75 100644 --- a/plugins/embark-assistant/matcher.cpp +++ b/plugins/embark-assistant/matcher.cpp @@ -64,6 +64,12 @@ namespace embark_assist { bool mineral_3; }; + struct states { + embark_assist::defs::mid_level_tiles mlt; + }; + + static states *state = nullptr; + //======================================================================================= void process_embark_incursion(matcher_info *result, @@ -2681,14 +2687,13 @@ namespace embark_assist { uint16_t y) { // color_ostream_proxy out(Core::getInstance().getConsole()); - embark_assist::defs::mid_level_tiles mlt; embark_assist::survey::survey_mid_level_tile(geo_summary, survey_results, - &mlt); + &state->mlt); mid_level_tile_match(survey_results, - &mlt, + &state->mlt, x, y, finder, @@ -2717,6 +2722,20 @@ namespace embark_assist { // Visible operations //======================================================================================= +void embark_assist::matcher::setup() { + embark_assist::matcher::state = new(embark_assist::matcher::states); + embark_assist::survey::initiate(&state->mlt); +} + +//======================================================================================= + +void embark_assist::matcher::shutdown() { + delete state; + state = nullptr; +} + +//======================================================================================= + void embark_assist::matcher::move_cursor(uint16_t x, uint16_t y) { // color_ostream_proxy out(Core::getInstance().getConsole()); auto screen = Gui::getViewscreenByType(0); diff --git a/plugins/embark-assistant/matcher.h b/plugins/embark-assistant/matcher.h index 9887ffbd0..9bc213fb1 100644 --- a/plugins/embark-assistant/matcher.h +++ b/plugins/embark-assistant/matcher.h @@ -17,5 +17,8 @@ namespace embark_assist { embark_assist::defs::geo_data *geo_summary, embark_assist::defs::world_tile_data *survey_results, embark_assist::defs::match_results *match_results); + + void setup(); + void shutdown(); } } \ No newline at end of file diff --git a/plugins/embark-assistant/survey.cpp b/plugins/embark-assistant/survey.cpp index d00e1b886..9eb2f28b6 100644 --- a/plugins/embark-assistant/survey.cpp +++ b/plugins/embark-assistant/survey.cpp @@ -75,7 +75,7 @@ namespace embark_assist { uint16_t max_inorganic; }; - static states *state; + static states *state = nullptr; //======================================================================================= @@ -908,6 +908,22 @@ void inline copy_incursion_values(embark_assist::defs::mid_level_tile_incursion_ //================================================================================= +void reset_mlt_inorganics(embark_assist::defs::mid_level_tiles &mlts) { + const uint16_t size = mlts[0][0].metals.size(); + for (uint8_t i = 0; i < 16; i++) { + for (uint8_t k = 0; k < 16; k++) { + embark_assist::defs::mid_level_tile &mlt = mlts[i][k]; + for (uint16_t l = 0; l < size; l++) { + mlt.metals[l] = false; + mlt.economics[l] = false; + mlt.minerals[l] = false; + } + } + } +} + +//================================================================================= + void embark_assist::survey::survey_mid_level_tile(embark_assist::defs::geo_data *geo_summary, embark_assist::defs::world_tile_data *survey_results, embark_assist::defs::mid_level_tiles *mlt) { @@ -940,13 +956,7 @@ void embark_assist::survey::survey_mid_level_tile(embark_assist::defs::geo_data tile.minerals[i] = 0; } - for (uint8_t i = 0; i < 16; i++) { - for (uint8_t k = 0; k < 16; k++) { - mlt->at(i).at(k).metals.resize(state->max_inorganic); - mlt->at(i).at(k).economics.resize(state->max_inorganic); - mlt->at(i).at(k).minerals.resize(state->max_inorganic); - } - } + reset_mlt_inorganics(*mlt); for (uint8_t i = 1; i < 10; i++) tile.biome_index[i] = -1; @@ -2538,5 +2548,6 @@ void embark_assist::survey::survey_embark(embark_assist::defs::mid_level_tiles * void embark_assist::survey::shutdown() { delete state; + state = nullptr; }