perf(ui): optimize online UI display

This commit is contained in:
2025-12-28 21:04:58 +08:00
parent 152d210f00
commit 0885e925ad
2 changed files with 33 additions and 4 deletions

View File

@@ -16,15 +16,20 @@ std::unique_ptr<GameUIManager> OnlineGameScene::createUIManager() {
[this](NetType type) { [this](NetType type) {
if (m_networkManager) { if (m_networkManager) {
m_networkManager->init(type); m_networkManager->init(type);
m_gameUIManager->setButton("OnlineHostButton", false);
m_gameUIManager->setButton("OnlineJoinButton", false);
if (type == NetType::CLIENT) { if (type == NetType::CLIENT) {
m_isMyTurn = false; m_isMyTurn = false;
m_myPlayerID = PlayerID::P2; m_myPlayerID = PlayerID::P2;
m_gameUIManager->setLabel("OnlineJoinConnectLabel", true);
} else if (type == NetType::HOST) { } else if (type == NetType::HOST) {
m_isMyTurn = true; m_isMyTurn = true;
m_myPlayerID = PlayerID::P1; m_myPlayerID = PlayerID::P1;
m_gameUIManager->setLabel("OnlineHostConnectLabel", true);
} }
m_networkManager->setIsMyTurn(m_isMyTurn); m_networkManager->setIsMyTurn(m_isMyTurn);
} }
} }
); );
@@ -42,15 +47,21 @@ void OnlineGameScene::onEnter(SDL_Renderer* renderer, int WIDTH, int HEIGHT, UIR
); );
m_networkManager->setStartGameCallback( m_networkManager->setStartGameCallback(
[this]() { [this]() {
auto onlineUIManager = dynamic_cast<OnlineGameUIManager*>(m_gameUIManager.get()); if (!m_gameUIManager) {
if (onlineUIManager) { std::cerr << "gameUIManager is null!\n";
onlineUIManager->hideOnlineButtons();
} }
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; m_currentGameState = GameState::GAME_RUNING;
} }
); );
// 调用父类的onEnter会调用我们重写的createUIManager // 调用父类的onEnter会调用我们重写的createUIManager
GameScene::onEnter(renderer, WIDTH, HEIGHT, uiRenderer); GameScene::onEnter(renderer, WIDTH, HEIGHT, uiRenderer);
m_gameUIManager->setButton("ActionButton", false); // 初始禁用行动按钮,等待游戏开始
m_gameUIManager->setLabel("PlayerLabel", false); // 初始隐藏玩家回合标签
} }
bool OnlineGameScene::preHandleClick(int logicalX, int logicalY) { bool OnlineGameScene::preHandleClick(int logicalX, int logicalY) {

View File

@@ -43,6 +43,24 @@ void OnlineGameUIManager::init() {
} }
); );
m_buttons.emplace(onlineJoinButton->getNameHash(), std::move(onlineJoinButton)); 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) { void OnlineGameUIManager::setOnlineTypeCallback(OnlineTypeEvent onlineTypeEvent) {