(3cb6209cf) Show the "starting a round" popup to all clients when the server initiates a new round. Closes #1396
This commit is contained in:
@@ -768,13 +768,19 @@ namespace Barotrauma.Networking
|
|||||||
readyToStartMsg.Write((byte)ClientPacketHeader.RESPONSE_STARTGAME);
|
readyToStartMsg.Write((byte)ClientPacketHeader.RESPONSE_STARTGAME);
|
||||||
|
|
||||||
GameMain.NetLobbyScreen.UsingShuttle = usingShuttle;
|
GameMain.NetLobbyScreen.UsingShuttle = usingShuttle;
|
||||||
readyToStartMsg.Write(
|
bool readyToStart =
|
||||||
GameMain.NetLobbyScreen.TrySelectSub(subName, subHash, GameMain.NetLobbyScreen.SubList) &&
|
GameMain.NetLobbyScreen.TrySelectSub(subName, subHash, GameMain.NetLobbyScreen.SubList) &&
|
||||||
GameMain.NetLobbyScreen.TrySelectSub(shuttleName, shuttleHash, GameMain.NetLobbyScreen.ShuttleList.ListBox));
|
GameMain.NetLobbyScreen.TrySelectSub(shuttleName, shuttleHash, GameMain.NetLobbyScreen.ShuttleList.ListBox);
|
||||||
|
readyToStartMsg.Write(readyToStart);
|
||||||
|
|
||||||
WriteCharacterInfo(readyToStartMsg);
|
WriteCharacterInfo(readyToStartMsg);
|
||||||
|
|
||||||
client.SendMessage(readyToStartMsg, NetDeliveryMethod.ReliableUnordered);
|
client.SendMessage(readyToStartMsg, NetDeliveryMethod.ReliableUnordered);
|
||||||
|
|
||||||
|
if (readyToStart && !CoroutineManager.IsCoroutineRunning("WaitForStartRound"))
|
||||||
|
{
|
||||||
|
CoroutineManager.StartCoroutine(GameMain.NetLobbyScreen.WaitForStartRound(startButton: null, allowCancel: false), "WaitForStartRound");
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case ServerPacketHeader.STARTGAME:
|
case ServerPacketHeader.STARTGAME:
|
||||||
startGameCoroutine = GameMain.Instance.ShowLoading(StartGame(inc), false);
|
startGameCoroutine = GameMain.Instance.ShowLoading(StartGame(inc), false);
|
||||||
|
|||||||
@@ -646,7 +646,7 @@ namespace Barotrauma
|
|||||||
OnClicked = (btn, obj) =>
|
OnClicked = (btn, obj) =>
|
||||||
{
|
{
|
||||||
GameMain.Client.RequestStartRound();
|
GameMain.Client.RequestStartRound();
|
||||||
CoroutineManager.StartCoroutine(WaitForStartRound(StartButton), "WaitForStartRound");
|
CoroutineManager.StartCoroutine(WaitForStartRound(StartButton, allowCancel: true), "WaitForStartRound");
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@@ -656,31 +656,41 @@ namespace Barotrauma
|
|||||||
TextManager.Get("SpectateButton"), style: "GUIButtonLarge");
|
TextManager.Get("SpectateButton"), style: "GUIButtonLarge");
|
||||||
}
|
}
|
||||||
|
|
||||||
private IEnumerable<object> WaitForStartRound(GUIButton startButton)
|
public IEnumerable<object> WaitForStartRound(GUIButton startButton, bool allowCancel)
|
||||||
{
|
{
|
||||||
string headerText = TextManager.Get("RoundStartingPleaseWait");
|
string headerText = TextManager.Get("RoundStartingPleaseWait");
|
||||||
var msgBox = new GUIMessageBox(headerText, TextManager.Get("RoundStarting"), new string[] { TextManager.Get("Cancel") });
|
var msgBox = new GUIMessageBox(headerText, TextManager.Get("RoundStarting"),
|
||||||
|
allowCancel ? new string[] { TextManager.Get("Cancel") } : new string[0]);
|
||||||
|
|
||||||
msgBox.Buttons[0].OnClicked = (btn, userdata) =>
|
if (allowCancel)
|
||||||
{
|
{
|
||||||
startButton.Enabled = true;
|
msgBox.Buttons[0].OnClicked = (btn, userdata) =>
|
||||||
GameMain.Client.RequestRoundEnd();
|
{
|
||||||
CoroutineManager.StopCoroutines("WaitForStartRound");
|
startButton.Enabled = true;
|
||||||
return true;
|
GameMain.Client.RequestRoundEnd();
|
||||||
};
|
CoroutineManager.StopCoroutines("WaitForStartRound");
|
||||||
msgBox.Buttons[0].OnClicked += msgBox.Close;
|
return true;
|
||||||
|
};
|
||||||
|
msgBox.Buttons[0].OnClicked += msgBox.Close;
|
||||||
|
}
|
||||||
|
|
||||||
startButton.Enabled = false;
|
if (startButton != null)
|
||||||
|
{
|
||||||
|
startButton.Enabled = false;
|
||||||
|
}
|
||||||
|
|
||||||
DateTime timeOut = DateTime.Now + new TimeSpan(0, 0, 10);
|
DateTime timeOut = DateTime.Now + new TimeSpan(0, 0, 10);
|
||||||
while (Selected != GameMain.GameScreen && DateTime.Now < timeOut)
|
while (Selected == GameMain.NetLobbyScreen && DateTime.Now < timeOut)
|
||||||
{
|
{
|
||||||
msgBox.Header.Text = headerText + new string('.', ((int)Timing.TotalTime % 3 + 1));
|
msgBox.Header.Text = headerText + new string('.', ((int)Timing.TotalTime % 3 + 1));
|
||||||
yield return CoroutineStatus.Running;
|
yield return CoroutineStatus.Running;
|
||||||
}
|
}
|
||||||
|
|
||||||
msgBox.Close();
|
msgBox.Close();
|
||||||
startButton.Enabled = true;
|
if (startButton != null)
|
||||||
|
{
|
||||||
|
startButton.Enabled = true;
|
||||||
|
}
|
||||||
|
|
||||||
yield return CoroutineStatus.Success;
|
yield return CoroutineStatus.Success;
|
||||||
}
|
}
|
||||||
@@ -1845,7 +1855,7 @@ namespace Barotrauma
|
|||||||
StartRound = () =>
|
StartRound = () =>
|
||||||
{
|
{
|
||||||
GameMain.Client.RequestStartRound();
|
GameMain.Client.RequestStartRound();
|
||||||
CoroutineManager.StartCoroutine(WaitForStartRound(campaignUI.StartButton), "WaitForStartRound");
|
CoroutineManager.StartCoroutine(WaitForStartRound(campaignUI.StartButton, allowCancel: true), "WaitForStartRound");
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
campaignUI.MapContainer.RectTransform.NonScaledSize = new Point(GameMain.GraphicsWidth, GameMain.GraphicsHeight);
|
campaignUI.MapContainer.RectTransform.NonScaledSize = new Point(GameMain.GraphicsWidth, GameMain.GraphicsHeight);
|
||||||
|
|||||||
Reference in New Issue
Block a user