add NotePreset

This commit is contained in:
MihailRis 2024-11-12 22:53:45 +03:00
parent aadb04c41e
commit 866f6e9951
3 changed files with 68 additions and 3 deletions

View File

@ -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();
}

View File

@ -0,0 +1,40 @@
#include "NotePreset.hpp"
#include <map>
#include <vector>
std::string to_string(NoteDisplayMode mode) {
static std::vector<std::string> names = {
"static_billboard",
"y_free_billboard",
"xy_free_billboard",
"projected"
};
return names.at(static_cast<int>(mode));
}
std::optional<NoteDisplayMode> NoteDisplayMode_from(std::string_view s) {
static std::map<std::string_view, NoteDisplayMode, std::less<>> 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();
}
}

View File

@ -0,0 +1,23 @@
#pragma once
#include <glm/vec3.hpp>
#include <optional>
#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> 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;
};