dark overlay is an ui element now
This commit is contained in:
@@ -135,6 +135,10 @@ bool GUI::isFocusCaught() const {
|
|||||||
return focus && focus->isfocuskeeper();
|
return focus && focus->isfocuskeeper();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void GUI::addBack(std::shared_ptr<UINode> panel) {
|
||||||
|
container->addBack(panel);
|
||||||
|
}
|
||||||
|
|
||||||
void GUI::add(shared_ptr<UINode> panel) {
|
void GUI::add(shared_ptr<UINode> panel) {
|
||||||
container->add(panel);
|
container->add(panel);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -71,6 +71,7 @@ namespace gui {
|
|||||||
|
|
||||||
void act(float delta);
|
void act(float delta);
|
||||||
void draw(Batch2D* batch, Assets* assets);
|
void draw(Batch2D* batch, Assets* assets);
|
||||||
|
void addBack(std::shared_ptr<UINode> panel);
|
||||||
void add(std::shared_ptr<UINode> panel);
|
void add(std::shared_ptr<UINode> panel);
|
||||||
void remove(std::shared_ptr<UINode> panel);
|
void remove(std::shared_ptr<UINode> panel);
|
||||||
void store(std::string name, std::shared_ptr<UINode> node);
|
void store(std::string name, std::shared_ptr<UINode> node);
|
||||||
|
|||||||
@@ -22,7 +22,9 @@ shared_ptr<UINode> Container::getAt(vec2 pos, shared_ptr<UINode> self) {
|
|||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
if (!isInside(pos)) 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())
|
if (!node->visible())
|
||||||
continue;
|
continue;
|
||||||
auto hover = node->getAt(pos, node);
|
auto hover = node->getAt(pos, node);
|
||||||
@@ -91,6 +93,12 @@ void Container::draw(Batch2D* batch, Assets* assets) {
|
|||||||
Window::popScissor();
|
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) {
|
void Container::add(shared_ptr<UINode> node) {
|
||||||
nodes.push_back(node);
|
nodes.push_back(node);
|
||||||
node->setParent(this);
|
node->setParent(this);
|
||||||
|
|||||||
@@ -37,6 +37,7 @@ namespace gui {
|
|||||||
virtual void drawBackground(Batch2D* batch, Assets* assets) {};
|
virtual void drawBackground(Batch2D* batch, Assets* assets) {};
|
||||||
virtual void draw(Batch2D* batch, Assets* assets) override;
|
virtual void draw(Batch2D* batch, Assets* assets) override;
|
||||||
virtual std::shared_ptr<UINode> getAt(glm::vec2 pos, std::shared_ptr<UINode> self) 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(std::shared_ptr<UINode> node);
|
||||||
virtual void add(UINode* node);
|
virtual void add(UINode* node);
|
||||||
virtual void add(std::shared_ptr<UINode> node, glm::vec2 coord);
|
virtual void add(std::shared_ptr<UINode> node, glm::vec2 coord);
|
||||||
|
|||||||
+8
-21
@@ -279,6 +279,9 @@ HudRenderer::HudRenderer(Engine* engine, LevelFrontend* frontend)
|
|||||||
hotbarView = createHotbar();
|
hotbarView = createHotbar();
|
||||||
inventoryView = createInventory();
|
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 = new Camera(vec3(), 1);
|
||||||
uicamera->perspective = false;
|
uicamera->perspective = false;
|
||||||
uicamera->flipped = true;
|
uicamera->flipped = true;
|
||||||
@@ -286,9 +289,10 @@ HudRenderer::HudRenderer(Engine* engine, LevelFrontend* frontend)
|
|||||||
createDebugPanel(engine);
|
createDebugPanel(engine);
|
||||||
menu->reset();
|
menu->reset();
|
||||||
|
|
||||||
|
gui->addBack(darkOverlay);
|
||||||
|
gui->addBack(hotbarView);
|
||||||
gui->add(debugPanel);
|
gui->add(debugPanel);
|
||||||
gui->add(contentAccessPanel);
|
gui->add(contentAccessPanel);
|
||||||
gui->add(hotbarView);
|
|
||||||
gui->add(inventoryView);
|
gui->add(inventoryView);
|
||||||
gui->add(grabbedItemView);
|
gui->add(grabbedItemView);
|
||||||
}
|
}
|
||||||
@@ -297,6 +301,7 @@ HudRenderer::~HudRenderer() {
|
|||||||
gui->remove(grabbedItemView);
|
gui->remove(grabbedItemView);
|
||||||
gui->remove(inventoryView);
|
gui->remove(inventoryView);
|
||||||
gui->remove(hotbarView);
|
gui->remove(hotbarView);
|
||||||
|
gui->remove(darkOverlay);
|
||||||
gui->remove(contentAccessPanel);
|
gui->remove(contentAccessPanel);
|
||||||
gui->remove(debugPanel);
|
gui->remove(debugPanel);
|
||||||
delete uicamera;
|
delete uicamera;
|
||||||
@@ -368,6 +373,8 @@ void HudRenderer::update(bool visible) {
|
|||||||
}
|
}
|
||||||
player->setChosenSlot(slot);
|
player->setChosenSlot(slot);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
darkOverlay->visible(pause);
|
||||||
}
|
}
|
||||||
|
|
||||||
void HudRenderer::closeInventory() {
|
void HudRenderer::closeInventory() {
|
||||||
@@ -376,26 +383,6 @@ void HudRenderer::closeInventory() {
|
|||||||
grabbed.clear();
|
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){
|
void HudRenderer::draw(const GfxContext& ctx){
|
||||||
auto level = frontend->getLevel();
|
auto level = frontend->getLevel();
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -42,6 +42,7 @@ class HudRenderer {
|
|||||||
std::shared_ptr<InventoryView> hotbarView;
|
std::shared_ptr<InventoryView> hotbarView;
|
||||||
std::shared_ptr<InventoryView> inventoryView;
|
std::shared_ptr<InventoryView> inventoryView;
|
||||||
std::shared_ptr<gui::UINode> debugPanel;
|
std::shared_ptr<gui::UINode> debugPanel;
|
||||||
|
std::shared_ptr<gui::Panel> darkOverlay;
|
||||||
std::unique_ptr<InventoryInteraction> interaction;
|
std::unique_ptr<InventoryInteraction> interaction;
|
||||||
std::shared_ptr<SlotView> grabbedItemView;
|
std::shared_ptr<SlotView> grabbedItemView;
|
||||||
gui::GUI* gui;
|
gui::GUI* gui;
|
||||||
@@ -57,7 +58,6 @@ public:
|
|||||||
~HudRenderer();
|
~HudRenderer();
|
||||||
|
|
||||||
void update(bool hudVisible);
|
void update(bool hudVisible);
|
||||||
void drawOverlay(const GfxContext& context);
|
|
||||||
void draw(const GfxContext& context);
|
void draw(const GfxContext& context);
|
||||||
void drawDebug(int fps);
|
void drawDebug(int fps);
|
||||||
|
|
||||||
|
|||||||
@@ -474,6 +474,7 @@ void create_pause_panel(Engine* engine, PagesControl* menu) {
|
|||||||
panel->add(create_button(L"Continue", vec4(10.0f), vec4(1), [=](GUI*){
|
panel->add(create_button(L"Continue", vec4(10.0f), vec4(1), [=](GUI*){
|
||||||
menu->reset();
|
menu->reset();
|
||||||
}));
|
}));
|
||||||
|
panel->add(guiutil::gotoButton(L"Content", "content", menu));
|
||||||
panel->add(guiutil::gotoButton(L"Settings", "settings", 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*){
|
panel->add(create_button(L"Save and Quit to Menu", vec4(10.f), vec4(1), [=](GUI*){
|
||||||
|
|||||||
@@ -154,7 +154,6 @@ void LevelScreen::draw(float delta) {
|
|||||||
|
|
||||||
worldRenderer->draw(ctx, camera.get(), hudVisible);
|
worldRenderer->draw(ctx, camera.get(), hudVisible);
|
||||||
|
|
||||||
hud->drawOverlay(ctx);
|
|
||||||
if (hudVisible) {
|
if (hudVisible) {
|
||||||
hud->draw(ctx);
|
hud->draw(ctx);
|
||||||
if (level->player->debug) {
|
if (level->player->debug) {
|
||||||
|
|||||||
Reference in New Issue
Block a user