mirror of
https://github.com/luanti-org/luanti.git
synced 2025-08-11 17:51:04 +00:00
Add minimap feature
This commit is contained in:
parent
3376d2e114
commit
ffd16e3fec
23 changed files with 883 additions and 30 deletions
|
@ -25,6 +25,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
|||
#include "nodedef.h"
|
||||
#include "gamedef.h"
|
||||
#include "mesh.h"
|
||||
#include "minimap.h"
|
||||
#include "content_mapblock.h"
|
||||
#include "noise.h"
|
||||
#include "shader.h"
|
||||
|
@ -1028,6 +1029,7 @@ static void updateAllFastFaceRows(MeshMakeData *data,
|
|||
|
||||
MapBlockMesh::MapBlockMesh(MeshMakeData *data, v3s16 camera_offset):
|
||||
m_mesh(new scene::SMesh()),
|
||||
m_minimap_mapblock(new MinimapMapblock),
|
||||
m_gamedef(data->m_gamedef),
|
||||
m_tsrc(m_gamedef->getTextureSource()),
|
||||
m_shdrsrc(m_gamedef->getShaderSource()),
|
||||
|
@ -1041,6 +1043,32 @@ MapBlockMesh::MapBlockMesh(MeshMakeData *data, v3s16 camera_offset):
|
|||
m_enable_shaders = data->m_use_shaders;
|
||||
m_enable_highlighting = g_settings->getBool("enable_node_highlighting");
|
||||
|
||||
if (g_settings->getBool("enable_minimap")) {
|
||||
v3s16 blockpos_nodes = data->m_blockpos * MAP_BLOCKSIZE;
|
||||
for(s16 x = 0; x < MAP_BLOCKSIZE; x++) {
|
||||
for(s16 z = 0; z < MAP_BLOCKSIZE; z++) {
|
||||
s16 air_count = 0;
|
||||
bool surface_found = false;
|
||||
MinimapPixel* minimap_pixel = &m_minimap_mapblock->data[x + z * MAP_BLOCKSIZE];
|
||||
for(s16 y = MAP_BLOCKSIZE -1; y > -1; y--) {
|
||||
v3s16 p(x, y, z);
|
||||
MapNode n = data->m_vmanip.getNodeNoEx(blockpos_nodes + p);
|
||||
if (!surface_found && n.getContent() != CONTENT_AIR) {
|
||||
minimap_pixel->height = y;
|
||||
minimap_pixel->id = n.getContent();
|
||||
surface_found = true;
|
||||
} else if (n.getContent() == CONTENT_AIR) {
|
||||
air_count++;
|
||||
}
|
||||
}
|
||||
if (!surface_found) {
|
||||
minimap_pixel->id = CONTENT_AIR;
|
||||
}
|
||||
minimap_pixel->air_count = air_count;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 4-21ms for MAP_BLOCKSIZE=16 (NOTE: probably outdated)
|
||||
// 24-155ms for MAP_BLOCKSIZE=32 (NOTE: probably outdated)
|
||||
//TimeTaker timer1("MapBlockMesh()");
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue