using Microsoft.Xna.Framework; using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Barotrauma.Networking { enum SelectionMode : int { Manual = 0, Random = 1, Vote = 2 } enum YesNoMaybe : int { No = 0, Maybe = 1, Yes = 2 } partial class GameServer : NetworkMember { public bool ShowNetStats; private TimeSpan refreshMasterInterval = new TimeSpan(0, 0, 40); private TimeSpan sparseUpdateInterval = new TimeSpan(0, 0, 0, 3); private SelectionMode subSelectionMode, modeSelectionMode; private bool randomizeSeed = true; private bool registeredToMaster; private BanList banList; private string password; private GUIFrame settingsFrame; public float AutoRestartTimer; private bool autoRestart; private bool allowSpectating = true; public bool AutoRestart { get { return (ConnectedClients.Count == 0) ? false : autoRestart; } set { autoRestart = value; AutoRestartTimer = autoRestart ? 20.0f : 0.0f; } } public YesNoMaybe TraitorsEnabled { get; set; } public SelectionMode SubSelectionMode { get { return subSelectionMode; } } public SelectionMode ModeSelectionMode { get { return modeSelectionMode; } } public bool RandomizeSeed { get { return randomizeSeed; } } public BanList BanList { get { return banList; } } public bool AllowSpectating { get { return allowSpectating; } } private void CreateSettingsFrame() { settingsFrame = new GUIFrame(new Rectangle(0,0,GameMain.GraphicsWidth,GameMain.GraphicsHeight), Color.Black*0.5f); GUIFrame innerFrame = new GUIFrame(new Rectangle(0,0,400,400), null, Alignment.Center, GUI.Style, settingsFrame); var randomizeLevelBox = new GUITickBox(new Rectangle(0, 0, 20, 20), "Randomize level seed", Alignment.Left, innerFrame); randomizeLevelBox.OnSelected = ToggleRandomizeSeed; new GUITextBlock(new Rectangle(0, 35, 100, 20), "Submarine selection:", GUI.Style, innerFrame); var selectionFrame = new GUIFrame(new Rectangle(0, 60, 300, 20), null, innerFrame); for (int i = 0; i<3; i++) { var selectionTick = new GUITickBox(new Rectangle(i * 100, 0, 20, 20), ((SelectionMode)i).ToString(), Alignment.Left, selectionFrame); selectionTick.Selected = i == (int)subSelectionMode; selectionTick.OnSelected = SwitchSubSelection; selectionTick.UserData = (SelectionMode)i; } new GUITextBlock(new Rectangle(0, 85, 100, 20), "Mode selection:", GUI.Style, innerFrame); selectionFrame = new GUIFrame(new Rectangle(0, 110, 300, 20), null, innerFrame); for (int i = 0; i<3; i++) { var selectionTick = new GUITickBox(new Rectangle(i*100, 0, 20, 20), ((SelectionMode)i).ToString(), Alignment.Left, selectionFrame); selectionTick.Selected = i == (int)modeSelectionMode; selectionTick.OnSelected = SwitchModeSelection; selectionTick.UserData = (SelectionMode)i; } var allowSpecBox = new GUITickBox(new Rectangle(0, 150, 20, 20), "Allow spectating", Alignment.Left, innerFrame); allowSpecBox.Selected = true; allowSpecBox.OnSelected = ToggleAllowSpectating; var closeButton = new GUIButton(new Rectangle(0, 0, 100, 20), "Close", Alignment.BottomRight, GUI.Style, innerFrame); closeButton.OnClicked = ToggleSettingsFrame; } private bool SwitchSubSelection(GUITickBox tickBox) { subSelectionMode = (SelectionMode)tickBox.UserData; foreach (GUIComponent otherTickBox in tickBox.Parent.children) { if (otherTickBox == tickBox) continue; ((GUITickBox)otherTickBox).Selected = false; } Voting.AllowSubVoting = subSelectionMode == SelectionMode.Vote; if (subSelectionMode==SelectionMode.Random) { GameMain.NetLobbyScreen.SubList.Select(Rand.Range(0, GameMain.NetLobbyScreen.SubList.CountChildren)); } return true; } private bool SwitchModeSelection(GUITickBox tickBox) { modeSelectionMode = (SelectionMode)tickBox.UserData; foreach (GUIComponent otherTickBox in tickBox.Parent.children) { if (otherTickBox == tickBox) continue; ((GUITickBox)otherTickBox).Selected = false; } Voting.AllowModeVoting = modeSelectionMode == SelectionMode.Vote; if (modeSelectionMode == SelectionMode.Random) { GameMain.NetLobbyScreen.ModeList.Select(Rand.Range(0, GameMain.NetLobbyScreen.ModeList.CountChildren)); } return true; } private bool ToggleRandomizeSeed(GUITickBox tickBox) { randomizeSeed = tickBox.Selected; return true; } private bool ToggleAllowSpectating(GUITickBox tickBox) { allowSpectating = tickBox.Selected; return true; } public bool ToggleSettingsFrame(GUIButton button, object obj) { if (settingsFrame==null) { CreateSettingsFrame(); } else { settingsFrame = null; } return false; } } }