Skip to content

Commit 7db5186

Browse files
committed
Add stacking to PopupPanel and include UnityServiceErrorMessage
1 parent f071d90 commit 7db5186

File tree

3 files changed

+44
-13
lines changed

3 files changed

+44
-13
lines changed

Assets/BossRoom/Scripts/Client/UI/ConnectionStatusMessageUIManager.cs

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,18 +3,21 @@
33
using System.Collections.Generic;
44
using Unity.Multiplayer.Samples.BossRoom;
55
using Unity.Multiplayer.Samples.BossRoom.Shared.Infrastructure;
6+
using Unity.Multiplayer.Samples.BossRoom.Shared.Net.UnityServices.Infrastructure;
67
using Unity.Multiplayer.Samples.BossRoom.Visual;
78
using UnityEngine;
89

910
public class ConnectionStatusMessageUIManager : MonoBehaviour
1011
{
1112

12-
IDisposable m_Subscriptions;
13+
DisposableGroup m_Subscriptions = new DisposableGroup();
1314

1415
[Inject]
15-
void InjectDependencies(ISubscriber<ConnectStatus> connectStatusSub)
16+
void InjectDependencies(ISubscriber<ConnectStatus> connectStatusSub,
17+
ISubscriber<UnityServiceErrorMessage> unityServiceErrorMessageSub)
1618
{
17-
m_Subscriptions = connectStatusSub.Subscribe(OnConnectStatus);
19+
m_Subscriptions.Add(connectStatusSub.Subscribe(OnConnectStatus));
20+
m_Subscriptions.Add(unityServiceErrorMessageSub.Subscribe(OnUnityServiceErrorMessage));
1821
}
1922

2023
void Awake()
@@ -27,6 +30,11 @@ void OnDestroy()
2730
m_Subscriptions?.Dispose();
2831
}
2932

33+
void OnUnityServiceErrorMessage(UnityServiceErrorMessage unityServiceErrorMessage)
34+
{
35+
PopupPanel.ShowPopupPanel(unityServiceErrorMessage.Title, unityServiceErrorMessage.Message);
36+
}
37+
3038
void OnConnectStatus(ConnectStatus status)
3139
{
3240
switch (status)

Assets/BossRoom/Scripts/Client/UI/Lobby/LobbyUIMediator.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ public class LobbyUIMediator : MonoBehaviour
2424
NameGenerationData m_NameGenerationData;
2525
GameNetPortal m_GameNetPortal;
2626
ClientGameNetPortal m_ClientNetPortal;
27+
IPublisher<UnityServiceErrorMessage> m_UnityServiceErrorMessagePublisher;
2728

2829
[Inject]
2930
void InjectDependenciesAndInitialize(
@@ -42,6 +43,7 @@ ClientGameNetPortal clientGameNetPortal
4243
m_LocalLobby = localLobby;
4344
m_GameNetPortal = gameNetPortal;
4445
m_ClientNetPortal = clientGameNetPortal;
46+
m_UnityServiceErrorMessagePublisher = unityServiceErrorMessagePublisher;
4547

4648
RegenerateName();
4749

@@ -151,7 +153,7 @@ void OnJoinedLobby(Lobby remoteLobby)
151153

152154
void OnRelayJoinFailed(string message)
153155
{
154-
PopupPanel.ShowPopupPanel("Relay join failed", message);
156+
m_UnityServiceErrorMessagePublisher.Publish(new UnityServiceErrorMessage("Relay join failed", message));
155157
Debug.Log($"Relay join failed: {message}");
156158
//leave the lobby if relay failed for some reason
157159
m_LobbyServiceFacade.EndTracking();

Assets/BossRoom/Scripts/Client/UI/PopupPanel.cs

Lines changed: 30 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,7 @@
11
using System;
2+
using System.Collections.Generic;
23
using UnityEngine;
3-
using UnityEngine.UI;
44
using TMPro;
5-
using Unity.Multiplayer.Samples.BossRoom.Shared.Infrastructure;
6-
using Unity.Multiplayer.Samples.BossRoom.Shared.Net.UnityServices.Infrastructure;
7-
using UnityEngine.SceneManagement;
85

96
namespace Unity.Multiplayer.Samples.BossRoom.Visual
107
{
@@ -13,11 +10,25 @@ namespace Unity.Multiplayer.Samples.BossRoom.Visual
1310
/// </summary>
1411
public class PopupPanel : MonoBehaviour
1512
{
13+
struct PopupPanelData
14+
{
15+
public string TitleText;
16+
public string MainText;
17+
18+
public PopupPanelData(string titleText, string mainText)
19+
{
20+
TitleText = titleText;
21+
MainText = mainText;
22+
}
23+
}
24+
1625
[SerializeField]
1726
TextMeshProUGUI m_TitleText;
1827
[SerializeField]
1928
TextMeshProUGUI m_MainText;
2029

30+
Stack<PopupPanelData> m_PopupStack = new Stack<PopupPanelData>();
31+
2132
static PopupPanel s_Instance;
2233

2334
void Awake()
@@ -34,6 +45,10 @@ void OnDestroy()
3445
public void OnConfirmClick()
3546
{
3647
ResetState();
48+
if (m_PopupStack.Count > 0)
49+
{
50+
SetupPopupPanel(m_PopupStack.Pop());
51+
}
3752
}
3853

3954
/// <summary>
@@ -52,24 +67,30 @@ void ResetState()
5267
/// <param name="titleText">The title text at the top of the panel</param>
5368
/// <param name="mainText"> The text just under the title- the main body of text</param>
5469
/// <param name="confirmFunction"> The function to call when the confirm button is pressed.</param>
55-
public static void ShowPopupPanel(string titleText, string mainText, Action confirmFunction = null)
70+
public static void ShowPopupPanel(string titleText, string mainText)
5671
{
5772
if (s_Instance != null)
5873
{
59-
s_Instance.SetupPopupPanel(titleText, mainText, confirmFunction);
74+
s_Instance.StackPopupPanel(new PopupPanelData(titleText, mainText));
6075
}
6176
else
6277
{
6378
Debug.LogError($"No PopupPanel instance found. Cannot display message: {titleText}: {mainText}");
6479
}
6580
}
6681

67-
void SetupPopupPanel(string titleText, string mainText, Action confirmFunction = null)
82+
void StackPopupPanel(PopupPanelData data)
83+
{
84+
m_PopupStack.Push(data);
85+
SetupPopupPanel(data);
86+
}
87+
88+
void SetupPopupPanel(PopupPanelData data)
6889
{
6990
ResetState();
7091

71-
m_TitleText.text = titleText;
72-
m_MainText.text = mainText;
92+
m_TitleText.text = data.TitleText;
93+
m_MainText.text = data.MainText;
7394

7495
gameObject.SetActive(true);
7596
}

0 commit comments

Comments
 (0)