91 lines
2.1 KiB
C++
91 lines
2.1 KiB
C++
#include "Menu.h"
|
|
#include "FrameBuffer.h"
|
|
#include "Helper.h"
|
|
#include "JsonParser.h"
|
|
#include "Screen.h"
|
|
#include "ShaderProgram.h"
|
|
#include "Widget.h"
|
|
#include "Window.h"
|
|
#include "definitions/eventActions.h"
|
|
|
|
#include <iostream>
|
|
|
|
Menu::Menu(FrameBuffer *p_framebuffer, ShaderProgram *p_shaderProgram)
|
|
: m_frameBuffer(p_framebuffer), m_shaderProgram(p_shaderProgram)
|
|
{
|
|
JsonParser screenParser("data/screens.json");
|
|
m_screens = screenParser.getScreens(m_shaderProgram, m_frameBuffer);
|
|
}
|
|
|
|
Menu::~Menu()
|
|
{
|
|
// Iterate over screens delete all items
|
|
for (auto it = m_screens.begin(); it != m_screens.end(); it++) {
|
|
delete (*it);
|
|
}
|
|
}
|
|
|
|
Screen *Menu::getScreenByName(const std::string &name) const
|
|
{
|
|
if (m_screenNameCache.find(name) != m_screenNameCache.end())
|
|
return m_screenNameCache[name];
|
|
|
|
for (auto it : m_screens) {
|
|
if (it->getUniqueName() == name) {
|
|
m_screenNameCache[name] = it;
|
|
return it;
|
|
}
|
|
}
|
|
|
|
return nullptr;
|
|
}
|
|
|
|
Screen *Menu::getActiveScreen() const
|
|
{
|
|
return m_activeScreen;
|
|
}
|
|
|
|
void Menu::showScreenByName(const std::string &name)
|
|
{
|
|
Screen *screen = getScreenByName(name);
|
|
|
|
if (!screen)
|
|
return;
|
|
|
|
screen->draw();
|
|
m_activeScreen = screen;
|
|
}
|
|
|
|
void Menu::resetActiveScreen()
|
|
{
|
|
m_activeScreen = nullptr;
|
|
}
|
|
|
|
void Menu::handleMouseButtonActionMap(const MouseButtonActionMap &mouseButtonActionMap, Window *window)
|
|
{
|
|
if (mouseButtonActionMap.at(MouseButtonAction::LeftClicked)) {
|
|
auto widgets = m_activeScreen->getWidgets();
|
|
for (auto it = widgets.begin(); it != widgets.end(); it++) {
|
|
if ((*it)->isHovered(window)) {
|
|
// std::cout << (*it)->getUniqueName() << " clicked!" << std::endl;
|
|
if ((*it)->getCallbackId() == 1)
|
|
resetActiveScreen();
|
|
if ((*it)->getCallbackId() == 2)
|
|
m_shouldExit = true;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
void Menu::writeWindowActions(WindowActionMap &windowActionMap)
|
|
{
|
|
if (m_shouldExit)
|
|
windowActionMap[WindowAction::WindowShouldClose] = true;
|
|
}
|
|
|
|
void Menu::onPlayPressed()
|
|
{}
|
|
|
|
void Menu::onExitPressed()
|
|
{}
|