diff --git a/src/glsl/terrain_frag.glsl b/src/glsl/terrain_frag.glsl index 6406edb8..7152cb97 100644 --- a/src/glsl/terrain_frag.glsl +++ b/src/glsl/terrain_frag.glsl @@ -20,6 +20,8 @@ uniform bool draw_impassible_flag; uniform bool draw_terrain_height_contour; uniform bool draw_lines; uniform bool draw_hole_lines; +uniform bool draw_selection; +uniform bool draw_shadows; uniform bool draw_wireframe; uniform int wireframe_type; @@ -120,9 +122,16 @@ void main() out_color.rgb = mix(vec3(1.0), out_color.rgb, 0.5); } - float shadow_alpha = texture(shadow_map, vary_texcoord / 8.0).r; + if(draw_selection) + { + out_color.rgb = mix(vec3(1.0), out_color.rgb, 0.5); + } - out_color = vec4 (out_color.rgb * (1.0 - shadow_alpha), 1.0); + if (draw_shadows) + { + float shadow_alpha = texture(shadow_map, vary_texcoord / 8.0).r; + out_color = vec4 (out_color.rgb * (1.0 - shadow_alpha), 1.0); + } if (draw_terrain_height_contour) { diff --git a/src/noggit/MapView.cpp b/src/noggit/MapView.cpp index 98ea00fc..0c36496d 100644 --- a/src/noggit/MapView.cpp +++ b/src/noggit/MapView.cpp @@ -1665,6 +1665,8 @@ void MapView::saveMinimap(MinimapRenderSettings* settings) } } + minimapTool->progressUpdate(mmap_render_index); + } @@ -2596,6 +2598,7 @@ void MapView::draw_map() , _draw_hole_lines.get() || terrainMode == editing_mode::holes , _draw_models_with_box.get() , _draw_hidden_models.get() + , minimapTool->getMinimapRenderSettings() , _area_id_colors , _draw_fog.get() , terrainTool->_edit_type diff --git a/src/noggit/MapView.h b/src/noggit/MapView.h index c83f05f3..4134040f 100644 --- a/src/noggit/MapView.h +++ b/src/noggit/MapView.h @@ -201,6 +201,7 @@ public: void change_selected_wmo_doodadset(int set); void saveMinimap(MinimapRenderSettings* settings); void initMinimapSave() { saving_minimap = true; }; + noggit::camera* getCamera() { return &_camera; }; void set_editing_mode (editing_mode); diff --git a/src/noggit/World.cpp b/src/noggit/World.cpp index 587fc239..ba56f699 100644 --- a/src/noggit/World.cpp +++ b/src/noggit/World.cpp @@ -664,6 +664,7 @@ void World::draw ( math::matrix_4x4 const& model_view , bool draw_hole_lines , bool draw_models_with_box , bool draw_hidden_models + , MinimapRenderSettings* minimap_render_settings , std::map& area_id_colors , bool draw_fog , eTerrainType ground_editing_brush @@ -909,6 +910,7 @@ void World::draw ( math::matrix_4x4 const& model_view mcnk_shader.uniform("tex1", 2); mcnk_shader.uniform("tex2", 3); mcnk_shader.uniform("tex3", 4); + mcnk_shader.uniform("draw_shadows", 1); mcnk_shader.uniform("shadow_map", 5); mcnk_shader.uniform("tex_anim_0", math::vector_2d()); @@ -918,6 +920,17 @@ void World::draw ( math::matrix_4x4 const& model_view for (MapTile* tile : mapIndex.loaded_tiles()) { + + if (terrainMode == editing_mode::minimap + && minimap_render_settings->selected_tiles.at(64 * tile->index.x + tile->index.z)) + { + mcnk_shader.uniform("draw_selection", 1); + } + else + { + mcnk_shader.uniform("draw_selection", 0); + } + tile->draw ( frustum , mcnk_shader , detailtexcoords @@ -1856,6 +1869,8 @@ void World::drawMinimap ( MapTile *tile mcnk_shader.uniform("tex1", 2); mcnk_shader.uniform("tex2", 3); mcnk_shader.uniform("tex3", 4); + + mcnk_shader.uniform("draw_shadows", 0); mcnk_shader.uniform("shadow_map", 5); mcnk_shader.uniform("tex_anim_0", math::vector_2d()); diff --git a/src/noggit/World.h b/src/noggit/World.h index 5024ba10..5e90eeb1 100644 --- a/src/noggit/World.h +++ b/src/noggit/World.h @@ -121,6 +121,7 @@ public: , bool draw_hole_lines , bool draw_models_with_box , bool draw_hidden_models + , MinimapRenderSettings* minimap_render_settings , std::map& area_id_colors , bool draw_fog , eTerrainType ground_editing_brush diff --git a/src/noggit/ui/MinimapCreator.cpp b/src/noggit/ui/MinimapCreator.cpp index c28061fb..7f092126 100644 --- a/src/noggit/ui/MinimapCreator.cpp +++ b/src/noggit/ui/MinimapCreator.cpp @@ -17,6 +17,7 @@ #include #include #include +#include namespace noggit @@ -50,7 +51,8 @@ namespace noggit _minimap_widget->world(world); _minimap_widget->draw_boundaries(true); - _minimap_widget->use_selection(&_selected_tiles); + _minimap_widget->use_selection(&_render_settings.selected_tiles); + _minimap_widget->camera(mapView->getCamera()); // Right side @@ -123,6 +125,10 @@ namespace noggit draw_elevation->setChecked(_render_settings.draw_elevation); render_settings_box_layout->addRow (draw_elevation); + _progress_bar = new QProgressBar(this); + _progress_bar->setRange(0, 4096); + generate_layout->addRow (_progress_bar); + // Connections connect ( _radius_spin, qOverload (&QDoubleSpinBox::valueChanged) @@ -210,7 +216,7 @@ namespace noggit { if (world->mapIndex.hasTile(tile_index(x + i, y + j))) { - _selected_tiles[64 * (x + i) + (y + j)] = !QApplication::keyboardModifiers().testFlag( + _render_settings.selected_tiles[64 * (x + i) + (y + j)] = !QApplication::keyboardModifiers().testFlag( Qt::ControlModifier); } @@ -221,7 +227,7 @@ namespace noggit { if (world->mapIndex.hasTile(tile_index(tile.x(), tile.y()))) { - _selected_tiles[64 * tile.x() + tile.y()] = !QApplication::keyboardModifiers().testFlag( + _render_settings.selected_tiles[64 * tile.x() + tile.y()] = !QApplication::keyboardModifiers().testFlag( Qt::ControlModifier); } } diff --git a/src/noggit/ui/MinimapCreator.hpp b/src/noggit/ui/MinimapCreator.hpp index 71018d00..958fad11 100644 --- a/src/noggit/ui/MinimapCreator.hpp +++ b/src/noggit/ui/MinimapCreator.hpp @@ -4,9 +4,9 @@ #include #include -#include -#include #include +#include +#include #include #include @@ -43,6 +43,7 @@ struct MinimapRenderSettings std::vector m2_instance_filter_include; // include specific M2 instances std::vector wmo_model_filter_exclude; // exclude WMOs by filename std::vector wmo_instance_filter_exclude; // exclude specific WMO instances + std::array selected_tiles = {false}; }; @@ -60,21 +61,22 @@ namespace noggit float brushRadius() const { return _radius; } - std::array* getSelectedTiles() { return &_selected_tiles; }; + std::array* getSelectedTiles() { return &_render_settings.selected_tiles; }; MinimapRenderSettings* getMinimapRenderSettings() { return &_render_settings; }; QSize sizeHint() const override; void wheelEvent(QWheelEvent* event) override; + void progressUpdate(int value) { _progress_bar->setValue(value); }; + private: float _radius = 0.01f; MinimapRenderSettings _render_settings; QSlider* _radius_slider; QDoubleSpinBox* _radius_spin; minimap_widget* _minimap_widget; - - std::array _selected_tiles = {false}; + QProgressBar* _progress_bar; }; }