diff --git a/Barotrauma/BarotraumaClient/Source/DebugConsole.cs b/Barotrauma/BarotraumaClient/Source/DebugConsole.cs index 69ffc0cac..f0e44f86a 100644 --- a/Barotrauma/BarotraumaClient/Source/DebugConsole.cs +++ b/Barotrauma/BarotraumaClient/Source/DebugConsole.cs @@ -1167,184 +1167,6 @@ namespace Barotrauma NPCConversation.WriteToCSV(); })); - commands.Add(new Command("csvtoxml", "csvtoxml [language] -> Converts .csv localization files in Content/NPCConversations & Content/Texts to .xml for use in-game.", (string[] args) => - { - if (args.Length == 0) return; - LocalizationCSVtoXML.Convert(args[0]); - })); -#endif - - commands.Add(new Command("cleanbuild", "", (string[] args) => - { - GameMain.Config.MusicVolume = 0.5f; - GameMain.Config.SoundVolume = 0.5f; - NewMessage("Music and sound volume set to 0.5", Color.Green); - - GameMain.Config.GraphicsWidth = 0; - GameMain.Config.GraphicsHeight = 0; - GameMain.Config.WindowMode = WindowMode.Fullscreen; - NewMessage("Resolution set to 0 x 0 (screen resolution will be used)", Color.Green); - NewMessage("Fullscreen enabled", Color.Green); - - GameSettings.ShowUserStatisticsPrompt = true; - - commands.Add(new Command("refreshrect", "Updates the dimensions of the selected items to match the ones defined in the prefab. Applied only in the subeditor.", (string[] args) => - { - //TODO: maybe do this automatically during loading when possible? - if (Screen.Selected == GameMain.SubEditorScreen) - { - if (!MapEntity.SelectedAny) - { - ThrowError("You have to select item(s) first!"); - } - else - { - foreach (var mapEntity in MapEntity.SelectedList) - { - if (mapEntity is Item item) - { - item.Rect = new Rectangle(item.Rect.X, item.Rect.Y, - (int)(item.Prefab.sprite.size.X * item.Prefab.Scale), - (int)(item.Prefab.sprite.size.Y * item.Prefab.Scale)); - } - else if (mapEntity is Structure structure) - { - if (!structure.ResizeHorizontal) - { - structure.Rect = new Rectangle(structure.Rect.X, structure.Rect.Y, - (int)structure.Prefab.ScaledSize.X, - structure.Rect.Height); - } - if (!structure.ResizeVertical) - { - structure.Rect = new Rectangle(structure.Rect.X, structure.Rect.Y, - structure.Rect.Width, - (int)structure.Prefab.ScaledSize.Y); - } - } - } - } - } - }, isCheat: false)); -#endif - - commands.Add(new Command("dumptexts", "dumptexts [filepath]: Extracts all the texts from the given text xml and writes them into a file (using the same filename, but with the .txt extension). If the filepath is omitted, the EnglishVanilla.xml file is used.", (string[] args) => - { - string filePath = args.Length > 0 ? args[0] : "Content/Texts/EnglishVanilla.xml"; - var doc = XMLExtensions.TryLoadXml(filePath); - if (doc?.Root == null) return; - List lines = new List(); - foreach (XElement element in doc.Root.Elements()) - { - lines.Add(element.ElementInnerText()); - } - File.WriteAllLines(Path.GetFileNameWithoutExtension(filePath) + ".txt", lines); - }, - () => - { - var files = TextManager.GetTextFiles().Select(f => f.Replace("\\", "/")); - return new string[][] - { - TextManager.GetTextFiles().Where(f => Path.GetExtension(f)==".xml").ToArray() - }; - })); - - commands.Add(new Command("loadtexts", "loadtexts [sourcefile] [destinationfile]: Loads all lines of text from a given .txt file and inserts them sequientially into the elements of an xml file. If the file paths are omitted, EnglishVanilla.txt and EnglishVanilla.xml are used.", (string[] args) => - { - string sourcePath = args.Length > 0 ? args[0] : "Content/Texts/EnglishVanilla.txt"; - string destinationPath = args.Length > 1 ? args[1] : "Content/Texts/EnglishVanilla.xml"; - - string[] lines; - try - { - lines = File.ReadAllLines(sourcePath); - } - catch (Exception e) - { - ThrowError("Reading the file \"" + sourcePath + "\" failed.", e); - return; - } - var doc = XMLExtensions.TryLoadXml(destinationPath); - int i = 0; - foreach (XElement element in doc.Root.Elements()) - { - if (i >= lines.Length) - { - ThrowError("Error while loading texts to the xml file. The xml has more elements than the number of lines in the text file."); - return; - } - element.Value = lines[i]; - i++; - } - doc.Save(destinationPath); - }, - () => - { - var files = TextManager.GetTextFiles().Select(f => f.Replace("\\", "/")); - return new string[][] - { - files.Where(f => Path.GetExtension(f)==".txt").ToArray(), - files.Where(f => Path.GetExtension(f)==".xml").ToArray() - }; - })); - - commands.Add(new Command("updatetextfile", "updatetextfile [sourcefile] [destinationfile]: Inserts all the xml elements that are only present in the source file into the destination file. Can be used to update outdated translation files more easily.", (string[] args) => - { - if (args.Length < 2) return; - string sourcePath = args[0]; - string destinationPath = args[1]; - - var sourceDoc = XMLExtensions.TryLoadXml(sourcePath); - var destinationDoc = XMLExtensions.TryLoadXml(destinationPath); - - XElement destinationElement = destinationDoc.Root.Elements().First(); - foreach (XElement element in sourceDoc.Root.Elements()) - { - if (destinationDoc.Root.Element(element.Name) == null) - { - element.Value = "!!!!!!!!!!!!!" + element.Value; - destinationElement.AddAfterSelf(element); - } - XNode nextNode = destinationElement.NextNode; - while ((!(nextNode is XElement) || nextNode == element) && nextNode != null) nextNode = nextNode.NextNode; - destinationElement = nextNode as XElement; - } - destinationDoc.Save(destinationPath); - }, - () => - { - var files = TextManager.GetTextFiles().Where(f => Path.GetExtension(f) == ".xml").Select(f => f.Replace("\\", "/")).ToArray(); - return new string[][] - { - files, - files - }; - })); - - commands.Add(new Command("dumpentitytexts", "dumpentitytexts [filepath]: gets the names and descriptions of all entity prefabs and writes them into a file along with xml tags that can be used in translation files. If the filepath is omitted, the file is written to Content/Texts/EntityTexts.txt", (string[] args) => - { - string filePath = args.Length > 0 ? args[0] : "Content/Texts/EntityTexts.txt"; - List lines = new List(); - foreach (MapEntityPrefab me in MapEntityPrefab.List) - { - lines.Add("" + me.Name + ""); - lines.Add("" + me.Description + ""); - } - File.WriteAllLines(filePath, lines); - })); -#if DEBUG - commands.Add(new Command("checkduplicates", "Checks the given language for duplicate translation keys and writes to file.", (string[] args) => - { - if (args.Length != 1) return; - TextManager.CheckForDuplicates(args[0]); - })); - - commands.Add(new Command("writetocsv", "Writes the default language (English) to a .csv file.", (string[] args) => - { - TextManager.WriteToCSV(); - NPCConversation.WriteToCSV(); - })); - commands.Add(new Command("csvtoxml", "csvtoxml [language] -> Converts .csv localization files in Content/NPCConversations & Content/Texts to .xml for use in-game.", (string[] args) => { if (args.Length == 0) return; diff --git a/Barotrauma/BarotraumaClient/Source/GUI/GUIRadioButtonGroup.cs b/Barotrauma/BarotraumaClient/Source/GUI/GUIRadioButtonGroup.cs index f9ee629cb..4fb882dbc 100644 --- a/Barotrauma/BarotraumaClient/Source/GUI/GUIRadioButtonGroup.cs +++ b/Barotrauma/BarotraumaClient/Source/GUI/GUIRadioButtonGroup.cs @@ -15,20 +15,7 @@ namespace Barotrauma { radioButtons = new Dictionary(); } - - public override bool Enabled - { - get => base.Enabled; - set - { - base.Enabled = value; - foreach(KeyValuePair rbPair in radioButtons) - { - rbPair.Value.Enabled = value; - } - } - } - + public void AddRadioButton(Enum key, GUITickBox radioButton) { if (selected == key) radioButton.Selected = true; diff --git a/Barotrauma/BarotraumaClient/Source/GameSettings.cs b/Barotrauma/BarotraumaClient/Source/GameSettings.cs index d982c84f3..1a6449ecc 100644 --- a/Barotrauma/BarotraumaClient/Source/GameSettings.cs +++ b/Barotrauma/BarotraumaClient/Source/GameSettings.cs @@ -473,13 +473,9 @@ namespace Barotrauma return true; }; - if (string.IsNullOrWhiteSpace(VoiceCaptureDevice) || !(deviceNames?.Contains(VoiceCaptureDevice) ?? false)) - { - VoiceCaptureDevice = deviceNames?.Count > 0 ? deviceNames[0] : null; - } if (string.IsNullOrWhiteSpace(VoiceCaptureDevice)) { - VoiceSetting = VoiceMode.Disabled; + VoiceCaptureDevice = deviceNames?.Count > 0 ? deviceNames[0] : null; } #if (!OSX) var deviceList = new GUIDropDown(new RectTransform(new Vector2(1.0f, 0.05f), audioSliders.RectTransform), TrimAudioDeviceName(VoiceCaptureDevice), deviceNames.Count); @@ -502,20 +498,19 @@ namespace Barotrauma { deviceList.AddItem(TextManager.Get("VoipNoDevices") ?? "N/A", null); deviceList.ButtonEnabled = false; - deviceList.Select(0); } #else var defaultDeviceGroup = new GUILayoutGroup(new RectTransform(new Vector2(1f, 0.1f), audioSliders.RectTransform), true, Anchor.CenterLeft); - var currentDeviceTextBlock = new GUITextBlock(new RectTransform(new Vector2(.7f, 0.75f), null), - TextManager.AddPunctuation(':', TextManager.Get("CurrentDevice"), TrimAudioDeviceName(VoiceCaptureDevice))) + var currentDeviceButton = new GUITextBlock(new RectTransform(new Vector2(.7f, 0.75f), null), + TextManager.AddPunctuation(':', TextManager.Get("CurrentDevice"), TextManager.EnsureUTF8(VoiceCaptureDevice))) { ToolTip = TextManager.Get("CurrentDeviceToolTip.OSX"), TextAlignment = Alignment.CenterLeft }; string refreshText = ToolBox.WrapText(TextManager.Get("RefreshDefaultDevice"), defaultDeviceGroup.RectTransform.Rect.Width * 0.3f, GUI.Font); - var currentDeviceButton = new GUIButton(new RectTransform(new Vector2(.3f, 0.75f), defaultDeviceGroup.RectTransform), refreshText) + new GUIButton(new RectTransform(new Vector2(.3f, 0.75f), defaultDeviceGroup.RectTransform), refreshText) { ToolTip = TextManager.Get("RefreshDefaultDeviceToolTip"), OnClicked = (bt, userdata) => @@ -526,21 +521,20 @@ namespace Barotrauma if (VoiceCaptureDevice == deviceNames[0]) return true; VoipCapture.ChangeCaptureDevice(deviceNames[0]); - currentDeviceTextBlock.Text = TextManager.AddPunctuation(':', TextManager.Get("CurrentDevice"), TrimAudioDeviceName(VoiceCaptureDevice)); - currentDeviceTextBlock.Flash(Color.Blue); + currentDeviceButton.Text = TextManager.AddPunctuation(':', TextManager.Get("CurrentDevice"), TrimAudioDeviceName(VoiceCaptureDevice)); + currentDeviceButton.Flash(Color.Blue); } else { - currentDeviceTextBlock.Text = TextManager.Get("VoipNoDevices") ?? "N/A"; - currentDeviceTextBlock.Flash(Color.Red); + currentDeviceButton.Text = TextManager.Get("VoipNoDevices"); + currentDeviceButton.Flash(Color.Red); } return true; } }; - currentDeviceButton.OnClicked(currentDeviceButton, null); - currentDeviceTextBlock.RectTransform.Parent = defaultDeviceGroup.RectTransform; + currentDeviceButton.RectTransform.Parent = defaultDeviceGroup.RectTransform; #endif //var radioButtonFrame = new GUILayoutGroup(new RectTransform(new Vector2(1.0f, 0.12f), audioSliders.RectTransform)); @@ -656,10 +650,6 @@ namespace Barotrauma } }; voiceMode.Selected = VoiceSetting; - if (string.IsNullOrWhiteSpace(VoiceCaptureDevice)) - { - voiceMode.Enabled = false; - } /// Controls tab ------------------------------------------------------------- var controlsLayoutGroup = new GUILayoutGroup(new RectTransform(new Vector2(0.95f, 0.95f), tabs[(int)Tab.Controls].RectTransform, Anchor.TopCenter) @@ -813,7 +803,6 @@ namespace Barotrauma private string TrimAudioDeviceName(string name) { - if (string.IsNullOrWhiteSpace(name)) { return string.Empty; } string[] prefixes = { "OpenAL Soft on " }; foreach (string prefix in prefixes) { diff --git a/Barotrauma/BarotraumaShared/Source/Characters/AI/Objectives/AIObjectiveGoTo.cs b/Barotrauma/BarotraumaShared/Source/Characters/AI/Objectives/AIObjectiveGoTo.cs index 8e5f15598..0ec20a4c9 100644 --- a/Barotrauma/BarotraumaShared/Source/Characters/AI/Objectives/AIObjectiveGoTo.cs +++ b/Barotrauma/BarotraumaShared/Source/Characters/AI/Objectives/AIObjectiveGoTo.cs @@ -179,6 +179,10 @@ namespace Barotrauma bool closeEnough = Vector2.DistanceSquared(Target.WorldPosition, character.WorldPosition) < CloseEnough * CloseEnough; if (repeat) { + if (closeEnough) + { + closeEnough = !(Target is Character) || Target is Character c && c.CurrentHull == character.CurrentHull; + } if (closeEnough) { OnCompleted();