Syncing campaign state & save files with clients (WIP)
This commit is contained in:
@@ -1,10 +1,7 @@
|
||||
using Microsoft.Xna.Framework;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Xml.Linq;
|
||||
|
||||
namespace Barotrauma
|
||||
@@ -18,6 +15,8 @@ namespace Barotrauma
|
||||
|
||||
private GUITextBox saveNameBox, seedBox;
|
||||
|
||||
private GUIButton loadGameButton;
|
||||
|
||||
public Action<Submarine, string, string> StartNewGame;
|
||||
public Action<string> LoadGame;
|
||||
|
||||
@@ -138,8 +137,14 @@ namespace Barotrauma
|
||||
textBlock.UserData = saveFile;
|
||||
}
|
||||
|
||||
var button = new GUIButton(new Rectangle(0, 0, 100, 30), "Start", Alignment.Right | Alignment.Bottom, "", loadGameContainer);
|
||||
button.OnClicked = (btn, obj) => { LoadGame?.Invoke(saveList.SelectedData as string); return true; };
|
||||
loadGameButton = new GUIButton(new Rectangle(0, 0, 100, 30), "Start", Alignment.Right | Alignment.Bottom, "", loadGameContainer);
|
||||
loadGameButton.OnClicked = (btn, obj) =>
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(saveList.SelectedData as string)) return false;
|
||||
LoadGame?.Invoke(saveList.SelectedData as string);
|
||||
return true;
|
||||
};
|
||||
loadGameButton.Enabled = false;
|
||||
}
|
||||
|
||||
private bool SelectSaveFile(GUIComponent component, object obj)
|
||||
@@ -154,6 +159,8 @@ namespace Barotrauma
|
||||
return false;
|
||||
}
|
||||
|
||||
loadGameButton.Enabled = true;
|
||||
|
||||
RemoveSaveFrame();
|
||||
|
||||
string subName = ToolBox.GetAttributeString(doc.Root, "submarine", "");
|
||||
|
||||
@@ -1001,7 +1001,7 @@ namespace Barotrauma
|
||||
|
||||
if (campaignContainer.Visible && campaignUI != null)
|
||||
{
|
||||
campaignContainer.Update((float)deltaTime);
|
||||
//campaignContainer.Update((float)deltaTime);
|
||||
campaignUI.Update((float)deltaTime);
|
||||
}
|
||||
|
||||
@@ -1096,9 +1096,18 @@ namespace Barotrauma
|
||||
|
||||
public void SelectMode(int modeIndex)
|
||||
{
|
||||
modeList.Select(modeIndex, true);
|
||||
if (modeIndex < 0 || modeIndex >= modeList.children.Count) return;
|
||||
|
||||
ToggleCampaignMode(SelectedMode.Name == "Campaign");
|
||||
if (GameMain.Server != null)
|
||||
{
|
||||
if (((GameModePreset)modeList.children[modeIndex].UserData).Name == "Campaign")
|
||||
{
|
||||
MultiplayerCampaign.StartCampaignSetup();
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
modeList.Select(modeIndex, true);
|
||||
missionTypeBlock.Visible = SelectedMode != null && SelectedMode.Name == "Mission";
|
||||
}
|
||||
|
||||
@@ -1110,35 +1119,49 @@ namespace Barotrauma
|
||||
if (modePreset == null) return false;
|
||||
|
||||
missionTypeBlock.Visible = modePreset.Name == "Mission";
|
||||
|
||||
if (modePreset.Name == "Campaign")
|
||||
|
||||
if (GameMain.Server != null)
|
||||
{
|
||||
MultiplayerCampaign.StartCampaignSetup();
|
||||
}
|
||||
|
||||
//campaign selected and the campaign view has not been set up yet
|
||||
// -> don't select the mode yet and start campaign setup
|
||||
if (modePreset.Name == "Campaign" && !campaignContainer.Visible)
|
||||
{
|
||||
MultiplayerCampaign.StartCampaignSetup();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
lastUpdateID++;
|
||||
return true;
|
||||
}
|
||||
|
||||
public void ToggleCampaignView(bool enabled)
|
||||
{
|
||||
defaultModeContainer.Visible = !enabled;
|
||||
StartButton.Visible = !enabled;
|
||||
|
||||
campaignContainer.Visible = enabled;
|
||||
defaultModeContainer.Visible = !enabled;
|
||||
if (StartButton != null)
|
||||
{
|
||||
StartButton.Visible = !enabled;
|
||||
}
|
||||
}
|
||||
|
||||
public void ToggleCampaignMode(bool enabled)
|
||||
{
|
||||
StartButton.Visible = !enabled;
|
||||
campaignViewButton.Visible = enabled;
|
||||
|
||||
ToggleCampaignView(enabled);
|
||||
|
||||
if (enabled && campaignUI == null)
|
||||
if (enabled)
|
||||
{
|
||||
campaignUI = new CampaignUI(GameMain.GameSession.GameMode as CampaignMode, campaignContainer);
|
||||
campaignUI.StartRound = () => { GameMain.Server.StartGame(); };
|
||||
if (campaignUI == null)
|
||||
{
|
||||
campaignUI = new CampaignUI(GameMain.GameSession.GameMode as CampaignMode, campaignContainer);
|
||||
campaignUI.StartRound = () => { GameMain.Server.StartGame(); };
|
||||
}
|
||||
modeList.Select(2, true);
|
||||
}
|
||||
|
||||
if (GameMain.Server != null)
|
||||
{
|
||||
lastUpdateID++;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user