From e1579f0c253d7aa4a740649e081b847d91ce556c Mon Sep 17 00:00:00 2001 From: MihailRis Date: Sat, 23 Nov 2024 08:00:35 +0300 Subject: [PATCH] add player_name text3d preset --- res/presets/text3d/player_name.toml | 3 +++ src/frontend/screens/LevelScreen.cpp | 2 +- src/graphics/render/Decorator.cpp | 37 +++++++++++++++------------- src/graphics/render/Decorator.hpp | 9 ++++++- 4 files changed, 32 insertions(+), 19 deletions(-) create mode 100644 res/presets/text3d/player_name.toml diff --git a/res/presets/text3d/player_name.toml b/res/presets/text3d/player_name.toml new file mode 100644 index 00000000..7942ff48 --- /dev/null +++ b/res/presets/text3d/player_name.toml @@ -0,0 +1,3 @@ +display = "projected" +xray_opacity = 0.3 +render_distance = 128 diff --git a/src/frontend/screens/LevelScreen.cpp b/src/frontend/screens/LevelScreen.cpp index b77268ff..34d1db67 100644 --- a/src/frontend/screens/LevelScreen.cpp +++ b/src/frontend/screens/LevelScreen.cpp @@ -50,7 +50,7 @@ LevelScreen::LevelScreen(Engine* engine, std::unique_ptr levelPtr) hud = std::make_unique(engine, *frontend, controller->getPlayer()); decorator = std::make_unique( - *controller, *worldRenderer, assets + *engine, *controller, *worldRenderer, assets ); keepAlive(settings.graphics.backlight.observe([=](bool) { diff --git a/src/graphics/render/Decorator.cpp b/src/graphics/render/Decorator.cpp index 2cc10d73..b423557d 100644 --- a/src/graphics/render/Decorator.cpp +++ b/src/graphics/render/Decorator.cpp @@ -13,7 +13,10 @@ #include "objects/Players.hpp" #include "logic/LevelController.hpp" #include "util/stringutil.hpp" -#include "presets/NotePreset.hpp" +#include "engine.hpp" +#include "files/files.hpp" + +namespace fs = std::filesystem; /// @brief Not greather than 64 for this BIG_PRIME value inline constexpr int UPDATE_AREA_DIAMETER = 32; @@ -25,22 +28,11 @@ inline constexpr int ITERATIONS = 512; /// @brief Big prime number used for pseudo-random 3d array iteration inline constexpr int BIG_PRIME = 666667; -static u64id_t create_player_name_note( - const WorldRenderer& renderer, const Player& player -) { - NotePreset preset {}; - preset.displayMode = NoteDisplayMode::PROJECTED; - preset.xrayOpacity = 0.3f; - preset.renderDistance = 128.0f; - return renderer.texts->add(std::make_unique( - util::str2wstr_utf8(player.getName()), preset, player.getPosition() - )); -} - Decorator::Decorator( - LevelController& controller, WorldRenderer& renderer, const Assets& assets + Engine& engine, LevelController& controller, WorldRenderer& renderer, const Assets& assets ) - : level(*controller.getLevel()), + : engine(engine), + level(*controller.getLevel()), renderer(renderer), assets(assets), player(*controller.getPlayer()) { @@ -54,8 +46,15 @@ Decorator::Decorator( if (id == controller.getPlayer()->getId()) { continue; } - playerTexts[id] = create_player_name_note(renderer, *player); + playerTexts[id] = renderer.texts->add(std::make_unique( + util::str2wstr_utf8(player->getName()), + playerNamePreset, + player->getPosition() + )); } + playerNamePreset.deserialize(engine.getResPaths()->readCombinedObject( + fs::u8path("presets/text3d/player_name.toml") + )); } void Decorator::addParticles(const Block& def, const glm::ivec3& pos) { @@ -141,7 +140,11 @@ void Decorator::update(float delta, const Camera& camera) { playerTexts.find(id) != playerTexts.end()) { continue; } - playerTexts[id] = create_player_name_note(renderer, *player); + playerTexts[id] = renderer.texts->add(std::make_unique( + util::str2wstr_utf8(player->getName()), + playerNamePreset, + player->getPosition() + )); } auto textsIter = playerTexts.begin(); diff --git a/src/graphics/render/Decorator.hpp b/src/graphics/render/Decorator.hpp index bb4202f7..fbc196aa 100644 --- a/src/graphics/render/Decorator.hpp +++ b/src/graphics/render/Decorator.hpp @@ -7,6 +7,7 @@ #include #include "typedefs.hpp" +#include "presets/NotePreset.hpp" class Level; class Chunks; @@ -14,10 +15,12 @@ class Camera; class Assets; class Player; struct Block; +class Engine; class LevelController; class WorldRenderer; class Decorator { + Engine& engine; const Level& level; const Assets& assets; Player& player; @@ -25,6 +28,7 @@ class Decorator { std::unordered_map blockEmitters; std::unordered_map playerTexts; int currentIndex = 0; + NotePreset playerNamePreset {}; void update( float delta, const glm::ivec3& areaStart, const glm::ivec3& areaCenter @@ -32,7 +36,10 @@ class Decorator { void addParticles(const Block& def, const glm::ivec3& pos); public: Decorator( - LevelController& level, WorldRenderer& renderer, const Assets& assets + Engine& engine, + LevelController& level, + WorldRenderer& renderer, + const Assets& assets ); void update(float delta, const Camera& camera);