minimap creator: add option to render combined minimap

This commit is contained in:
Skarn
2020-10-30 23:29:17 +03:00
parent 18cec514e1
commit 6c268ef750
3 changed files with 95 additions and 20 deletions

View File

@@ -2181,8 +2181,8 @@ bool World::saveMinimap(tile_index const& tile_idx, MinimapRenderSettings* setti
QImage image = pixel_buffer.toImage();
QSettings settings;
QString str = settings.value ("project/path").toString();
QSettings app_settings;
QString str = app_settings.value ("project/path").toString();
if (!(str.endsWith('\\') || str.endsWith('/')))
{
str += "/";
@@ -2205,14 +2205,49 @@ bool World::saveMinimap(tile_index const& tile_idx, MinimapRenderSettings* setti
void* blp_image = blp.createBlpDxtInMemory(true, FORMAT_DXT5, file_size);
std::string tex_name = std::string(basename + "_" + std::to_string(tile_idx.x) + "_" + std::to_string(tile_idx.z) + ".blp");
QFile file(dir.filePath(tex_name.c_str()));
file.open(QIODevice::WriteOnly);
QDataStream out(&file);
QDataStream out(&file);
out.writeRawData(reinterpret_cast<char*>(blp_image), file_size);
file.close();
// Write combined file
if (settings->combined_minimap)
{
QString image_path = QString(std::string(basename + "_combined_minimap.png").c_str());
QImage combined_image;
if (dir.exists(image_path))
{
combined_image = QImage(dir.filePath(image_path));
if (combined_image.width() != 8192 | combined_image.height() != 8192)
{
combined_image = QImage(8192, 8192, QImage::Format_ARGB32);
}
}
else
{
combined_image = QImage(8192, 8192, QImage::Format_ARGB32);
}
QImage scaled_image = image.scaled(128, 128, Qt::KeepAspectRatio);
for (int i = 0; i < 128; ++i)
{
for (int j = 0; j < 128; ++j)
{
combined_image.setPixelColor(tile_idx.x * 128 + j, tile_idx.z * 128 + i, scaled_image.pixelColor(j, i));
}
}
combined_image.save(dir.filePath(image_path));
}
// Register in md5translate.trs
std::string map_name = gMapDB.getMapName(mapIndex._map_id);
std::string tilename_left = (boost::format("%s\\map_%d_%02d.blp") % map_name % tile_idx.x % tile_idx.z).str();

View File

@@ -10,6 +10,7 @@
#include <util/qt/overload.hpp>
#include <QFormLayout>
#include <QGridLayout>
#include <QGroupBox>
#include <QCheckBox>
#include <QButtonGroup>
@@ -110,29 +111,48 @@ namespace noggit
render_settings_box_layout->addRow (resolution);
auto draw_models = new QCheckBox("Draw models", render_settings_box);
auto file_format = new QComboBox(this);
file_format->addItem(".blp");
file_format->addItem(".png");
file_format->setCurrentText(".blp");
render_settings_box_layout->addRow (file_format);
auto draw_elements_box_layout = new QGridLayout();
render_settings_box_layout->addItem(draw_elements_box_layout);
auto draw_models = new QCheckBox("Models", render_settings_box);
draw_models->setChecked(_render_settings.draw_m2);
render_settings_box_layout->addRow (draw_models);
draw_elements_box_layout->addWidget(draw_models, 0, 0);
auto draw_wmos = new QCheckBox("Draw WMOs", render_settings_box);
auto draw_wmos = new QCheckBox("WMOs", render_settings_box);
draw_wmos->setChecked(_render_settings.draw_wmo);
render_settings_box_layout->addRow (draw_wmos);
draw_elements_box_layout->addWidget(draw_wmos, 1, 0);
auto draw_water = new QCheckBox("Draw water", render_settings_box);
auto draw_water = new QCheckBox("Water", render_settings_box);
draw_water->setChecked(_render_settings.draw_water);
render_settings_box_layout->addRow (draw_water);
draw_elements_box_layout->addWidget(draw_water, 2, 0);
auto draw_adt = new QCheckBox("Draw ADT grid", render_settings_box);
draw_adt->setChecked(_render_settings.draw_adt_grid);
render_settings_box_layout->addRow (draw_adt);
auto draw_elevation = new QCheckBox("Draw elevation lines", render_settings_box);
draw_elevation->setChecked(_render_settings.draw_elevation);
render_settings_box_layout->addRow (draw_elevation);
auto use_filters = new QCheckBox("Use filters", render_settings_box);
auto use_filters = new QCheckBox("Filter", render_settings_box);
use_filters->setChecked(_render_settings.use_filters);
render_settings_box_layout->addRow (use_filters);
draw_elements_box_layout->addWidget(use_filters, 3, 0);
auto draw_adt = new QCheckBox("ADT grid", render_settings_box);
draw_adt->setChecked(_render_settings.draw_adt_grid);
draw_elements_box_layout->addWidget(draw_adt, 0, 1);
auto draw_elevation = new QCheckBox("Elevation", render_settings_box);
draw_elevation->setChecked(_render_settings.draw_elevation);
draw_elements_box_layout->addWidget(draw_elevation, 1, 1);
auto draw_shadows = new QCheckBox("Shadows", render_settings_box);
draw_elevation->setChecked(_render_settings.draw_shadows);
draw_elements_box_layout->addWidget(draw_shadows, 2, 1);
auto combined_minimap = new QCheckBox("Combine", render_settings_box);
combined_minimap->setChecked(_render_settings.combined_minimap);
draw_elements_box_layout->addWidget(combined_minimap, 3, 1);
_progress_bar = new QProgressBar(this);
_progress_bar->setRange(0, 4096);
@@ -741,6 +761,13 @@ namespace noggit
}
);
connect ( file_format, &QComboBox::currentTextChanged
, [&] (QString s)
{
_render_settings.file_format = s.toStdString();
}
);
connect (draw_models, &QCheckBox::stateChanged, [this] (int s)
{
_render_settings.draw_m2 = s;
@@ -771,6 +798,16 @@ namespace noggit
_render_settings.use_filters = s;
});
connect (draw_shadows, &QCheckBox::stateChanged, [this] (int s)
{
_render_settings.draw_shadows = s;
});
connect (combined_minimap, &QCheckBox::stateChanged, [this] (int s)
{
_render_settings.combined_minimap = s;
});
// Buttons
connect(cur_adt_btn, &QPushButton::clicked, [=]() {
_render_settings.export_mode = MinimapGenMode::CURRENT_ADT;

View File

@@ -36,6 +36,7 @@ enum MinimapGenMode
struct MinimapRenderSettings
{
MinimapGenMode export_mode;
std::string file_format = ".blp";
// Render settings
int resolution = 512;
@@ -44,7 +45,9 @@ struct MinimapRenderSettings
bool draw_water = true;
bool draw_adt_grid = false;
bool draw_elevation = false;
bool draw_shadows = false;
bool use_filters = false;
bool combined_minimap = false;
// Selection
std::array<bool, 4096> selected_tiles = {false};