]> git.lizzy.rs Git - dragonfireclient.git/blobdiff - src/client/minimap.cpp
Remove unused header includes
[dragonfireclient.git] / src / client / minimap.cpp
index 6bae408b40ef9d702142178e48eb9f8588f7ed9b..f26aa1c70ef07152b0d03bb8c492ccd98a099f97 100644 (file)
@@ -252,6 +252,10 @@ Minimap::~Minimap()
        driver->removeTexture(data->minimap_overlay_square);
        driver->removeTexture(data->object_marker_red);
 
+       for (MinimapMarker *m : m_markers)
+               delete m;
+       m_markers.clear();
+
        delete data;
        delete m_minimap_update_thread;
 }
@@ -300,7 +304,7 @@ void Minimap::setModeIndex(size_t index)
                data->mode = m_modes[index];
                m_current_mode_index = index;
        } else {
-               data->mode = MinimapModeDef{MINIMAP_TYPE_OFF, N_("Minimap hidden"), 0, 0, ""};
+               data->mode = MinimapModeDef{MINIMAP_TYPE_OFF, gettext("Minimap hidden"), 0, 0, ""};
                m_current_mode_index = 0;
        }
 
@@ -326,25 +330,26 @@ void Minimap::addMode(MinimapModeDef mode)
        if (mode.label == "") {
                switch (mode.type) {
                        case MINIMAP_TYPE_OFF:
-                               mode.label = N_("Minimap hidden");
+                               mode.label = gettext("Minimap hidden");
                                break;
                        case MINIMAP_TYPE_SURFACE:
-                               mode.label = N_("Minimap in surface mode, Zoom x%d");
+                               mode.label = gettext("Minimap in surface mode, Zoom x%d");
                                if (mode.map_size > 0)
                                        zoom = 256 / mode.map_size;
                                break;
                        case MINIMAP_TYPE_RADAR:
-                               mode.label = N_("Minimap in radar mode, Zoom x%d");
+                               mode.label = gettext("Minimap in radar mode, Zoom x%d");
                                if (mode.map_size > 0)
                                        zoom = 512 / mode.map_size;
                                break;
                        case MINIMAP_TYPE_TEXTURE:
-                               mode.label = N_("Minimap in texture mode");
+                               mode.label = gettext("Minimap in texture mode");
                                break;
                        default:
                                break;
                }
        }
+       // else: Custom labels need mod-provided client-side translation
 
        if (zoom >= 0) {
                char label_buf[1024];
@@ -486,7 +491,8 @@ video::ITexture *Minimap::getMinimapTexture()
                // Want to use texture source, to : 1 find texture, 2 cache it
                video::ITexture* texture = m_tsrc->getTexture(data->mode.texture);
                video::IImage* image = driver->createImageFromData(
-                        texture->getColorFormat(), texture->getSize(), texture->lock(), true, false);
+                        texture->getColorFormat(), texture->getSize(),
+                        texture->lock(video::ETLM_READ_ONLY), true, false);
                texture->unlock();
 
                auto dim = image->getDimension();
@@ -571,7 +577,7 @@ scene::SMeshBuffer *Minimap::getMinimapMeshBuffer()
 void Minimap::drawMinimap()
 {
        // Non hud managed minimap drawing (legacy minimap)
-       v2u32 screensize = RenderingEngine::get_instance()->getWindowSize();
+       v2u32 screensize = RenderingEngine::getWindowSize();
        const u32 size = 0.25 * screensize.Y;
 
        drawMinimap(core::rect<s32>(
@@ -608,7 +614,7 @@ void Minimap::drawMinimap(core::rect<s32> rect) {
        material.TextureLayer[1].Texture = data->heightmap_texture;
 
        if (m_enable_shaders && data->mode.type == MINIMAP_TYPE_SURFACE) {
-               u16 sid = m_shdrsrc->getShader("minimap_shader", 1, 1);
+               u16 sid = m_shdrsrc->getShader("minimap_shader", TILE_MATERIAL_ALPHA);
                material.MaterialType = m_shdrsrc->getShaderInfo(sid).material;
        } else {
                material.MaterialType = video::EMT_TRANSPARENT_ALPHA_CHANNEL;
@@ -678,21 +684,34 @@ void Minimap::drawMinimap(core::rect<s32> rect) {
        }
 }
 
+MinimapMarker* Minimap::addMarker(scene::ISceneNode *parent_node)
+{
+       MinimapMarker *m = new MinimapMarker(parent_node);
+       m_markers.push_back(m);
+       return m;
+}
+
+void Minimap::removeMarker(MinimapMarker **m)
+{
+       m_markers.remove(*m);
+       delete *m;
+       *m = nullptr;
+}
+
 void Minimap::updateActiveMarkers()
 {
        video::IImage *minimap_mask = data->minimap_shape_round ?
                data->minimap_mask_round : data->minimap_mask_square;
 
-       const std::list<Nametag *> &nametags = client->getCamera()->getNametags();
-
        m_active_markers.clear();
-
-       for (Nametag *nametag : nametags) {
-               v3s16 pos = floatToInt(nametag->parent_node->getAbsolutePosition() +
-                       intToFloat(client->getCamera()->getOffset(), BS), BS);
-               pos -= data->pos - v3s16(data->mode.map_size / 2,
-                               data->mode.scan_height / 2,
-                               data->mode.map_size / 2);
+       v3f cam_offset = intToFloat(client->getCamera()->getOffset(), BS);
+       v3s16 pos_offset = data->pos - v3s16(data->mode.map_size / 2,
+                       data->mode.scan_height / 2,
+                       data->mode.map_size / 2);
+
+       for (MinimapMarker *marker : m_markers) {
+               v3s16 pos = floatToInt(marker->parent_node->getAbsolutePosition() +
+                       cam_offset, BS) - pos_offset;
                if (pos.X < 0 || pos.X > data->mode.map_size ||
                                pos.Y < 0 || pos.Y > data->mode.scan_height ||
                                pos.Z < 0 || pos.Z > data->mode.map_size) {