From 3a64a6ad1670150c1dd5c6f9fa6ffacdff0adb7e Mon Sep 17 00:00:00 2001 From: MihailRis Date: Fri, 17 Nov 2023 11:32:36 +0300 Subject: [PATCH] Main menu in development --- src/assets/AssetsLoader.cpp | 1 + src/frontend/screens.cpp | 30 +++++++++++++++++++++++++----- src/frontend/screens.h | 3 +++ 3 files changed, 29 insertions(+), 5 deletions(-) diff --git a/src/assets/AssetsLoader.cpp b/src/assets/AssetsLoader.cpp index eb40b6b8..4b004d97 100644 --- a/src/assets/AssetsLoader.cpp +++ b/src/assets/AssetsLoader.cpp @@ -108,6 +108,7 @@ void AssetsLoader::addDefaults(AssetsLoader& loader) { loader.add(ASSET_ATLAS, "res/block.png", "block"); loader.add(ASSET_TEXTURE, "res/block.png", "block_tex"); loader.add(ASSET_TEXTURE, "res/slot.png", "slot"); + loader.add(ASSET_TEXTURE, "res/menubg.png", "menubg"); loader.add(ASSET_FONT, "res/font", "normal"); } diff --git a/src/frontend/screens.cpp b/src/frontend/screens.cpp index 3d746415..5f373902 100644 --- a/src/frontend/screens.cpp +++ b/src/frontend/screens.cpp @@ -9,6 +9,7 @@ #include "../window/Events.h" #include "../window/input.h" #include "../graphics/Shader.h" +#include "../graphics/Batch2D.h" #include "../assets/Assets.h" #include "../world/Level.h" #include "../world/World.h" @@ -39,7 +40,7 @@ MenuScreen::MenuScreen(Engine* engine_) : Screen(engine_) { panel->setCoord(vec2(10, 10)); { - auto button = new Button(L"Continue", vec4(12.0f, 10.0f, 12.0f, 10.0f)); + auto button = new Button(L"New World", vec4(12.0f, 10.0f, 12.0f, 10.0f)); button->listenAction([this, panel](GUI*) { std::cout << "-- loading world" << std::endl; EngineSettings& settings = engine->getSettings(); @@ -51,8 +52,7 @@ MenuScreen::MenuScreen(Engine* engine_) : Screen(engine_) { }); panel->add(shared_ptr(button)); } - // ATTENTION: FUNCTIONALITY INCOMPLETE ZONE - /*Panel* worldsPanel = new Panel(vec2(390, 200), vec4(5.0f)); + Panel* worldsPanel = new Panel(vec2(390, 200), vec4(5.0f)); worldsPanel->color(vec4(0.1f)); for (auto const& entry : directory_iterator(enginefs::get_worlds_folder())) { std::string name = entry.path().filename(); @@ -61,11 +61,11 @@ MenuScreen::MenuScreen(Engine* engine_) : Screen(engine_) { button->listenAction([this, panel, name](GUI*) { EngineSettings& settings = engine->getSettings(); World* world = new World(name, enginefs::get_worlds_folder()/name, 42, settings); - engine->setScreen(new LevelScreen(engine, world->loadLevel(settings))); + engine->setScreen(shared_ptr(new LevelScreen(engine, world->load(settings)))); }); worldsPanel->add(shared_ptr(button)); } - panel->add(shared_ptr(worldsPanel));*/ + panel->add(shared_ptr(worldsPanel)); { Button* button = new Button(L"Quit", vec4(12.0f, 10.0f, 12.0f, 10.0f)); @@ -76,10 +76,17 @@ MenuScreen::MenuScreen(Engine* engine_) : Screen(engine_) { } this->panel = shared_ptr(panel); engine->getGUI()->add(this->panel); + + batch = new Batch2D(1024); + uicamera = new Camera(vec3(), Window::height); + uicamera->perspective = false; + uicamera->flipped = true; } MenuScreen::~MenuScreen() { engine->getGUI()->remove(panel); + delete batch; + delete uicamera; } void MenuScreen::update(float delta) { @@ -90,6 +97,19 @@ void MenuScreen::draw(float delta) { Window::clear(); Window::setBgColor(vec3(0.2f, 0.2f, 0.2f)); + + uicamera->fov = Window::height; + Shader* uishader = engine->getAssets()->getShader("ui"); + uishader->use(); + uishader->uniformMatrix("u_projview", uicamera->getProjView()); + + batch->begin(); + batch->texture(engine->getAssets()->getTexture("menubg")); + batch->rect(0, 0, + Window::width, Window::height, 0, 0, 0, + UVRegion(0, 0, Window::width/64, Window::height/64), + false, false, glm::vec4(1.0f)); + batch->render(); } LevelScreen::LevelScreen(Engine* engine, Level* level) diff --git a/src/frontend/screens.h b/src/frontend/screens.h index 081c1770..87a3dc9c 100644 --- a/src/frontend/screens.h +++ b/src/frontend/screens.h @@ -10,6 +10,7 @@ class WorldRenderer; class HudRenderer; class Engine; class Camera; +class Batch2D; namespace gui { class UINode; @@ -29,6 +30,8 @@ public: class MenuScreen : public Screen { std::shared_ptr panel; + Batch2D* batch; + Camera* uicamera; public: MenuScreen(Engine* engine); ~MenuScreen();