From dc29f65fa83c5a4fd16d069b73d98bbd9950e1dd Mon Sep 17 00:00:00 2001 From: MihailRis Date: Wed, 15 Apr 2026 23:26:08 +0300 Subject: [PATCH] add entity to TextNote --- src/graphics/render/TextNote.cpp | 8 ++++++++ src/graphics/render/TextNote.hpp | 4 ++++ src/graphics/render/TextsRenderer.cpp | 17 +++++++++++++++-- src/graphics/render/TextsRenderer.hpp | 9 ++++++++- src/graphics/render/WorldRenderer.cpp | 6 ++++-- 5 files changed, 39 insertions(+), 5 deletions(-) diff --git a/src/graphics/render/TextNote.cpp b/src/graphics/render/TextNote.cpp index 127414c37..7c4797fd3 100644 --- a/src/graphics/render/TextNote.cpp +++ b/src/graphics/render/TextNote.cpp @@ -10,6 +10,14 @@ void TextNote::setText(std::wstring_view text) { this->text = text; } +void TextNote::setEntity(entityid_t eid) { + this->entity = eid; +} + +entityid_t TextNote::getEntity() const { + return entity; +} + const std::wstring& TextNote::getText() const { return text; } diff --git a/src/graphics/render/TextNote.hpp b/src/graphics/render/TextNote.hpp index 65a26ac17..0fc8f4afd 100644 --- a/src/graphics/render/TextNote.hpp +++ b/src/graphics/render/TextNote.hpp @@ -1,5 +1,6 @@ #pragma once +#include "constants.hpp" #include "presets/NotePreset.hpp" /// @brief 3D text instance @@ -7,6 +8,7 @@ class TextNote { std::wstring text; NotePreset preset; glm::vec3 position; + entityid_t entity = ENTITY_NONE; glm::vec3 xAxis {1, 0, 0}; glm::vec3 yAxis {0, 1, 0}; @@ -14,6 +16,8 @@ public: TextNote(std::wstring text, NotePreset preset, glm::vec3 position); void setText(std::wstring_view text); + void setEntity(entityid_t eid); + entityid_t getEntity() const; const std::wstring& getText() const; diff --git a/src/graphics/render/TextsRenderer.cpp b/src/graphics/render/TextsRenderer.cpp index ed822fc9f..ac93d1e43 100644 --- a/src/graphics/render/TextsRenderer.cpp +++ b/src/graphics/render/TextsRenderer.cpp @@ -10,12 +10,18 @@ #include "graphics/core/Shader.hpp" #include "graphics/core/DrawContext.hpp" #include "presets/NotePreset.hpp" +#include "world/Level.hpp" +#include "objects/Entities.hpp" +#include "objects/Entity.hpp" #include "constants.hpp" TextsRenderer::TextsRenderer( - Batch3D& batch, const Assets& assets, const Frustum& frustum + const Level& level, + Batch3D& batch, + const Assets& assets, + const Frustum& frustum ) - : batch(batch), assets(assets), frustum(frustum) { + : level(level), batch(batch), assets(assets), frustum(frustum) { } void TextsRenderer::renderNote( @@ -31,6 +37,13 @@ void TextsRenderer::renderNote( const auto& preset = note.getPreset(); auto pos = note.getPosition(); + entityid_t eid = note.getEntity(); + if (eid != ENTITY_NONE) { + if (auto entity = level.entities->get(eid)) { + pos += entity->getTransform().displayPos; + } + } + if (util::distance2(pos, camera.position) > util::sqr(preset.renderDistance / camera.zoom)) { return; diff --git a/src/graphics/render/TextsRenderer.hpp b/src/graphics/render/TextsRenderer.hpp index 629bc3cd2..77af2581a 100644 --- a/src/graphics/render/TextsRenderer.hpp +++ b/src/graphics/render/TextsRenderer.hpp @@ -12,8 +12,10 @@ class Batch3D; class Frustum; class TextNote; struct EngineSettings; +class Level; class TextsRenderer { + const Level& level; Batch3D& batch; const Assets& assets; const Frustum& frustum; @@ -31,7 +33,12 @@ class TextsRenderer { bool projected ); public: - TextsRenderer(Batch3D& batch, const Assets& assets, const Frustum& frustum); + TextsRenderer( + const Level& level, + Batch3D& batch, + const Assets& assets, + const Frustum& frustum + ); void render( const DrawContext& context, diff --git a/src/graphics/render/WorldRenderer.cpp b/src/graphics/render/WorldRenderer.cpp index 9f173eb38..2e150e1f7 100644 --- a/src/graphics/render/WorldRenderer.cpp +++ b/src/graphics/render/WorldRenderer.cpp @@ -91,9 +91,11 @@ WorldRenderer::WorldRenderer( assets, level, *player.chunks, &engine.getSettings().graphics )), particles(std::make_unique( - assets, level, *player.chunks, engine.getSettings().graphics + assets, level, *player.chunks, engine.getSettings().graphics + )), + texts(std::make_unique( + level, *batch3d, assets, *frustumCulling )), - texts(std::make_unique(*batch3d, assets, *frustumCulling)), blockWraps(std::make_unique( assets, level.content, *player.chunks )) {