Skip to content

Commit eef36f8

Browse files
committed
[multiplayer] Make multiplayer respect back btn
1 parent 22824b0 commit eef36f8

File tree

3 files changed

+100
-52
lines changed

3 files changed

+100
-52
lines changed

Main/include/MultiplayerScreen.hpp

+2
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ class MultiplayerScreen : public IAsyncLoadableApplicationTickable
5252
void OnKeyReleased(SDL_Scancode code) override;
5353
void MousePressed(MouseButton button);
5454

55+
5556
void OnSuspend() override;
5657
void OnRestore() override;
5758
bool AsyncLoad() override;
@@ -149,6 +150,7 @@ class MultiplayerScreen : public IAsyncLoadableApplicationTickable
149150
void m_render(float deltaTime);
150151

151152
void m_joinRoomWithToken();
153+
bool m_returnToMainList();
152154

153155
void OnSearchStatusUpdated(String status);
154156

Main/src/MultiplayerScreen.cpp

+71-36
Original file line numberDiff line numberDiff line change
@@ -829,6 +829,51 @@ void MultiplayerScreen::MousePressed(MouseButton button)
829829
lua_settop(m_lua, 0);
830830
}
831831

832+
bool MultiplayerScreen::m_returnToMainList()
833+
{
834+
if (m_screenState == MultiplayerScreenState::ROOM_LIST)
835+
return false;
836+
837+
// Exiting from name setup
838+
if (m_userName == "")
839+
{
840+
m_suspended = true;
841+
g_application->RemoveTickable(this);
842+
return true;
843+
}
844+
845+
if (m_screenState == MultiplayerScreenState::IN_ROOM)
846+
{
847+
nlohmann::json packet;
848+
packet["topic"] = "room.leave";
849+
m_tcp.SendJSON(packet);
850+
}
851+
else
852+
{
853+
nlohmann::json packet;
854+
packet["topic"] = "server.rooms";
855+
m_tcp.SendJSON(packet);
856+
}
857+
858+
if (m_textInput->active)
859+
m_textInput->SetActive(false);
860+
861+
if (m_screenState == MultiplayerScreenState::IN_ROOM) {
862+
m_chatOverlay->AddMessage("You left the lobby", 207, 178, 41);
863+
}
864+
865+
m_chatOverlay->EnableOpeningChat();
866+
867+
m_screenState = MultiplayerScreenState::ROOM_LIST;
868+
m_stopPreview();
869+
lua_pushstring(m_lua, "roomList");
870+
lua_setglobal(m_lua, "screenState");
871+
g_application->DiscordPresenceMulti("", 0, 0, "");
872+
m_roomId = "";
873+
m_hasSelectedMap = false;
874+
return true;
875+
}
876+
832877
void MultiplayerScreen::Tick(float deltaTime)
833878
{
834879
// Tick the tcp socket even if we are suspended
@@ -1065,43 +1110,23 @@ void MultiplayerScreen::OnKeyPressed(SDL_Scancode code)
10651110
}
10661111
else if (code == SDL_SCANCODE_ESCAPE)
10671112
{
1068-
if (m_screenState != MultiplayerScreenState::ROOM_LIST)
1069-
{
1070-
1071-
// Exiting from name setup
1072-
if (m_userName == "")
1073-
{
1074-
m_suspended = true;
1075-
g_application->RemoveTickable(this);
1076-
return;
1077-
}
1113+
int backScancode = g_gameConfig.GetInt(GameConfigKeys::Key_Back);
1114+
// SDL_Keycode k = SDL_GetKeyFromScancode(g_gameConfig.GetInt(GameConfigKeys::Key_Back));
10781115

1079-
if (m_screenState == MultiplayerScreenState::IN_ROOM)
1080-
{
1081-
nlohmann::json packet;
1082-
packet["topic"] = "room.leave";
1083-
m_tcp.SendJSON(packet);
1084-
}
1085-
else
1116+
if (g_gameConfig.GetEnum<Enum_InputDevice>(GameConfigKeys::ButtonInputDevice) != InputDevice::Keyboard
1117+
|| backScancode != SDL_SCANCODE_ESCAPE)
1118+
{
1119+
switch (m_screenState)
10861120
{
1087-
nlohmann::json packet;
1088-
packet["topic"] = "server.rooms";
1089-
m_tcp.SendJSON(packet);
1121+
// Escape works for text editing
1122+
case MultiplayerScreenState::JOIN_PASSWORD:
1123+
case MultiplayerScreenState::NEW_ROOM_NAME:
1124+
case MultiplayerScreenState::NEW_ROOM_PASSWORD:
1125+
case MultiplayerScreenState::SET_USERNAME:
1126+
m_returnToMainList();
1127+
default:
1128+
break;
10901129
}
1091-
1092-
if (m_textInput->active)
1093-
m_textInput->SetActive(false);
1094-
1095-
m_chatOverlay->AddMessage("You left the lobby", 207, 178, 41);
1096-
m_chatOverlay->EnableOpeningChat();
1097-
1098-
m_screenState = MultiplayerScreenState::ROOM_LIST;
1099-
m_stopPreview();
1100-
lua_pushstring(m_lua, "roomList");
1101-
lua_setglobal(m_lua, "screenState");
1102-
g_application->DiscordPresenceMulti("", 0, 0, "");
1103-
m_roomId = "";
1104-
m_hasSelectedMap = false;
11051130
}
11061131
}
11071132
else if (code == SDL_SCANCODE_RETURN)
@@ -1147,8 +1172,15 @@ void MultiplayerScreen::m_OnButtonPressed(Input::Button buttonCode)
11471172
if (IsSuspended() || m_settDiag.IsActive())
11481173
return;
11491174

1150-
if (g_gameConfig.GetEnum<Enum_InputDevice>(GameConfigKeys::ButtonInputDevice) == InputDevice::Keyboard && (m_textInput->active || m_chatOverlay->IsOpen()))
1151-
return;
1175+
if (g_gameConfig.GetEnum<Enum_InputDevice>(GameConfigKeys::ButtonInputDevice) == InputDevice::Keyboard)
1176+
{
1177+
if (m_chatOverlay->IsOpen())
1178+
return;
1179+
1180+
// Allow Button Back while text editing
1181+
if (m_textInput->active && buttonCode != Input::Button::Back)
1182+
return;
1183+
}
11521184

11531185
m_timeSinceButtonPressed[buttonCode] = 0;
11541186

@@ -1170,6 +1202,9 @@ void MultiplayerScreen::m_OnButtonPressed(Input::Button buttonCode)
11701202
return;
11711203
}
11721204
break;
1205+
case Input::Button::Back:
1206+
if (m_returnToMainList())
1207+
return;
11731208
default:
11741209
break;
11751210
}

bin/skins/Default/scripts/multiplayerscreen.lua

+27-16
Original file line numberDiff line numberDiff line change
@@ -783,11 +783,13 @@ end
783783
-- Toggle hard gauage
784784
function toggle_hard()
785785
Tcp.SendLine(json.encode({topic="user.hard.toggle"}))
786+
hard_mode = not hard_mode
786787
end
787788

788789
-- Toggle hard gauage
789790
function toggle_mirror()
790791
Tcp.SendLine(json.encode({topic="user.mirror.toggle"}))
792+
mirror_mode = not mirror_mode
791793
end
792794

793795
function new_room()
@@ -835,6 +837,23 @@ function join_room(room)
835837
end
836838
end
837839

840+
function go_back()
841+
if screenState == "roomList" then
842+
did_exit = true;
843+
mpScreen.Exit();
844+
return
845+
end
846+
847+
-- Reset room data
848+
screenState = "roomList" -- have to update here
849+
selected_room = nil;
850+
rooms = {};
851+
selected_song = nil
852+
selected_song_index = 1;
853+
jacket = 0;
854+
end
855+
856+
838857
-- Handle button presses to advance the UI
839858
button_released = function(button)
840859
if button == game.BUTTON_STA then
@@ -872,26 +891,18 @@ button_released = function(button)
872891
if button == game.BUTTON_FXR then
873892
toggle_mirror();
874893
end
875-
end
876-
877-
-- Handle the escape key around the UI
878-
function key_pressed(key)
879-
if key == 27 then --escape pressed
894+
if button == game.BUTTON_BCK then
895+
go_back();
896+
end
897+
if button == game.BUTTON_BTA then
880898
if screenState == "roomList" then
881-
did_exit = true;
882-
mpScreen.Exit();
883-
return
899+
new_room()
884900
end
885-
886-
-- Reset room data
887-
screenState = "roomList" -- have to update here
888-
selected_room = nil;
889-
rooms = {};
890-
selected_song = nil
891-
selected_song_index = 1;
892-
jacket = 0;
893901
end
902+
end
894903

904+
-- Handle the keys around the UI
905+
function key_pressed(key)
895906
end
896907

897908
-- Handle mouse clicks in the UI

0 commit comments

Comments
 (0)