From 866f6e99517904c97da6655b1723b14ba2ba7c2d Mon Sep 17 00:00:00 2001 From: MihailRis Date: Tue, 12 Nov 2024 22:53:45 +0300 Subject: [PATCH] add NotePreset --- src/graphics/render/WorldRenderer.cpp | 8 ++++-- src/presets/NotePreset.cpp | 40 +++++++++++++++++++++++++++ src/presets/NotePreset.hpp | 23 +++++++++++++++ 3 files changed, 68 insertions(+), 3 deletions(-) create mode 100644 src/presets/NotePreset.cpp create mode 100644 src/presets/NotePreset.hpp diff --git a/src/graphics/render/WorldRenderer.cpp b/src/graphics/render/WorldRenderer.cpp index 41e368a6..54f2d447 100644 --- a/src/graphics/render/WorldRenderer.cpp +++ b/src/graphics/render/WorldRenderer.cpp @@ -426,12 +426,14 @@ void WorldRenderer::renderTexts( zvec.z *= -1; zvec = glm::normalize(zvec); + float ppbx = 100; + float ppby = 100; font.draw( *batch3d, string, - pos - zvec * (font.calcWidth(string, string.length()) * 0.5f), - zvec, - camera.up + pos - zvec * (font.calcWidth(string, string.length()) * 0.5f) / ppbx, + zvec / ppbx, + camera.up / ppby ); batch3d->flush(); } diff --git a/src/presets/NotePreset.cpp b/src/presets/NotePreset.cpp new file mode 100644 index 00000000..e8601ab7 --- /dev/null +++ b/src/presets/NotePreset.cpp @@ -0,0 +1,40 @@ +#include "NotePreset.hpp" + +#include +#include + +std::string to_string(NoteDisplayMode mode) { + static std::vector names = { + "static_billboard", + "y_free_billboard", + "xy_free_billboard", + "projected" + }; + return names.at(static_cast(mode)); +} + +std::optional NoteDisplayMode_from(std::string_view s) { + static std::map> map { + {"static_billboard", NoteDisplayMode::STATIC_BILLBOARD}, + {"y_free_billboard", NoteDisplayMode::Y_FREE_BILLBOARD}, + {"xy_free_billboard", NoteDisplayMode::XY_FREE_BILLBOARD}, + {"projected", NoteDisplayMode::PROJECTED} + }; + const auto& found = map.find(s); + if (found == map.end()) { + return std::nullopt; + } + return found->second; +} + +dv::value NotePreset::serialize() const { + return dv::object({ + {"display", to_string(displayMode)} + }); +} + +void NotePreset::deserialize(const dv::value& src) { + if (src.has("display")) { + displayMode = NoteDisplayMode_from(src["display"].asString()).value(); + } +} diff --git a/src/presets/NotePreset.hpp b/src/presets/NotePreset.hpp new file mode 100644 index 00000000..cf8aa15f --- /dev/null +++ b/src/presets/NotePreset.hpp @@ -0,0 +1,23 @@ +#pragma once + +#include +#include + +#include "interfaces/Serializable.hpp" + +enum class NoteDisplayMode { + STATIC_BILLBOARD, + Y_FREE_BILLBOARD, + XY_FREE_BILLBOARD, + PROJECTED +}; + +std::string to_string(NoteDisplayMode mode); +std::optional NoteDisplayMode_from(std::string_view s); + +struct NotePreset : public Serializable { + NoteDisplayMode displayMode = NoteDisplayMode::STATIC_BILLBOARD; + + dv::value serialize() const override; + void deserialize(const dv::value& src) override; +};