|
|
|
#include "application/mainmenu.h"
|
|
|
|
#include "widgets/group.h"
|
|
|
|
#include "widgets/pushbutton.h"
|
|
|
|
|
|
|
|
MainMenu::MainMenu(const std::shared_ptr<kku::CoreFactory> &factory,
|
|
|
|
MainMenu::Callbacks &&callbacks)
|
|
|
|
: _callbacks(std::move(callbacks)), _core_factory(factory),
|
|
|
|
_buttons(std::make_shared<Group>())
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
|
|
|
void MainMenu::input(const kku::SystemEvent &event)
|
|
|
|
{
|
|
|
|
_buttons->input(event);
|
|
|
|
}
|
|
|
|
|
|
|
|
void MainMenu::update(const kku::microsec &dt)
|
|
|
|
{
|
|
|
|
_buttons->update(dt);
|
|
|
|
}
|
|
|
|
|
|
|
|
void MainMenu::display() const
|
|
|
|
{
|
|
|
|
_buttons->display();
|
|
|
|
}
|
|
|
|
|
|
|
|
void MainMenu::enter()
|
|
|
|
{
|
|
|
|
const auto render_size = _core_factory->getRenderSize();
|
|
|
|
const float window_width = render_size.first;
|
|
|
|
const float window_height = render_size.second;
|
|
|
|
|
|
|
|
auto button_start =
|
|
|
|
std::make_shared<PushButton>("Start", _core_factory, 48);
|
|
|
|
button_start->setRect(
|
|
|
|
kku::Area<float>{window_width / 3.f, window_height / 7.f,
|
|
|
|
window_width / 3.f, window_height / 7.f});
|
|
|
|
button_start->setCallback(_callbacks.onAppendGameState);
|
|
|
|
|
|
|
|
auto button_editor =
|
|
|
|
std::make_shared<PushButton>("Editor", _core_factory, 48);
|
|
|
|
button_editor->setRect(
|
|
|
|
kku::Area<float>{window_width / 3.f, window_height / 7.f * 3,
|
|
|
|
window_width / 3.f, window_height / 7.f});
|
|
|
|
button_editor->setCallback(_callbacks.onAppendEditorState);
|
|
|
|
|
|
|
|
auto button_about =
|
|
|
|
std::make_shared<PushButton>("About", _core_factory, 48);
|
|
|
|
button_about->setRect(
|
|
|
|
kku::Area<float>{window_width / 3.f, window_height / 7.f * 5,
|
|
|
|
window_width / 3.f, window_height / 7.f});
|
|
|
|
button_about->setCallback(_callbacks.onAppendAboutState);
|
|
|
|
|
|
|
|
_buttons->addChild(button_start);
|
|
|
|
_buttons->addChild(button_editor);
|
|
|
|
_buttons->addChild(button_about);
|
|
|
|
|
|
|
|
_buttons->setVisibility();
|
|
|
|
}
|
|
|
|
|
|
|
|
void MainMenu::leave()
|
|
|
|
{
|
|
|
|
_buttons->setVisibility(false);
|
|
|
|
}
|