using Barotrauma.Networking; using Microsoft.Xna.Framework; using System; using System.Collections.Generic; using System.Linq; namespace Barotrauma { partial class NetLobbyScreen : Screen { private Submarine selectedSub; private Submarine selectedShuttle; private bool usingShuttle = true; public Submarine SelectedSub { get { return selectedSub; } set { selectedSub = value; lastUpdateID++; } } public Submarine SelectedShuttle { get { return selectedShuttle; } set { selectedShuttle = value; lastUpdateID++; } } public bool UsingShuttle { get { return usingShuttle; } set { usingShuttle = value; lastUpdateID++; } } private GameModePreset[] gameModes; public GameModePreset[] GameModes { get { return gameModes; } } private int selectedModeIndex; public int SelectedModeIndex { get { return selectedModeIndex; } set { lastUpdateID++; selectedModeIndex = MathHelper.Clamp(value, 0, gameModes.Length - 1); } } public string SelectedModeName { get { return gameModes[SelectedModeIndex].Name; } set { for (int i = 0; i < gameModes.Count(); i++) { if (gameModes[i].Name.ToLower() == value.ToLower()) { SelectedModeIndex = i; break; } } } } public GameModePreset SelectedMode { get { return gameModes[SelectedModeIndex]; } } public string ServerMessageText; private int missionTypeIndex; public int MissionTypeIndex { get { return missionTypeIndex; } set { lastUpdateID++; missionTypeIndex = Math.Max(0, Math.Min(Mission.MissionTypes.Count() - 1, value)); } } public string MissionTypeName { get { return Mission.MissionTypes[MissionTypeIndex]; } set { for (int i = 0; i < Mission.MissionTypes.Count(); i++) { if (Mission.MissionTypes[i].ToLower() == value.ToLower()) { MissionTypeIndex = i; break; } } } } public void ChangeServerName(string n) { ServerName = n; lastUpdateID++; } public void ChangeServerMessage(string m) { ServerMessageText = m; lastUpdateID++; } public List JobPreferences { get { return null; } } public NetLobbyScreen() { LevelSeed = ToolBox.RandomSeed(8); subs = Submarine.SavedSubmarines.Where(s => !s.HasTag(SubmarineTag.HideInMenus)).ToList(); if (subs == null || subs.Count()==0) { throw new Exception("No submarines are available."); } selectedSub = subs.First(s => !s.HasTag(SubmarineTag.Shuttle)); selectedShuttle = subs.First(s => s.HasTag(SubmarineTag.Shuttle)); DebugConsole.NewMessage("Selected sub: " + SelectedSub.Name, Color.White); DebugConsole.NewMessage("Selected shuttle: " + SelectedShuttle.Name, Color.White); gameModes = GameModePreset.list.ToArray(); } private List subs; public List GetSubList() { return subs; } public string LevelSeed { get { return levelSeed; } set { if (levelSeed == value) return; lastUpdateID++; levelSeed = value; LocationType.Random(levelSeed); //call to sync up with clients } } public bool StartButtonEnabled { get { return true; } set { /* do nothing */ } } public void ToggleCampaignMode(bool enabled) { for (int i = 0; i < GameModes.Length; i++) { if ((GameModes[i].Name == "Campaign") == enabled) { selectedModeIndex = i; break; } } lastUpdateID++; } public override void Select() { base.Select(); GameMain.Server.Voting.ResetVotes(GameMain.Server.ConnectedClients); } public void RandomizeSettings() { if (GameMain.Server.RandomizeSeed) LevelSeed = ToolBox.RandomSeed(8); if (GameMain.Server.SubSelectionMode == SelectionMode.Random) { var nonShuttles = Submarine.SavedSubmarines.FindAll(c => !c.HasTag(SubmarineTag.Shuttle) && !c.HasTag(SubmarineTag.HideInMenus)); SelectedSub = nonShuttles[Rand.Range(0, nonShuttles.Count)]; } if (GameMain.Server.ModeSelectionMode == SelectionMode.Random) { var allowedGameModes = Array.FindAll(gameModes, m => !m.IsSinglePlayer && m.Name != "Campaign"); SelectedModeName = allowedGameModes[Rand.Range(0, allowedGameModes.Length)].Name; } } } }