aboutsummaryrefslogtreecommitdiff
path: root/src/client/render/core.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/client/render/core.cpp')
-rw-r--r--src/client/render/core.cpp82
1 files changed, 59 insertions, 23 deletions
diff --git a/src/client/render/core.cpp b/src/client/render/core.cpp
index 223af5142..cb4f1deb7 100644
--- a/src/client/render/core.cpp
+++ b/src/client/render/core.cpp
@@ -26,6 +26,8 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "client/hud.h"
#include "client/minimap.h"
#include "client/content_cao.h"
+#include "mapblock.h"
+#include "mapsector.h"
RenderingCore::RenderingCore(IrrlichtDevice *_device, Client *_client, Hud *_hud)
: device(_device), driver(device->getVideoDriver()), smgr(device->getSceneManager()),
@@ -55,7 +57,7 @@ void RenderingCore::updateScreenSize()
}
void RenderingCore::draw(video::SColor _skycolor, bool _show_hud, bool _show_minimap,
- bool _draw_wield_tool, bool _draw_crosshair, bool _draw_tracers, bool _draw_esp)
+ bool _draw_wield_tool, bool _draw_crosshair, bool _draw_esp, bool _draw_tracers, bool _draw_node_esp, bool _draw_node_tracers)
{
v2u32 ss = driver->getScreenSize();
if (screensize != ss) {
@@ -67,8 +69,10 @@ void RenderingCore::draw(video::SColor _skycolor, bool _show_hud, bool _show_min
show_minimap = _show_minimap;
draw_wield_tool = _draw_wield_tool;
draw_crosshair = _draw_crosshair;
- draw_tracers = _draw_tracers;
draw_esp = _draw_esp;
+ draw_tracers = _draw_tracers;
+ draw_node_esp = _draw_node_esp;
+ draw_node_tracers = _draw_node_tracers;
beforeDraw();
drawAll();
@@ -91,26 +95,58 @@ void RenderingCore::drawTracersAndESP()
material.setFlag(video::EMF_ZWRITE_ENABLE, false);
driver->setMaterial(material);
- auto allObjects = env.getAllActiveObjects();
- for (auto &it : allObjects) {
- ClientActiveObject *cao = it.second;
- if (cao->isLocalPlayer() || cao->getParent())
- continue;
- GenericCAO *obj = dynamic_cast<GenericCAO *>(cao);
- if (! obj)
- continue;
- aabb3f box;
- if (! obj->getSelectionBox(&box))
- continue;
- v3f pos = obj->getPosition();
- pos -= camera_offset;
- box.MinEdge += pos;
- box.MaxEdge += pos;
- pos = box.getCenter();
- if (draw_esp)
- driver->draw3DBox(box, video::SColor(255, 255, 255, 255));
- if (draw_tracers)
- driver->draw3DLine(eye_pos, pos, video::SColor(255, 255, 255, 255));
+ if (draw_esp || draw_tracers) {
+ auto allObjects = env.getAllActiveObjects();
+
+ for (auto &it : allObjects) {
+ ClientActiveObject *cao = it.second;
+ if (cao->isLocalPlayer() || cao->getParent())
+ continue;
+ GenericCAO *obj = dynamic_cast<GenericCAO *>(cao);
+ if (! obj)
+ continue;
+ aabb3f box;
+ if (! obj->getSelectionBox(&box))
+ continue;
+ v3f pos = obj->getPosition() - camera_offset;
+ box.MinEdge += pos;
+ box.MaxEdge += pos;
+ if (draw_esp)
+ driver->draw3DBox(box, video::SColor(255, 255, 255, 255));
+ if (draw_tracers)
+ driver->draw3DLine(eye_pos, box.getCenter(), video::SColor(255, 255, 255, 255));
+ }
+ }
+ if (draw_node_esp || draw_node_tracers) {
+ Map &map = env.getMap();
+ std::map<v2s16, MapSector*> *sectors = map.getSectorsPtr();
+
+ for (auto &sector_it : *sectors) {
+ MapSector *sector = sector_it.second;
+ MapBlockVect blocks;
+ sector->getBlocks(blocks);
+ for (MapBlock *block : blocks) {
+ if (! block->mesh)
+ continue;
+ for (v3s16 p : block->mesh->esp_nodes) {
+ v3f pos = intToFloat(p, BS) - camera_offset;
+ MapNode node = map.getNode(p);
+ std::vector<aabb3f> boxes;
+ node.getSelectionBoxes(client->getNodeDefManager(), &boxes, node.getNeighbors(p, &map));
+ video::SColor color = client->getNodeDefManager()->get(node).minimap_color;
+
+ for (aabb3f box : boxes) {
+ box.MinEdge += pos;
+ box.MaxEdge += pos;
+ if (draw_node_esp)
+ driver->draw3DBox(box, color);
+ if (draw_node_tracers)
+ driver->draw3DLine(eye_pos, box.getCenter(), color);
+ }
+ }
+ }
+ }
+
}
driver->setMaterial(oldmaterial);
@@ -123,7 +159,7 @@ void RenderingCore::draw3D()
if (!show_hud)
return;
hud->drawSelectionMesh();
- if (draw_tracers || draw_esp)
+ if (draw_esp || draw_tracers || draw_node_esp || draw_node_tracers)
drawTracersAndESP();
if (draw_wield_tool)
camera->drawWieldedTool();