diff --git a/CMakeLists.txt b/CMakeLists.txt index 2d907b4..6a28abf 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -329,6 +329,10 @@ add_executable(ColorRace game/src/multiplayer/LudoGameClient.cpp game/src/multiplayer/LudoGameClient.h game/src/multiplayer/LudoNetworkEvents.h + game/src/multiplayer/lobby/LobbyScene.cpp + game/src/multiplayer/lobby/LobbyScene.h + game/src/multiplayer/lobby/LobbyUiLayer.cpp + game/src/multiplayer/lobby/LobbyUiLayer.h ) target_link_libraries(ColorRace PRIVATE diff --git a/engine/src/core/Application.cpp b/engine/src/core/Application.cpp index 318c43a..bd23062 100644 --- a/engine/src/core/Application.cpp +++ b/engine/src/core/Application.cpp @@ -22,6 +22,8 @@ namespace engine { using T = std::decay_t; if constexpr (std::is_same_v) { m_window->requestWindowClose(); + } else if constexpr (std::is_same_v) { + m_sceneManager.switchTo(e.nextScene, std::move(e.onSceneLoaded)); } }, event); }); diff --git a/engine/src/core/events/ApplicationEvents.h b/engine/src/core/events/ApplicationEvents.h index 4b24b95..0271901 100644 --- a/engine/src/core/events/ApplicationEvents.h +++ b/engine/src/core/events/ApplicationEvents.h @@ -6,8 +6,15 @@ #define COLORRACE_APPLICATIONEVENTS_H #include +#include "layer/Scene.h" + struct QuitRequested {}; +struct SceneSwitchRequested { + std::unique_ptr nextScene; + std::function onSceneLoaded; +}; + using ApplicationEvents = std::variant; #endif //COLORRACE_APPLICATIONEVENTS_H diff --git a/external/NetworkCore b/external/NetworkCore index 944f2f6..79214c8 160000 --- a/external/NetworkCore +++ b/external/NetworkCore @@ -1 +1 @@ -Subproject commit 944f2f63e06e1d368f85c11916046312b1d0067f +Subproject commit 79214c855ac1c414fe85ffe76af4e2e57b8305ec diff --git a/game/src/mainMenu/layer/MainMenuUiLayer.cpp b/game/src/mainMenu/layer/MainMenuUiLayer.cpp index c5b086e..1b0da62 100644 --- a/game/src/mainMenu/layer/MainMenuUiLayer.cpp +++ b/game/src/mainMenu/layer/MainMenuUiLayer.cpp @@ -6,6 +6,7 @@ #include "imgui.h" #include "GLFW/glfw3.h" +#include "multiplayer/lobby/LobbyScene.h" #include "spdlog/spdlog.h" void MainMenuUiLayer::onRender() { @@ -70,7 +71,8 @@ void MainMenuUiLayer::onAttachImpl() { if (e.success) { spdlog::info("Received positive Connection Result"); m_connectionError = false; - m_closeConnectPopup = true; + std::unique_ptr lobbyScene = std::make_unique(m_applicationEventBus, getInputStack(), getKeyboard(), getMouse()); + } else { spdlog::info("Received negative Connection Result"); m_connectionError = true; diff --git a/game/src/multiplayer/lobby/LobbyScene.cpp b/game/src/multiplayer/lobby/LobbyScene.cpp new file mode 100644 index 0000000..b85f15d --- /dev/null +++ b/game/src/multiplayer/lobby/LobbyScene.cpp @@ -0,0 +1,19 @@ +// +// Created by sebastian on 06.08.26. +// + +#include "LobbyScene.h" + +std::vector LobbyScene::getRequiredAssets() const { + std::vector requests; + requests.emplace_back(engine::TextureRequest("lobby_background", "assets/textures/multiplayer_lobby.png")); + return requests; +} + +void LobbyScene::onEnter() { + Scene::onEnter(); +} + +void LobbyScene::onExit() { + Scene::onExit(); +} diff --git a/game/src/multiplayer/lobby/LobbyScene.h b/game/src/multiplayer/lobby/LobbyScene.h new file mode 100644 index 0000000..5a842c4 --- /dev/null +++ b/game/src/multiplayer/lobby/LobbyScene.h @@ -0,0 +1,23 @@ +// +// Created by sebastian on 06.08.26. +// + +#ifndef COLORRACE_LOBBYSCENE_H +#define COLORRACE_LOBBYSCENE_H +#include "layer/Scene.h" + + +class LobbyScene : public engine::Scene { +public: + LobbyScene(const std::shared_ptr> &applicationEventbus, + engine::InputContextStack &inputStack, engine::Keyboard &keyboard, engine::Mouse &mouse) + : Scene(applicationEventbus, inputStack, keyboard, mouse) { + } + + std::vector getRequiredAssets() const override; + void onEnter() override; + void onExit() override; +}; + + +#endif //COLORRACE_LOBBYSCENE_H diff --git a/game/src/multiplayer/lobby/LobbyUiLayer.cpp b/game/src/multiplayer/lobby/LobbyUiLayer.cpp new file mode 100644 index 0000000..4892d89 --- /dev/null +++ b/game/src/multiplayer/lobby/LobbyUiLayer.cpp @@ -0,0 +1,19 @@ +// +// Created by sebastian on 06.08.26. +// + +#include "LobbyUiLayer.h" + +void LobbyUiLayer::onAttachImpl() { + Layer::onAttachImpl(); + + auto backgroundTexture = m_assetManager.getTexture("lobby_background"); + + backgroundImage = std::make_unique(backgroundTexture, glm::vec2(0,0), glm::vec2(1,1)); +} + +void LobbyUiLayer::onRender() { + std::vector guiElements; + guiElements.emplace_back(*backgroundImage); + m_guiRenderer.render(guiElements); +} \ No newline at end of file diff --git a/game/src/multiplayer/lobby/LobbyUiLayer.h b/game/src/multiplayer/lobby/LobbyUiLayer.h new file mode 100644 index 0000000..0228adf --- /dev/null +++ b/game/src/multiplayer/lobby/LobbyUiLayer.h @@ -0,0 +1,40 @@ +// +// Created by sebastian on 06.08.26. +// + +#ifndef COLORRACE_LOBBYUILAYER_H +#define COLORRACE_LOBBYUILAYER_H +#include "layer/Layer.h" +#include "loader/assets/AssetManager.h" +#include "renderer/GuiRenderer.h" +#include "renderer/ui/GUITexture.h" + + +class LobbyUiLayer : public engine::Layer { +public: + LobbyUiLayer(engine::Keyboard &keyboard, engine::Mouse &mouse, + engine::EventBus &animationEventBus, engine::AssetManager& assetManager) + : Layer(keyboard, mouse, animationEventBus), m_assetManager(assetManager) { + } + + LobbyUiLayer(engine::Keyboard &keyboard, engine::Mouse &mouse, + engine::EventBus &animationEventBus, + const std::shared_ptr>> &applicationEventBus, engine::AssetManager& assetManager) + : Layer(keyboard, mouse, animationEventBus, applicationEventBus), m_assetManager(assetManager) { + } + + void onRender() override; + void onUpdate(float deltaTime) override; + +protected: + void onAttachImpl() override; + void onDetachImpl() override; + +private: + std::unique_ptr backgroundImage; + engine::AssetManager& m_assetManager; + engine::renderer::GuiRenderer m_guiRenderer; +}; + + +#endif //COLORRACE_LOBBYUILAYER_H