#include #include "Runner.hpp" #include #include #include "Component/Health/HealthComponent.hpp" #include "Component/Timer/TimerComponent.hpp" #include "Component/Tag/TagComponent.hpp" #include #include "Component/Music/MusicComponent.hpp" #include "Component/Sound/SoundComponent.hpp" #include "Component/Controllable/ControllableComponent.hpp" #include "Component/Position/PositionComponent.hpp" #include "Component/Renderer/Drawable2DComponent.hpp" #include "Component/Button/ButtonComponent.hpp" #include "Drawables/2D/Text.hpp" #include namespace RAY2D = RAY::Drawables::Drawables2D; namespace BBM { std::shared_ptr Runner::loadPauseMenuScene() { static const std::map sounds = { {SoundComponent::BOMB, "assets/sounds/click.ogg"} }; auto scene = std::make_shared(); addMenuControl(*scene, sounds); scene->addEntity("Control entity") .addComponent("assets/musics/music_player_select.ogg") .addComponent(sounds); scene->addEntity("background") .addComponent() .addComponent("assets/backgrounds/pause.png"); scene->addEntity("white background") .addComponent(1920 / 2.5 - 20, 180, 0) .addComponent(Vector2f(), Vector2f(450, 110), RAY::Color(BLACK).setA(150)); scene->addEntity("pause text") .addComponent(1920 / 2.5, 180, 0) .addComponent("PAUSE", 120, RAY::Vector2(), ORANGE); auto &play = scene->addEntity("play button") .addComponent(1920 / 6.5, 1080 - 360, 0) .addComponent("assets/buttons/button_back.png") .addComponent([](WAL::Entity &entity, WAL::Wal &) { auto *texture = dynamic_cast(entity.getComponent().drawable.get()); texture->use("assets/buttons/button_back.png"); }) .addComponent([](WAL::Entity &entity, WAL::Wal &) { auto *texture = dynamic_cast(entity.getComponent().drawable.get()); texture->use("assets/buttons/button_back_hovered.png"); }) .addComponent([](WAL::Entity &, WAL::Wal &) { auto &gameScene = gameState.loadedScenes[BBM::GameState::SceneID::GameScene]; for (WAL::Entity &entity : gameScene->view>()) entity.scheduleDeletion(); for (auto &[entity, controller, _] : gameScene->view()) { controller.disable(); } for (auto &[_, timer] : gameScene->view()) timer.disabled = true; gameScene->scheduleNewEntity("Restart timer") .addComponent(std::chrono::seconds(3), [gameScene](WAL::Entity &entity, WAL::Wal &) { for (auto &view : gameScene->view()) { if (view.get().getHealthPoint() > 0) view.get().disabled = false; } for (auto &view : gameScene->view()) view.get().disabled = false; entity.scheduleDeletion(); }) .addComponent(1920 / 2 - 2 * 30, 1080 / 2, 0) .addComponent>() .addComponent>() .addComponent("", 60, RAY::Vector2(), ORANGE); gameState.nextScene = BBM::GameState::SceneID::GameScene; }); auto &save = scene->addEntity("save & quit button") .addComponent(1920 / 2.5, 1080 - 240, 0) .addComponent("assets/buttons/button_save.png") .addComponent([](WAL::Entity &entity, WAL::Wal &) { auto *texture = dynamic_cast(entity.getComponent().drawable.get()); texture->use("assets/buttons/button_save.png"); }) .addComponent([](WAL::Entity &entity, WAL::Wal &) { auto *texture = dynamic_cast(entity.getComponent().drawable.get()); texture->use("assets/buttons/button_save_hovered.png"); }) .addComponent([](WAL::Entity &, WAL::Wal &wal) { if (!std::filesystem::exists("save")) std::filesystem::create_directories("save"); ParserYAML::save(Runner::gameState.loadedScenes[GameState::SceneID::GameScene]); wal.getSystem().hasEnded = false; gameState.nextScene = BBM::GameState::SceneID::MainMenuScene; }); auto &settings = scene->addEntity("settings button") .addComponent(1920 / 2.5, 1080 - 360, 0) .addComponent("assets/buttons/button_settings.png") .addComponent([](WAL::Entity &entity, WAL::Wal &) { auto *texture = dynamic_cast(entity.getComponent().drawable.get()); texture->use("assets/buttons/button_settings.png"); }) .addComponent([](WAL::Entity &entity, WAL::Wal &) { auto *texture = dynamic_cast(entity.getComponent().drawable.get()); texture->use("assets/buttons/button_settings_hovered.png"); }) .addComponent([](WAL::Entity &, WAL::Wal &) { gameState.nextScene = BBM::GameState::SceneID::SettingsScene; }); auto &exit = scene->addEntity("exit button") .addComponent(1920 / 1.55, 1080 - 360, 0) .addComponent("assets/buttons/button_exit.png") .addComponent([](WAL::Entity &entity, WAL::Wal &) { auto *texture = dynamic_cast(entity.getComponent().drawable.get()); texture->use("assets/buttons/button_exit.png"); }) .addComponent([](WAL::Entity &entity, WAL::Wal &) { auto *texture = dynamic_cast(entity.getComponent().drawable.get()); texture->use("assets/buttons/button_exit_hovered.png"); }) .addComponent([](WAL::Entity &, WAL::Wal &wal) { wal.getSystem().hasEnded = false; gameState.nextScene = BBM::GameState::SceneID::MainMenuScene; }); save.getComponent().setButtonLinks(&settings); play.getComponent().setButtonLinks(nullptr, &save, nullptr, &settings); settings.getComponent().setButtonLinks(nullptr, &save, &play, &exit); exit.getComponent().setButtonLinks(nullptr, &save, &settings, nullptr); return scene; } }