| 173 | |
| 174 | using world_map = std::variant<df::viewscreen_choose_start_sitest*, df::viewscreen_worldst*, df::viewscreen_new_regionst*>; |
| 175 | static std::optional<world_map> get_map() { |
| 176 | df::viewscreen* screen = Gui::getCurViewscreen(true); |
| 177 | screen = Gui::getDFViewscreen(true, screen); // Get the first non-dfhack viewscreen |
| 178 | if(!screen) |
| 179 | return {}; |
| 180 | |
| 181 | if (auto start_site = virtual_cast<df::viewscreen_choose_start_sitest>(screen)) |
| 182 | return start_site; |
| 183 | if (auto world_map = virtual_cast<df::viewscreen_worldst>(screen)) |
| 184 | return world_map; |
| 185 | if (auto worldgen_map = virtual_cast<df::viewscreen_new_regionst>(screen)) { |
| 186 | if (!world || world->worldgen_status.state <= df::world_generatorst::Initializing) |
| 187 | return {}; // Map isn't displayed yet |
| 188 | return worldgen_map; |
| 189 | } |
| 190 | return {}; |
| 191 | } |
| 192 | |
| 193 | static void scroll_world(world_map screen, int xdiff, int ydiff) { |
| 194 | const auto visitor = overloads { |
no outgoing calls
no test coverage detected