diff options
Diffstat (limited to 'src/client/render')
-rw-r--r-- | src/client/render/core.cpp | 59 | ||||
-rw-r--r-- | src/client/render/core.h | 10 | ||||
-rw-r--r-- | src/client/render/factory.cpp | 16 | ||||
-rw-r--r-- | src/client/render/factory.h | 2 | ||||
-rw-r--r-- | src/client/render/interlaced.cpp | 4 | ||||
-rw-r--r-- | src/client/render/interlaced.h | 2 | ||||
-rw-r--r-- | src/client/render/plain.cpp | 4 | ||||
-rw-r--r-- | src/client/render/plain.h | 2 | ||||
-rw-r--r-- | src/client/render/sidebyside.cpp | 4 | ||||
-rw-r--r-- | src/client/render/sidebyside.h | 2 | ||||
-rw-r--r-- | src/client/render/stereo.cpp | 4 | ||||
-rw-r--r-- | src/client/render/stereo.h | 2 |
12 files changed, 76 insertions, 35 deletions
diff --git a/src/client/render/core.cpp b/src/client/render/core.cpp index 44aef6408..45fc0d8ec 100644 --- a/src/client/render/core.cpp +++ b/src/client/render/core.cpp @@ -18,18 +18,19 @@ with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ +#include <iostream> #include "core.h" #include "client/camera.h" #include "client/client.h" #include "client/clientmap.h" #include "client/hud.h" #include "client/minimap.h" -#include "gui/tracers.h" +#include "client/content_cao.h" -RenderingCore::RenderingCore(IrrlichtDevice *_device, Client *_client, Hud *_hud, Tracers *_tracers) +RenderingCore::RenderingCore(IrrlichtDevice *_device, Client *_client, Hud *_hud) : device(_device), driver(device->getVideoDriver()), smgr(device->getSceneManager()), guienv(device->getGUIEnvironment()), client(_client), camera(client->getCamera()), - mapper(client->getMinimap()), hud(_hud), tracers(_tracers) + mapper(client->getMinimap()), hud(_hud) { screensize = driver->getScreenSize(); virtual_size = screensize; @@ -54,7 +55,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_wield_tool, bool _draw_crosshair, bool _draw_tracers, bool _draw_esp) { v2u32 ss = driver->getScreenSize(); if (screensize != ss) { @@ -67,23 +68,63 @@ void RenderingCore::draw(video::SColor _skycolor, bool _show_hud, bool _show_min draw_wield_tool = _draw_wield_tool; draw_crosshair = _draw_crosshair; draw_tracers = _draw_tracers; + draw_esp = _draw_esp; beforeDraw(); drawAll(); } -void RenderingCore::draw3D() +void RenderingCore::drawTracersAndESP() { + ClientEnvironment &env = client->getEnv(); + Camera *camera = client->getCamera(); + + v3f camera_offset = intToFloat(camera->getOffset(), BS); + v3f eye_pos = (camera->getPosition() + camera->getDirection() - camera_offset); + + video::SMaterial material, oldmaterial; + oldmaterial = driver->getMaterial2D(); + material.setFlag(video::EMF_LIGHTING, false); + material.setFlag(video::EMF_BILINEAR_FILTER, false); + material.setFlag(video::EMF_ZBUFFER, false); + 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)); + } + + driver->setMaterial(oldmaterial); +} + +void RenderingCore::draw3D() +{ smgr->drawAll(); driver->setTransform(video::ETS_WORLD, core::IdentityMatrix); if (!show_hud) return; hud->drawSelectionMesh(); - if (draw_tracers) { - driver->setTransform(video::ETS_WORLD, core::IdentityMatrix); - tracers->draw(driver, client); - } + if (draw_tracers || draw_esp) + drawTracersAndESP(); if (draw_wield_tool) camera->drawWieldedTool(); } diff --git a/src/client/render/core.h b/src/client/render/core.h index 89c6a8511..609892416 100644 --- a/src/client/render/core.h +++ b/src/client/render/core.h @@ -25,7 +25,6 @@ class Camera; class Client; class Hud; class Minimap; -class Tracers; class RenderingCore { @@ -38,6 +37,7 @@ protected: bool draw_wield_tool; bool draw_crosshair; bool draw_tracers; + bool draw_esp; IrrlichtDevice *device; video::IVideoDriver *driver; @@ -48,8 +48,7 @@ protected: Camera *camera; Minimap *mapper; Hud *hud; - Tracers *tracers; - + void updateScreenSize(); virtual void initTextures() {} virtual void clearTextures() {} @@ -57,12 +56,13 @@ protected: virtual void beforeDraw() {} virtual void drawAll() = 0; + void drawTracersAndESP(); void draw3D(); void drawHUD(); void drawPostFx(); public: - RenderingCore(IrrlichtDevice *_device, Client *_client, Hud *_hud, Tracers *_tracers); + RenderingCore(IrrlichtDevice *_device, Client *_client, Hud *_hud); RenderingCore(const RenderingCore &) = delete; RenderingCore(RenderingCore &&) = delete; virtual ~RenderingCore(); @@ -72,7 +72,7 @@ public: void initialize(); void draw(video::SColor _skycolor, bool _show_hud, bool _show_minimap, - bool _draw_wield_tool, bool _draw_crosshair, bool _draw_tracers); + bool _draw_wield_tool, bool _draw_crosshair, bool _draw_tracers, bool _draw_esp); inline v2u32 getVirtualSize() const { return virtual_size; } }; diff --git a/src/client/render/factory.cpp b/src/client/render/factory.cpp index 06376742d..30f9480fc 100644 --- a/src/client/render/factory.cpp +++ b/src/client/render/factory.cpp @@ -27,23 +27,23 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "sidebyside.h" RenderingCore *createRenderingCore(const std::string &stereo_mode, IrrlichtDevice *device, - Client *client, Hud *hud, Tracers *tracers) + Client *client, Hud *hud) { if (stereo_mode == "none") - return new RenderingCorePlain(device, client, hud, tracers); + return new RenderingCorePlain(device, client, hud); if (stereo_mode == "anaglyph") - return new RenderingCoreAnaglyph(device, client, hud, tracers); + return new RenderingCoreAnaglyph(device, client, hud); if (stereo_mode == "interlaced") - return new RenderingCoreInterlaced(device, client, hud, tracers); + return new RenderingCoreInterlaced(device, client, hud); #ifdef STEREO_PAGEFLIP_SUPPORTED if (stereo_mode == "pageflip") - return new RenderingCorePageflip(device, client, hud, tracers); + return new RenderingCorePageflip(device, client, hud); #endif if (stereo_mode == "sidebyside") - return new RenderingCoreSideBySide(device, client, hud, tracers); + return new RenderingCoreSideBySide(device, client, hud); if (stereo_mode == "topbottom") - return new RenderingCoreSideBySide(device, client, hud, tracers, true); + return new RenderingCoreSideBySide(device, client, hud, true); if (stereo_mode == "crossview") - return new RenderingCoreSideBySide(device, client, hud, tracers, false, true); + return new RenderingCoreSideBySide(device, client, hud, false, true); throw std::invalid_argument("Invalid rendering mode: " + stereo_mode); } diff --git a/src/client/render/factory.h b/src/client/render/factory.h index cd1845bd2..e3339a836 100644 --- a/src/client/render/factory.h +++ b/src/client/render/factory.h @@ -24,4 +24,4 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "core.h" RenderingCore *createRenderingCore(const std::string &stereo_mode, IrrlichtDevice *device, - Client *client, Hud *hud, Tracers *tracers); + Client *client, Hud *hud); diff --git a/src/client/render/interlaced.cpp b/src/client/render/interlaced.cpp index ae9d0d358..2aadadc17 100644 --- a/src/client/render/interlaced.cpp +++ b/src/client/render/interlaced.cpp @@ -24,8 +24,8 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "client/tile.h" RenderingCoreInterlaced::RenderingCoreInterlaced( - IrrlichtDevice *_device, Client *_client, Hud *_hud, Tracers *_tracers) - : RenderingCoreStereo(_device, _client, _hud, _tracers) + IrrlichtDevice *_device, Client *_client, Hud *_hud) + : RenderingCoreStereo(_device, _client, _hud) { initMaterial(); } diff --git a/src/client/render/interlaced.h b/src/client/render/interlaced.h index 94ccc61f8..71815fd70 100644 --- a/src/client/render/interlaced.h +++ b/src/client/render/interlaced.h @@ -38,6 +38,6 @@ protected: void merge(); public: - RenderingCoreInterlaced(IrrlichtDevice *_device, Client *_client, Hud *_hud, Tracers *_tracers); + RenderingCoreInterlaced(IrrlichtDevice *_device, Client *_client, Hud *_hud); void drawAll() override; }; diff --git a/src/client/render/plain.cpp b/src/client/render/plain.cpp index f1966a4b2..a130a14eb 100644 --- a/src/client/render/plain.cpp +++ b/src/client/render/plain.cpp @@ -27,8 +27,8 @@ inline u32 scaledown(u32 coef, u32 size) } RenderingCorePlain::RenderingCorePlain( - IrrlichtDevice *_device, Client *_client, Hud *_hud, Tracers *_tracers) - : RenderingCore(_device, _client, _hud, _tracers) + IrrlichtDevice *_device, Client *_client, Hud *_hud) + : RenderingCore(_device, _client, _hud) { scale = g_settings->getU16("undersampling"); } diff --git a/src/client/render/plain.h b/src/client/render/plain.h index afac62dee..80c17ed9f 100644 --- a/src/client/render/plain.h +++ b/src/client/render/plain.h @@ -33,6 +33,6 @@ protected: void upscale(); public: - RenderingCorePlain(IrrlichtDevice *_device, Client *_client, Hud *_hud, Tracers *_tracers); + RenderingCorePlain(IrrlichtDevice *_device, Client *_client, Hud *_hud); void drawAll() override; }; diff --git a/src/client/render/sidebyside.cpp b/src/client/render/sidebyside.cpp index 1b86fff3e..ed08810db 100644 --- a/src/client/render/sidebyside.cpp +++ b/src/client/render/sidebyside.cpp @@ -23,8 +23,8 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "client/hud.h" RenderingCoreSideBySide::RenderingCoreSideBySide( - IrrlichtDevice *_device, Client *_client, Hud *_hud, Tracers *_tracers, bool _horizontal, bool _flipped) - : RenderingCoreStereo(_device, _client, _hud, _tracers), horizontal(_horizontal), flipped(_flipped) + IrrlichtDevice *_device, Client *_client, Hud *_hud, bool _horizontal, bool _flipped) + : RenderingCoreStereo(_device, _client, _hud), horizontal(_horizontal), flipped(_flipped) { } diff --git a/src/client/render/sidebyside.h b/src/client/render/sidebyside.h index 10c3919d1..f8ed256b3 100644 --- a/src/client/render/sidebyside.h +++ b/src/client/render/sidebyside.h @@ -37,7 +37,7 @@ protected: void resetEye() override; public: - RenderingCoreSideBySide(IrrlichtDevice *_device, Client *_client, Hud *_hud, Tracers *_tracers, + RenderingCoreSideBySide(IrrlichtDevice *_device, Client *_client, Hud *_hud, bool _horizontal = false, bool _flipped = false); void drawAll() override; }; diff --git a/src/client/render/stereo.cpp b/src/client/render/stereo.cpp index d826eca59..967b5a78f 100644 --- a/src/client/render/stereo.cpp +++ b/src/client/render/stereo.cpp @@ -24,8 +24,8 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "settings.h" RenderingCoreStereo::RenderingCoreStereo( - IrrlichtDevice *_device, Client *_client, Hud *_hud, Tracers *_tracers) - : RenderingCore(_device, _client, _hud, _tracers) + IrrlichtDevice *_device, Client *_client, Hud *_hud) + : RenderingCore(_device, _client, _hud) { eye_offset = BS * g_settings->getFloat("3d_paralax_strength"); } diff --git a/src/client/render/stereo.h b/src/client/render/stereo.h index 3494f2512..c8b07e146 100644 --- a/src/client/render/stereo.h +++ b/src/client/render/stereo.h @@ -34,5 +34,5 @@ protected: void renderBothImages(); public: - RenderingCoreStereo(IrrlichtDevice *_device, Client *_client, Hud *_hud, Tracers *_tracers); + RenderingCoreStereo(IrrlichtDevice *_device, Client *_client, Hud *_hud); }; |