From f077a92f5e3e59e4c5e1d6026e35047302dbe774 Mon Sep 17 00:00:00 2001 From: Joonas Rikkonen Date: Sat, 18 May 2019 17:17:36 +0300 Subject: [PATCH] (965abc29d) If the target sub is not the same as the current sub, need to take the difference into account in sim positions. --- .../Source/GUI/LoadingScreen.cs | 4 - .../Source/Characters/AI/EnemyAIController.cs | 8 + .../AI/Objectives/AIObjectiveGoTo.cs | 16 +- .../BarotraumaShared/Source/GameSettings.cs | 174 +++++++----------- 4 files changed, 84 insertions(+), 118 deletions(-) diff --git a/Barotrauma/BarotraumaClient/Source/GUI/LoadingScreen.cs b/Barotrauma/BarotraumaClient/Source/GUI/LoadingScreen.cs index e92bf2e62..e6a140005 100644 --- a/Barotrauma/BarotraumaClient/Source/GUI/LoadingScreen.cs +++ b/Barotrauma/BarotraumaClient/Source/GUI/LoadingScreen.cs @@ -242,10 +242,6 @@ namespace Barotrauma if (hover && PlayerInput.LeftButtonClicked()) { GameMain.Config.Language = language; - //reload tip in the selected language - selectedTip = TextManager.Get("LoadingScreenTip", true); - GameMain.Config.SetDefaultBindings(legacy: false); - GameMain.Config.CheckBindings(useDefaults: true); WaitForLanguageSelection = false; } diff --git a/Barotrauma/BarotraumaShared/Source/Characters/AI/EnemyAIController.cs b/Barotrauma/BarotraumaShared/Source/Characters/AI/EnemyAIController.cs index bd8df818d..3d04ce7ae 100644 --- a/Barotrauma/BarotraumaShared/Source/Characters/AI/EnemyAIController.cs +++ b/Barotrauma/BarotraumaShared/Source/Characters/AI/EnemyAIController.cs @@ -543,6 +543,14 @@ namespace Barotrauma { attackSimPos -= Character.Submarine.SimPosition; } + else if (Character.Submarine != SelectedAiTarget.Entity.Submarine) + { + if (Character.Submarine != null && SelectedAiTarget.Entity.Submarine != null) + { + Vector2 diff = Character.Submarine.SimPosition - SelectedAiTarget.Entity.Submarine.SimPosition; + attackSimPos -= diff; + } + } } if (Math.Abs(Character.AnimController.movement.X) > 0.1f && !Character.AnimController.InWater && diff --git a/Barotrauma/BarotraumaShared/Source/Characters/AI/Objectives/AIObjectiveGoTo.cs b/Barotrauma/BarotraumaShared/Source/Characters/AI/Objectives/AIObjectiveGoTo.cs index d63ba2cf3..c40748c6d 100644 --- a/Barotrauma/BarotraumaShared/Source/Characters/AI/Objectives/AIObjectiveGoTo.cs +++ b/Barotrauma/BarotraumaShared/Source/Characters/AI/Objectives/AIObjectiveGoTo.cs @@ -114,11 +114,23 @@ namespace Barotrauma { Vector2 currTargetSimPos = Vector2.Zero; currTargetSimPos = Target.SimPosition; - //if character is inside the sub and target isn't, transform the position - if (character.Submarine != null && Target.Submarine == null) + // Take the sub position into account in the sim pos + if (character.Submarine == null && Target.Submarine != null) + { + currTargetSimPos += Target.Submarine.SimPosition; + } + else if (character.Submarine != null && Target.Submarine == null) { currTargetSimPos -= character.Submarine.SimPosition; } + else if (character.Submarine != Target.Submarine) + { + if (character.Submarine != null && Target.Submarine != null) + { + Vector2 diff = character.Submarine.SimPosition - Target.Submarine.SimPosition; + currTargetSimPos -= diff; + } + } character.AIController.SteeringManager.SteeringSeek(currTargetSimPos); if (getDivingGearIfNeeded) { diff --git a/Barotrauma/BarotraumaShared/Source/GameSettings.cs b/Barotrauma/BarotraumaShared/Source/GameSettings.cs index c9ca56409..6cb1d63b4 100644 --- a/Barotrauma/BarotraumaShared/Source/GameSettings.cs +++ b/Barotrauma/BarotraumaShared/Source/GameSettings.cs @@ -302,6 +302,10 @@ namespace Barotrauma public void SetDefaultBindings(XDocument doc = null, bool legacy = false) { keyMapping = new KeyOrMouse[Enum.GetNames(typeof(InputType)).Length]; + keyMapping[(int)InputType.Up] = new KeyOrMouse(Keys.W); + keyMapping[(int)InputType.Down] = new KeyOrMouse(Keys.S); + keyMapping[(int)InputType.Left] = new KeyOrMouse(Keys.A); + keyMapping[(int)InputType.Right] = new KeyOrMouse(Keys.D); keyMapping[(int)InputType.Run] = new KeyOrMouse(Keys.LeftShift); keyMapping[(int)InputType.Attack] = new KeyOrMouse(2); keyMapping[(int)InputType.Crouch] = new KeyOrMouse(Keys.LeftControl); @@ -315,47 +319,11 @@ namespace Barotrauma keyMapping[(int)InputType.RadioChat] = new KeyOrMouse(Keys.R); keyMapping[(int)InputType.CrewOrders] = new KeyOrMouse(Keys.C); + keyMapping[(int)InputType.SelectNextCharacter] = new KeyOrMouse(Keys.Z); + keyMapping[(int)InputType.SelectPreviousCharacter] = new KeyOrMouse(Keys.X); + keyMapping[(int)InputType.Voice] = new KeyOrMouse(Keys.V); - if (Language == "French") - { - keyMapping[(int)InputType.Up] = new KeyOrMouse(Keys.Z); - keyMapping[(int)InputType.Down] = new KeyOrMouse(Keys.S); - keyMapping[(int)InputType.Left] = new KeyOrMouse(Keys.Q); - keyMapping[(int)InputType.Right] = new KeyOrMouse(Keys.D); - - keyMapping[(int)InputType.SelectNextCharacter] = new KeyOrMouse(Keys.X); - keyMapping[(int)InputType.SelectPreviousCharacter] = new KeyOrMouse(Keys.W); - } - else - { - keyMapping[(int)InputType.Up] = new KeyOrMouse(Keys.W); - keyMapping[(int)InputType.Down] = new KeyOrMouse(Keys.S); - keyMapping[(int)InputType.Left] = new KeyOrMouse(Keys.A); - keyMapping[(int)InputType.Right] = new KeyOrMouse(Keys.D); - - keyMapping[(int)InputType.SelectNextCharacter] = new KeyOrMouse(Keys.Z); - keyMapping[(int)InputType.SelectPreviousCharacter] = new KeyOrMouse(Keys.X); - } - } - - #region Load DefaultConfig - private void LoadDefaultConfig() - { - XDocument doc = XMLExtensions.TryLoadXml(savePath); - - Language = doc.Root.GetAttributeString("language", "English"); - - MasterServerUrl = doc.Root.GetAttributeString("masterserverurl", ""); - - AutoCheckUpdates = doc.Root.GetAttributeBool("autocheckupdates", true); - WasGameUpdated = doc.Root.GetAttributeBool("wasgameupdated", false); - - VerboseLogging = doc.Root.GetAttributeBool("verboselogging", false); - SaveDebugConsoleLogs = doc.Root.GetAttributeBool("savedebugconsolelogs", false); - - QuickStartSubmarineName = doc.Root.GetAttributeString("quickstartsub", ""); - if (legacy) { keyMapping[(int)InputType.Use] = new KeyOrMouse(0); @@ -373,15 +341,33 @@ namespace Barotrauma { foreach (XElement subElement in doc.Root.Elements()) { - if (subElement.Name.ToString().ToLowerInvariant() == "keymapping") + switch (subElement.Name.ToString().ToLowerInvariant()) { - LoadKeyBinds(subElement); + case "keymapping": + foreach (XAttribute attribute in subElement.Attributes()) + { + if (Enum.TryParse(attribute.Name.ToString(), true, out InputType inputType)) + { + if (int.TryParse(attribute.Value.ToString(), out int mouseButton)) + { + keyMapping[(int)inputType] = new KeyOrMouse(mouseButton); + } + else + { + if (Enum.TryParse(attribute.Value.ToString(), true, out Keys key)) + { + keyMapping[(int)inputType] = new KeyOrMouse(key); + } + } + } + } + break; } } } } - public void CheckBindings(bool useDefaults) + private void CheckBindings(bool useDefaults) { foreach (InputType inputType in Enum.GetValues(typeof(InputType))) { @@ -836,54 +822,6 @@ namespace Barotrauma VoiceSetting = voiceSetting; } } - if (!SelectedContentPackages.Any()) - { - var availablePackage = ContentPackage.List.FirstOrDefault(cp => cp.IsCompatible() && cp.CorePackage); - if (availablePackage != null) - { - SelectedContentPackages.Add(availablePackage); - } - } - - //save to get rid of the invalid selected packages in the config file - if (missingPackagePaths.Count > 0 || incompatiblePackages.Count > 0) { SaveNewPlayerConfig(); } - } - #endregion - - #region Save DefaultConfig - private void SaveNewDefaultConfig() - { - XDocument doc = new XDocument(); - - if (doc.Root == null) - { - doc.Add(new XElement("config")); - } - - doc.Root.Add( - new XAttribute("language", TextManager.Language), - new XAttribute("masterserverurl", MasterServerUrl), - new XAttribute("autocheckupdates", AutoCheckUpdates), - new XAttribute("musicvolume", musicVolume), - new XAttribute("soundvolume", soundVolume), - new XAttribute("voicechatvolume", voiceChatVolume), - new XAttribute("verboselogging", VerboseLogging), - new XAttribute("savedebugconsolelogs", SaveDebugConsoleLogs), - new XAttribute("enablesplashscreen", EnableSplashScreen), - new XAttribute("usesteammatchmaking", useSteamMatchmaking), - new XAttribute("quickstartsub", QuickStartSubmarineName), - new XAttribute("requiresteamauthentication", requireSteamAuthentication), - new XAttribute("aimassistamount", aimAssistAmount)); - - if (!ShowUserStatisticsPrompt) - { - doc.Root.Add(new XAttribute("senduserstatistics", sendUserStatistics)); - } - - if (WasGameUpdated) - { - doc.Root.Add(new XAttribute("wasgameupdated", true)); - } useSteamMatchmaking = doc.Root.GetAttributeBool("usesteammatchmaking", useSteamMatchmaking); requireSteamAuthentication = doc.Root.GetAttributeBool("requiresteamauthentication", requireSteamAuthentication); @@ -905,7 +843,23 @@ namespace Barotrauma switch (subElement.Name.ToString().ToLowerInvariant()) { case "keymapping": - LoadKeyBinds(subElement); + foreach (XAttribute attribute in subElement.Attributes()) + { + if (Enum.TryParse(attribute.Name.ToString(), true, out InputType inputType)) + { + if (int.TryParse(attribute.Value.ToString(), out int mouseButton)) + { + keyMapping[(int)inputType] = new KeyOrMouse(mouseButton); + } + else + { + if (Enum.TryParse(attribute.Value.ToString(), true, out Keys key)) + { + keyMapping[(int)inputType] = new KeyOrMouse(key); + } + } + } + } break; case "gameplay": jobPreferences = new List(); @@ -951,7 +905,22 @@ namespace Barotrauma foreach (XElement subElement in doc.Root.Elements()) { - switch (subElement.Name.ToString().ToLowerInvariant()) + gSettings = new XElement("graphicssettings"); + doc.Root.Add(gSettings); + } + + gSettings.ReplaceAttributes( + new XAttribute("particlelimit", ParticleLimit), + new XAttribute("lightmapscale", LightMapScale), + new XAttribute("specularity", SpecularityEnabled), + new XAttribute("chromaticaberration", ChromaticAberrationEnabled), + new XAttribute("losmode", LosMode), + new XAttribute("hudscale", HUDScale), + new XAttribute("inventoryscale", InventoryScale)); + + foreach (ContentPackage contentPackage in SelectedContentPackages) + { + if (contentPackage.Path.Contains(vanillaContentPackagePath)) { case "contentpackage": string path = System.IO.Path.GetFullPath(subElement.GetAttributeString("path", "")); @@ -1065,6 +1034,7 @@ namespace Barotrauma new XAttribute("autocheckupdates", AutoCheckUpdates), new XAttribute("musicvolume", musicVolume), new XAttribute("soundvolume", soundVolume), + new XAttribute("voicechatvolume", voiceChatVolume), new XAttribute("verboselogging", VerboseLogging), new XAttribute("savedebugconsolelogs", SaveDebugConsoleLogs), new XAttribute("enablesplashscreen", EnableSplashScreen), @@ -1219,26 +1189,6 @@ namespace Barotrauma } #endregion - private void LoadKeyBinds(XElement element) - { - foreach (XAttribute attribute in element.Attributes()) - { - if (!Enum.TryParse(attribute.Name.ToString(), true, out InputType inputType)) { continue; } - - if (int.TryParse(attribute.Value.ToString(), out int mouseButton)) - { - keyMapping[(int)inputType] = new KeyOrMouse(mouseButton); - } - else - { - if (Enum.TryParse(attribute.Value.ToString(), true, out Keys key)) - { - keyMapping[(int)inputType] = new KeyOrMouse(key); - } - } - } - } - public void ResetToDefault() { LoadDefaultConfig();