From 0885e925ad28f7ae413b01933aef4d283bb416ed Mon Sep 17 00:00:00 2001 From: zhenyan121 <3367366583@qq.com> Date: Sun, 28 Dec 2025 21:04:58 +0800 Subject: [PATCH] perf(ui): optimize online UI display --- src/scenes/gameplay/OnlineGameScene.cpp | 19 +++++++++++++++---- src/ui/managers/OnlineGameUIManager.cpp | 18 ++++++++++++++++++ 2 files changed, 33 insertions(+), 4 deletions(-) diff --git a/src/scenes/gameplay/OnlineGameScene.cpp b/src/scenes/gameplay/OnlineGameScene.cpp index a0f7e1b..433f789 100644 --- a/src/scenes/gameplay/OnlineGameScene.cpp +++ b/src/scenes/gameplay/OnlineGameScene.cpp @@ -16,15 +16,20 @@ std::unique_ptr OnlineGameScene::createUIManager() { [this](NetType type) { if (m_networkManager) { m_networkManager->init(type); + + m_gameUIManager->setButton("OnlineHostButton", false); + m_gameUIManager->setButton("OnlineJoinButton", false); if (type == NetType::CLIENT) { m_isMyTurn = false; - m_myPlayerID = PlayerID::P2; + m_gameUIManager->setLabel("OnlineJoinConnectLabel", true); } else if (type == NetType::HOST) { m_isMyTurn = true; m_myPlayerID = PlayerID::P1; + m_gameUIManager->setLabel("OnlineHostConnectLabel", true); } m_networkManager->setIsMyTurn(m_isMyTurn); + } } ); @@ -42,15 +47,21 @@ void OnlineGameScene::onEnter(SDL_Renderer* renderer, int WIDTH, int HEIGHT, UIR ); m_networkManager->setStartGameCallback( [this]() { - auto onlineUIManager = dynamic_cast(m_gameUIManager.get()); - if (onlineUIManager) { - onlineUIManager->hideOnlineButtons(); + if (!m_gameUIManager) { + std::cerr << "gameUIManager is null!\n"; } + m_gameUIManager->setLabel("OnlineHostConnectLabel", false); + m_gameUIManager->setLabel("OnlineJoinConnectLabel", false); + m_gameUIManager->setButton("ActionButton", true); + m_gameUIManager->setLabel("PlayerLabel", true); m_currentGameState = GameState::GAME_RUNING; } ); // 调用父类的onEnter(会调用我们重写的createUIManager) GameScene::onEnter(renderer, WIDTH, HEIGHT, uiRenderer); + + m_gameUIManager->setButton("ActionButton", false); // 初始禁用行动按钮,等待游戏开始 + m_gameUIManager->setLabel("PlayerLabel", false); // 初始隐藏玩家回合标签 } bool OnlineGameScene::preHandleClick(int logicalX, int logicalY) { diff --git a/src/ui/managers/OnlineGameUIManager.cpp b/src/ui/managers/OnlineGameUIManager.cpp index 4300f04..5f81044 100644 --- a/src/ui/managers/OnlineGameUIManager.cpp +++ b/src/ui/managers/OnlineGameUIManager.cpp @@ -43,6 +43,24 @@ void OnlineGameUIManager::init() { } ); m_buttons.emplace(onlineJoinButton->getNameHash(), std::move(onlineJoinButton)); + + auto onlineHostConnectLabel = UIWidgetFactory::createStandardLabel( + "OnlineHostConnectLabel", + "Waiting for player to connect...", + 200, + 200 + ); + onlineHostConnectLabel->setVisible(false); + m_labels.emplace(onlineHostConnectLabel->getNameHash(), std::move(onlineHostConnectLabel)); + + auto onlineJoinConnectLabel = UIWidgetFactory::createStandardLabel( + "OnlineJoinConnectLabel", + "Connecting to host...", + 200, + 200 + ); + onlineJoinConnectLabel->setVisible(false); + m_labels.emplace(onlineJoinConnectLabel->getNameHash(), std::move(onlineJoinConnectLabel)); } void OnlineGameUIManager::setOnlineTypeCallback(OnlineTypeEvent onlineTypeEvent) {