mirror of
https://git.eden-emu.dev/archive/citron
synced 2026-04-19 19:20:46 -04:00
fix(multiplayer): Overlay Cleanup
Forgor to implement necessary components for proper cleanup after exiting game/fix multiple redundant calls to overlay/chatroom. Signed-off-by: Collecting <collecting@noreply.localhost>
This commit is contained in:
@@ -199,15 +199,26 @@ void MultiplayerRoomOverlay::ConnectToRoom() {
|
|||||||
if (!main_window) return;
|
if (!main_window) return;
|
||||||
multiplayer_state = main_window->GetMultiplayerState();
|
multiplayer_state = main_window->GetMultiplayerState();
|
||||||
if (!multiplayer_state) return;
|
if (!multiplayer_state) return;
|
||||||
|
|
||||||
if (multiplayer_state->IsClientRoomVisible()) {
|
if (multiplayer_state->IsClientRoomVisible()) {
|
||||||
chat_room_widget->setEnabled(false);
|
chat_room_widget->setEnabled(false);
|
||||||
chat_room_widget->Clear();
|
chat_room_widget->Clear();
|
||||||
chat_room_widget->AppendStatusMessage(tr("Please close the Multiplayer Room Window to use the Overlay."));
|
chat_room_widget->AppendStatusMessage(tr("Please close the Multiplayer Room Window to use the Overlay."));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
chat_room_widget->setEnabled(true);
|
chat_room_widget->setEnabled(true);
|
||||||
auto& room_network = multiplayer_state->GetRoomNetwork();
|
auto& room_network = multiplayer_state->GetRoomNetwork();
|
||||||
room_member = room_network.GetRoomMember().lock();
|
|
||||||
|
auto current_member = room_network.GetRoomMember().lock();
|
||||||
|
if (current_member != room_member) {
|
||||||
|
if (is_chat_initialized && chat_room_widget) {
|
||||||
|
chat_room_widget->Shutdown();
|
||||||
|
}
|
||||||
|
is_chat_initialized = false;
|
||||||
|
room_member = current_member;
|
||||||
|
}
|
||||||
|
|
||||||
if (room_member) {
|
if (room_member) {
|
||||||
if (!is_chat_initialized) {
|
if (!is_chat_initialized) {
|
||||||
chat_room_widget->Initialize(&room_network);
|
chat_room_widget->Initialize(&room_network);
|
||||||
@@ -233,9 +244,17 @@ void MultiplayerRoomOverlay::ClearUI() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void MultiplayerRoomOverlay::UpdateRoomData() {
|
void MultiplayerRoomOverlay::UpdateRoomData() {
|
||||||
if (!multiplayer_state) { ConnectToRoom(); return; }
|
if (!multiplayer_state) {
|
||||||
if (multiplayer_state->IsClientRoomVisible()) { chat_room_widget->setEnabled(false); return; }
|
ConnectToRoom();
|
||||||
if (!chat_room_widget->isEnabled()) ConnectToRoom();
|
return;
|
||||||
|
}
|
||||||
|
if (multiplayer_state->IsClientRoomVisible()) {
|
||||||
|
chat_room_widget->setEnabled(false);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (!chat_room_widget->isEnabled()) {
|
||||||
|
ConnectToRoom();
|
||||||
|
}
|
||||||
|
|
||||||
if (room_member && room_member->GetState() >= Network::RoomMember::State::Joined) {
|
if (room_member && room_member->GetState() >= Network::RoomMember::State::Joined) {
|
||||||
const auto& members = room_member->GetMemberInformation();
|
const auto& members = room_member->GetMemberInformation();
|
||||||
@@ -290,6 +309,12 @@ void MultiplayerRoomOverlay::UpdateRoomData() {
|
|||||||
}
|
}
|
||||||
players_online_label->setText(label_text);
|
players_online_label->setText(label_text);
|
||||||
if (chat_room_widget->isEnabled()) chat_room_widget->SetPlayerList(members);
|
if (chat_room_widget->isEnabled()) chat_room_widget->SetPlayerList(members);
|
||||||
|
} else {
|
||||||
|
ClearUI();
|
||||||
|
|
||||||
|
// Refresh the member pointer if we lost connection
|
||||||
|
auto& room_network = multiplayer_state->GetRoomNetwork();
|
||||||
|
room_member = room_network.GetRoomMember().lock();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user