Skip to content

Commit

Permalink
start rivers
Browse files Browse the repository at this point in the history
  • Loading branch information
BrickPi committed Dec 9, 2023
1 parent abb0804 commit 08c6b60
Show file tree
Hide file tree
Showing 3 changed files with 35 additions and 6 deletions.
3 changes: 2 additions & 1 deletion src/openvic-simulation/dataloader/Dataloader.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -602,7 +602,8 @@ bool Dataloader::_load_map_dir(GameManager& game_manager) const {

if (!map.load_map_images(
lookup_file(append_string_views(map_directory, provinces)),
lookup_file(append_string_views(map_directory, terrain)), false
lookup_file(append_string_views(map_directory, terrain)),
lookup_file(append_string_views(map_directory, rivers)), false
)) {
Logger::error("Failed to load map images!");
ret = false;
Expand Down
36 changes: 32 additions & 4 deletions src/openvic-simulation/map/Map.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -439,7 +439,7 @@ static constexpr colour_t colour_at(uint8_t const* colour_data, int32_t idx) {
return (colour_data[idx + 2] << 16) | (colour_data[idx + 1] << 8) | colour_data[idx];
}

bool Map::load_map_images(fs::path const& province_path, fs::path const& terrain_path, bool detailed_errors) {
bool Map::load_map_images(fs::path const& province_path, fs::path const& terrain_path, fs::path const& river_path, bool detailed_errors) {
if (!provinces.is_locked()) {
Logger::error("Province index image cannot be generated until after provinces are locked!");
return false;
Expand Down Expand Up @@ -476,10 +476,29 @@ bool Map::load_map_images(fs::path const& province_path, fs::path const& terrain
return false;
}

if (province_bmp.get_width() != terrain_bmp.get_width() || province_bmp.get_height() != terrain_bmp.get_height()) {
BMP river_bmp;
if (!(river_bmp.open(river_path) && river_bmp.read_header() && river_bmp.read_palette() && river_bmp.read_pixel_data())) {
Logger::error("Failed to read BMP for compatibility mode river image: ", river_path);
return false;
}
static constexpr uint16_t expected_river_bpp = 8;
if (river_bmp.get_bits_per_pixel() != expected_river_bpp) {
Logger::error(
"Invalid river BMP bits per pixel: ", river_bmp.get_bits_per_pixel(), " (expected ", expected_river_bpp, ")"
);
return false;
}

if (
province_bmp.get_width() != terrain_bmp.get_width() ||
province_bmp.get_height() != terrain_bmp.get_height() ||
province_bmp.get_width() != river_bmp.get_width() ||
province_bmp.get_height() != river_bmp.get_height()
) {
Logger::error(
"Mismatched province and terrain BMP dims: ", province_bmp.get_width(), "x", province_bmp.get_height(), " vs ",
terrain_bmp.get_width(), "x", terrain_bmp.get_height()
"Mismatched map BMP dims: expected ", province_bmp.get_width(), "x", province_bmp.get_height(), " (provinces) got ",
terrain_bmp.get_width(), "x", terrain_bmp.get_height(), " (terrain) and ", river_bmp.get_width(), "x",
river_bmp.get_height(), " (rivers)"
);
return false;
}
Expand All @@ -490,6 +509,7 @@ bool Map::load_map_images(fs::path const& province_path, fs::path const& terrain

uint8_t const* province_data = province_bmp.get_pixel_data().data();
uint8_t const* terrain_data = terrain_bmp.get_pixel_data().data();
uint8_t const* river_data = river_bmp.get_pixel_data().data();

std::vector<bool> province_checklist(provinces.size());
std::vector<fixed_point_map_t<TerrainType const*>> terrain_type_pixels_list(provinces.size());
Expand Down Expand Up @@ -570,6 +590,14 @@ bool Map::load_map_images(fs::path const& province_path, fs::path const& terrain
Logger::warning("Province image is missing ", missing, " province colours");
}

// load river bitmap
for (size_t y = 0; y < height; ++y) {
for (size_t x = 0; x < width; ++x) {
const size_t idx = x + y * width;
// TODO: load river crossing into provinces, river crossing is present if direct line from province centre (positions.txt) to adjacent province centre crosses river
}
}

return ret;
}

Expand Down
2 changes: 1 addition & 1 deletion src/openvic-simulation/map/Map.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -122,7 +122,7 @@ namespace OpenVic {
bool load_province_definitions(std::vector<ovdl::csv::LineObject> const& lines);
bool load_province_positions(BuildingTypeManager const& building_type_manager, ast::NodeCPtr root);
bool load_region_file(ast::NodeCPtr root);
bool load_map_images(fs::path const& province_path, fs::path const& terrain_path, bool detailed_errors);
bool load_map_images(fs::path const& province_path, fs::path const& terrain_path, fs::path const& river_path, bool detailed_errors);
bool generate_and_load_province_adjacencies(std::vector<ovdl::csv::LineObject> const& additional_adjacencies);
};
}

0 comments on commit 08c6b60

Please sign in to comment.