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) {
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<OnlineGameUIManager*>(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) {

View File

@@ -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) {