dark overlay is an ui element now

This commit is contained in:
MihailRis 2024-01-26 15:50:50 +03:00
parent 51ffb93230
commit c6a2fc90a8
8 changed files with 25 additions and 24 deletions

View File

@ -135,6 +135,10 @@ bool GUI::isFocusCaught() const {
return focus && focus->isfocuskeeper();
}
void GUI::addBack(std::shared_ptr<UINode> panel) {
container->addBack(panel);
}
void GUI::add(shared_ptr<UINode> panel) {
container->add(panel);
}

View File

@ -71,6 +71,7 @@ namespace gui {
void act(float delta);
void draw(Batch2D* batch, Assets* assets);
void addBack(std::shared_ptr<UINode> panel);
void add(std::shared_ptr<UINode> panel);
void remove(std::shared_ptr<UINode> panel);
void store(std::string name, std::shared_ptr<UINode> node);

View File

@ -22,7 +22,9 @@ shared_ptr<UINode> Container::getAt(vec2 pos, shared_ptr<UINode> self) {
return nullptr;
}
if (!isInside(pos)) return nullptr;
for (auto node : nodes) {
for (int i = nodes.size()-1; i >= 0; i--) {
auto& node = nodes[i];
if (!node->visible())
continue;
auto hover = node->getAt(pos, node);
@ -91,6 +93,12 @@ void Container::draw(Batch2D* batch, Assets* assets) {
Window::popScissor();
}
void Container::addBack(shared_ptr<UINode> node) {
nodes.insert(nodes.begin(), node);
node->setParent(this);
refresh();
}
void Container::add(shared_ptr<UINode> node) {
nodes.push_back(node);
node->setParent(this);

View File

@ -37,6 +37,7 @@ namespace gui {
virtual void drawBackground(Batch2D* batch, Assets* assets) {};
virtual void draw(Batch2D* batch, Assets* assets) override;
virtual std::shared_ptr<UINode> getAt(glm::vec2 pos, std::shared_ptr<UINode> self) override;
virtual void addBack(std::shared_ptr<UINode> node);
virtual void add(std::shared_ptr<UINode> node);
virtual void add(UINode* node);
virtual void add(std::shared_ptr<UINode> node, glm::vec2 coord);

View File

@ -279,6 +279,9 @@ HudRenderer::HudRenderer(Engine* engine, LevelFrontend* frontend)
hotbarView = createHotbar();
inventoryView = createInventory();
darkOverlay = std::make_unique<Panel>(glm::vec2(4000.0f));
darkOverlay->color(glm::vec4(0, 0, 0, 0.5f));
uicamera = new Camera(vec3(), 1);
uicamera->perspective = false;
uicamera->flipped = true;
@ -286,9 +289,10 @@ HudRenderer::HudRenderer(Engine* engine, LevelFrontend* frontend)
createDebugPanel(engine);
menu->reset();
gui->addBack(darkOverlay);
gui->addBack(hotbarView);
gui->add(debugPanel);
gui->add(contentAccessPanel);
gui->add(hotbarView);
gui->add(inventoryView);
gui->add(grabbedItemView);
}
@ -297,6 +301,7 @@ HudRenderer::~HudRenderer() {
gui->remove(grabbedItemView);
gui->remove(inventoryView);
gui->remove(hotbarView);
gui->remove(darkOverlay);
gui->remove(contentAccessPanel);
gui->remove(debugPanel);
delete uicamera;
@ -368,6 +373,8 @@ void HudRenderer::update(bool visible) {
}
player->setChosenSlot(slot);
}
darkOverlay->visible(pause);
}
void HudRenderer::closeInventory() {
@ -376,26 +383,6 @@ void HudRenderer::closeInventory() {
grabbed.clear();
}
void HudRenderer::drawOverlay(const GfxContext& ctx) {
if (pause) {
Shader* uishader = assets->getShader("ui");
uishader->use();
uishader->uniformMatrix("u_projview", uicamera->getProjView());
const Viewport& viewport = ctx.getViewport();
const uint width = viewport.getWidth();
const uint height = viewport.getHeight();
auto batch = ctx.getBatch2D();
batch->begin();
// draw fullscreen dark overlay
batch->texture(nullptr);
batch->color = vec4(0.0f, 0.0f, 0.0f, 0.5f);
batch->rect(0, 0, width, height);
batch->render();
}
}
void HudRenderer::draw(const GfxContext& ctx){
auto level = frontend->getLevel();

View File

@ -42,6 +42,7 @@ class HudRenderer {
std::shared_ptr<InventoryView> hotbarView;
std::shared_ptr<InventoryView> inventoryView;
std::shared_ptr<gui::UINode> debugPanel;
std::shared_ptr<gui::Panel> darkOverlay;
std::unique_ptr<InventoryInteraction> interaction;
std::shared_ptr<SlotView> grabbedItemView;
gui::GUI* gui;
@ -57,7 +58,6 @@ public:
~HudRenderer();
void update(bool hudVisible);
void drawOverlay(const GfxContext& context);
void draw(const GfxContext& context);
void drawDebug(int fps);

View File

@ -474,6 +474,7 @@ void create_pause_panel(Engine* engine, PagesControl* menu) {
panel->add(create_button(L"Continue", vec4(10.0f), vec4(1), [=](GUI*){
menu->reset();
}));
panel->add(guiutil::gotoButton(L"Content", "content", menu));
panel->add(guiutil::gotoButton(L"Settings", "settings", menu));
panel->add(create_button(L"Save and Quit to Menu", vec4(10.f), vec4(1), [=](GUI*){

View File

@ -154,7 +154,6 @@ void LevelScreen::draw(float delta) {
worldRenderer->draw(ctx, camera.get(), hudVisible);
hud->drawOverlay(ctx);
if (hudVisible) {
hud->draw(ctx);
if (level->player->debug) {