hud refactor (part III)

This commit is contained in:
MihailRis 2024-01-07 23:30:07 +03:00
parent e493c67dfa
commit 4f6ba8cca6
7 changed files with 25 additions and 30 deletions

View File

@ -36,11 +36,9 @@ using glm::mat4;
using std::string;
using std::shared_ptr;
WorldRenderer::WorldRenderer(Engine* engine,
Level* level,
LevelFrontend* frontend)
WorldRenderer::WorldRenderer(Engine* engine, LevelFrontend* frontend)
: engine(engine),
level(level),
level(frontend->getLevel()),
frustumCulling(new Frustum()),
lineBatch(new LineBatch()),
renderer(new ChunksRenderer(level,

View File

@ -34,7 +34,7 @@ class WorldRenderer {
bool drawChunk(size_t index, Camera* camera, Shader* shader, bool culling);
void drawChunks(Chunks* chunks, Camera* camera, Shader* shader);
public:
WorldRenderer(Engine* engine, Level* level, LevelFrontend* frontend);
WorldRenderer(Engine* engine, LevelFrontend* frontend);
~WorldRenderer();
void draw(const GfxContext& context, Camera* camera);

View File

@ -55,6 +55,8 @@ inline std::shared_ptr<Label> create_label(gui::wstringsupplier supplier) {
}
void HudRenderer::createDebugPanel(Engine* engine) {
auto level = frontend->getLevel();
Panel* panel = new Panel(vec2(250, 200), vec4(5.0f), 1.0f);
debugPanel = std::shared_ptr<UINode>(panel);
panel->listenInterval(1.0f, [this]() {
@ -72,11 +74,11 @@ void HudRenderer::createDebugPanel(Engine* engine) {
bool culling = settings.graphics.frustumCulling;
return L"frustum-culling: "+std::wstring(culling ? L"on" : L"off");
}));
panel->add(create_label([this]() {
panel->add(create_label([=]() {
return L"chunks: "+std::to_wstring(level->chunks->chunksCount)+
L" visible: "+std::to_wstring(level->chunks->visible);
}));
panel->add(create_label([this](){
panel->add(create_label([=](){
auto player = level->player;
auto indices = level->content->indices;
auto def = indices->getBlockDef(player->selectedVoxel.id);
@ -88,7 +90,7 @@ void HudRenderer::createDebugPanel(Engine* engine) {
return L"block: "+std::to_wstring(player->selectedVoxel.id)+
L" "+stream.str();
}));
panel->add(create_label([this](){
panel->add(create_label([=](){
return L"seed: "+std::to_wstring(level->world->seed);
}));
@ -105,15 +107,15 @@ void HudRenderer::createDebugPanel(Engine* engine) {
// Coord input
TextBox* box = new TextBox(L"");
box->textSupplier([this, ax]() {
Hitbox* hitbox = this->level->player->hitbox;
box->textSupplier([=]() {
Hitbox* hitbox = level->player->hitbox;
return std::to_wstring(hitbox->position[ax]);
});
box->textConsumer([this, ax](std::wstring text) {
box->textConsumer([=](std::wstring text) {
try {
vec3 position = this->level->player->hitbox->position;
vec3 position = level->player->hitbox->position;
position[ax] = std::stoi(text);
this->level->player->teleport(position);
level->player->teleport(position);
} catch (std::invalid_argument& _){
}
});
@ -121,9 +123,9 @@ void HudRenderer::createDebugPanel(Engine* engine) {
sub->add(box);
panel->add(sub);
}
panel->add(create_label([this](){
panel->add(create_label([=](){
int hour, minute, second;
timeutil::from_value(this->level->world->daytime, hour, minute, second);
timeutil::from_value(level->world->daytime, hour, minute, second);
std::wstring timeString =
util::lfill(std::to_wstring(hour), 2, L'0') + L":" +
@ -171,14 +173,12 @@ void HudRenderer::createDebugPanel(Engine* engine) {
panel->refresh();
}
HudRenderer::HudRenderer(Engine* engine,
Level* level,
LevelFrontend* frontend)
: level(level),
assets(engine->getAssets()),
HudRenderer::HudRenderer(Engine* engine, LevelFrontend* frontend)
: assets(engine->getAssets()),
gui(engine->getGUI()),
frontend(frontend) {
auto level = frontend->getLevel();
auto menu = gui->getMenu();
auto content = level->content;
auto indices = content->indices;
@ -242,6 +242,7 @@ void HudRenderer::update() {
}
void HudRenderer::draw(const GfxContext& ctx){
auto level = frontend->getLevel();
const Content* content = level->content;
const ContentIndices* contentIds = content->indices;

View File

@ -24,7 +24,6 @@ namespace gui {
}
class HudRenderer {
Level* level;
Assets* assets;
Camera* uicamera;
@ -42,9 +41,7 @@ class HudRenderer {
void createDebugPanel(Engine* engine);
public:
HudRenderer(Engine* engine,
Level* level,
LevelFrontend* frontend);
HudRenderer(Engine* engine, LevelFrontend* frontend);
~HudRenderer();
void update();

View File

@ -48,13 +48,12 @@ MenuScreen::MenuScreen(Engine* engine_) : Screen(engine_) {
menu->reset();
menu->set("main");
uicamera = new Camera(glm::vec3(), Window::height);
uicamera.reset(new Camera(glm::vec3(), Window::height));
uicamera->perspective = false;
uicamera->flipped = true;
}
MenuScreen::~MenuScreen() {
delete uicamera;
}
void MenuScreen::update(float delta) {
@ -87,8 +86,8 @@ LevelScreen::LevelScreen(Engine* engine, Level* level)
: Screen(engine),
level(level),
frontend(std::make_unique<LevelFrontend>(level, engine->getAssets())),
hud(std::make_unique<HudRenderer>(engine, level, frontend.get())),
worldRenderer(std::make_unique<WorldRenderer>(engine, level, frontend.get())),
hud(std::make_unique<HudRenderer>(engine, frontend.get())),
worldRenderer(std::make_unique<WorldRenderer>(engine, frontend.get())),
controller(std::make_unique<LevelController>(engine->getSettings(), level)) {
auto& settings = engine->getSettings();

View File

@ -27,7 +27,7 @@ public:
};
class MenuScreen : public Screen {
Camera* uicamera;
std::unique_ptr<Camera> uicamera;
public:
MenuScreen(Engine* engine);
~MenuScreen();

View File

@ -67,7 +67,7 @@ enum class BlockModel {
class Block {
public:
std::string const name;
// 0 1 2 3 4 5
// 0 1 2 3 4 5
std::string textureFaces[6]; // -x,x, -y,y, -z,z
unsigned char emission[4] {0, 0, 0, 0};
unsigned char drawGroup = 0;