1
0
mirror of https://github.com/minetest/minetest.git synced 2025-07-04 08:50:22 +02:00

Decouple entity minimap markers from nametags replacing with show_on_minimap property (#10443)

This commit is contained in:
sfan5
2020-10-19 20:38:15 +02:00
committed by GitHub
parent b826e39730
commit 660115c1ab
11 changed files with 85 additions and 11 deletions

View 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;
}
@ -678,21 +682,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();
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 (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);
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) {