#include "editor.h" #include "widgets/button.h" #include "widgets/group.h" #include "widgets/menubar.h" #include "widgets/window.h" #include "widgets/bpmcalculatorwidget.h" #include "tools/bpmcalculator.h" #include Editor::Editor(sf::RenderWindow& game_window, Callbacks&& callbacks, std::unique_ptr&& music, const FontHolder& font_holder) : _font(font_holder.get(Fonts::Id::GUI)), _game_window(game_window), _callbacks(std::move(callbacks)), _music(std::move(music)) {} void Editor::input(const sf::Event& event) { _group->input(event); } void Editor::update(const sf::Time& dt) { _group->update(dt); } void Editor::draw() const { _game_window.draw(*_group); } void Editor::enter() { auto& group = _group; auto& music = _music; _music->openFromFile("Uta-test.flac"); _music->setVolume(5); _bpm_calculator = std::make_shared(_music); std::shared_ptr bpm_widget = std::make_shared(_bpm_calculator, _font); bpm_widget->init(); const auto bpm_widget_callback = [&group, bpm_widget=bpm_widget, &music]() { music->stop(); bpm_widget->setVisibility(false); group->unblock(); }; const float window_width = _game_window.getSize().x; auto menu_bar = std::make_shared(_font); auto bpm_button = std::make_shared("Calculate BPM", _font); bpm_button->setCallback([&group, bpm_widget=bpm_widget]() { group->blockBy(bpm_widget); bpm_widget->setVisibility(true); }); bpm_widget->setRect(sf::FloatRect(_game_window.getSize().x / 3, _game_window.getSize().y / 3, _game_window.getSize().x / 3, _game_window.getSize().y / 3)); bpm_widget->addBarButton("X", bpm_widget_callback); bpm_widget->setVisibility(false); auto test_menu_2 = std::make_shared(); test_menu_2->setRect(sf::FloatRect{0, 0, 200, 27 * 5}); auto test_menu_3 = std::make_shared(); test_menu_3->setRect(sf::FloatRect{0, 0, 200, 27 * 5}); auto test_cascade_button = std::make_shared("Show submenu", _font); auto test_cascade_button_2 = std::make_shared("Show submenu 2", _font); auto quit_button = std::make_shared("Quit", _font); quit_button->setCallback(_callbacks.onLeaveEditorState); auto test_menu = std::make_shared(); test_menu->setRect(sf::FloatRect{0, 0, 200, 27 * 3}); menu_bar->setRect(sf::FloatRect(0, 0, window_width, 27)); menu_bar->addRootSubMenu("test", test_menu); menu_bar->addDependentSubmenu(test_menu_2); menu_bar->addDependentSubmenu(test_menu_3); test_cascade_button->setSubmenu(test_menu_2); test_menu->addPushButton(bpm_button); test_menu->addCascadeButton(test_cascade_button); test_menu->addPushButton(quit_button); test_cascade_button->resetRect(); test_cascade_button_2->setSubmenu(test_menu_3); test_menu_2->addCascadeButton(test_cascade_button_2); test_cascade_button_2->resetRect(); menu_bar->setVisibility(true); _group = std::make_shared(); _group->addChild(menu_bar); _group->addChild(bpm_widget); } void Editor::leave() { _group.reset(); _bpm_calculator.reset(); }