From 71d1738498517c9c4a202b35b6af1722dc96e9ca Mon Sep 17 00:00:00 2001 From: Joonas Rikkonen Date: Sat, 18 May 2019 17:43:38 +0300 Subject: [PATCH] (76e16f98e) Use outdoorsteering when far enough from the sub. Increase the wait until reachable time a bit. --- .../Characters/Health/CharacterHealth.cs | 2 +- Barotrauma/BarotraumaClient/Source/GUI/GUI.cs | 22 ++--- .../Source/GUI/GUIMessageBox.cs | 4 +- .../BarotraumaClient/Source/GameMain.cs | 19 ++-- .../BarotraumaClient/Source/GameSettings.cs | 17 ++-- .../Source/Items/CharacterInventory.cs | 5 +- .../Source/Items/Components/Machines/Pump.cs | 7 +- .../Items/Components/Signal/Connection.cs | 2 +- .../BarotraumaClient/Source/Map/Structure.cs | 3 +- .../Source/Networking/GameClient.cs | 16 +--- .../Source/Screens/ServerListScreen.cs | 55 +++++++----- .../Source/Screens/SteamWorkshopScreen.cs | 2 +- .../Source/Characters/AI/HumanAIController.cs | 22 ++++- .../AI/Objectives/AIObjectiveGoTo.cs | 15 ++-- .../Source/Characters/AI/SteeringManager.cs | 56 ++++++------ .../BarotraumaShared/Source/GameSettings.cs | 87 ++++++++++++++++++- .../Source/Map/Levels/Level.cs | 3 +- .../BarotraumaShared/Source/Map/Structure.cs | 6 +- .../Source/Map/StructurePrefab.cs | 5 -- 19 files changed, 214 insertions(+), 134 deletions(-) diff --git a/Barotrauma/BarotraumaClient/Source/Characters/Health/CharacterHealth.cs b/Barotrauma/BarotraumaClient/Source/Characters/Health/CharacterHealth.cs index 86f4895d3..8442fe1ba 100644 --- a/Barotrauma/BarotraumaClient/Source/Characters/Health/CharacterHealth.cs +++ b/Barotrauma/BarotraumaClient/Source/Characters/Health/CharacterHealth.cs @@ -273,7 +273,7 @@ namespace Barotrauma { IsHorizontal = false }; - cprButton = new GUIButton(new RectTransform(new Point((int)(80 * GUI.Scale)), GUI.Canvas), text: "", style: "CPRButton") + cprButton = new GUIButton(new RectTransform(new Point(80, 80), GUI.Canvas), text: "", style: "CPRButton") { OnClicked = (button, userData) => { diff --git a/Barotrauma/BarotraumaClient/Source/GUI/GUI.cs b/Barotrauma/BarotraumaClient/Source/GUI/GUI.cs index 18093e0ed..34de3d244 100644 --- a/Barotrauma/BarotraumaClient/Source/GUI/GUI.cs +++ b/Barotrauma/BarotraumaClient/Source/GUI/GUI.cs @@ -396,11 +396,8 @@ namespace Barotrauma { MouseOn.DrawToolTip(spriteBatch); } - - if (GameMain.WindowActive) - { - Cursor.Draw(spriteBatch, PlayerInput.LatestMousePosition, 0, Scale / 2f); - } + + Cursor.Draw(spriteBatch, PlayerInput.LatestMousePosition); } public static void DrawBackgroundSprite(SpriteBatch spriteBatch, Sprite backgroundSprite, float blurAmount = 1.0f, float aberrationStrength = 1.0f) @@ -570,7 +567,7 @@ namespace Barotrauma private static void HandlePersistingElements(float deltaTime) { - if (GUIMessageBox.VisibleBox != null && GUIMessageBox.VisibleBox.UserData as string != "verificationprompt" && GUIMessageBox.VisibleBox.UserData as string != "bugreporter") + if (GUIMessageBox.VisibleBox != null && GUIMessageBox.VisibleBox.UserData as string != "verificationprompt") { GUIMessageBox.VisibleBox.AddToGUIUpdateList(); } @@ -585,7 +582,7 @@ namespace Barotrauma } //the "are you sure you want to quit" prompts are drawn on top of everything else - if (GUIMessageBox.VisibleBox?.UserData as string == "verificationprompt" || GUIMessageBox.VisibleBox?.UserData as string == "bugreporter") + if (GUIMessageBox.VisibleBox?.UserData as string == "verificationprompt") { GUIMessageBox.VisibleBox.AddToGUIUpdateList(); } @@ -1447,16 +1444,7 @@ namespace Barotrauma RelativeSpacing = 0.05f }; - var button = new GUIButton(new RectTransform(new Vector2(1.0f, 0.1f), buttonContainer.RectTransform), TextManager.Get("bugreportbutton"), style: "GUIButtonLarge") - { - Color = Color.Red, - HoverColor = Color.DarkRed, - PressedColor = Color.White, - OnClicked = (btn, userdata) => { GameMain.Instance.ShowBugReporter(); return true; } - }; - - - button = new GUIButton(new RectTransform(new Vector2(1.0f, 0.1f), buttonContainer.RectTransform), TextManager.Get("PauseMenuResume"), style: "GUIButtonLarge") + var button = new GUIButton(new RectTransform(new Vector2(1.0f, 0.1f), buttonContainer.RectTransform), TextManager.Get("PauseMenuResume"), style: "GUIButtonLarge") { OnClicked = TogglePauseMenu }; diff --git a/Barotrauma/BarotraumaClient/Source/GUI/GUIMessageBox.cs b/Barotrauma/BarotraumaClient/Source/GUI/GUIMessageBox.cs index c633cc90e..39f531931 100644 --- a/Barotrauma/BarotraumaClient/Source/GUI/GUIMessageBox.cs +++ b/Barotrauma/BarotraumaClient/Source/GUI/GUIMessageBox.cs @@ -91,7 +91,7 @@ namespace Barotrauma } InnerFrame.RectTransform.NonScaledSize = - new Point(InnerFrame.Rect.Width, (int)Math.Max(height / Content.RectTransform.RelativeSize.Y, height + (int)(50 * GUI.yScale))); + new Point(InnerFrame.Rect.Width, (int)Math.Max(height / Content.RectTransform.RelativeSize.Y, height + 50)); Content.RectTransform.NonScaledSize = new Point(Content.Rect.Width, height); } @@ -99,7 +99,7 @@ namespace Barotrauma Buttons = new List(buttons.Length); for (int i = 0; i < buttons.Length; i++) { - var button = new GUIButton(new RectTransform(new Vector2(Math.Min(0.9f / buttons.Length, 0.5f), 1.0f), buttonContainer.RectTransform), buttons[i], style: "GUIButtonLarge"); + var button = new GUIButton(new RectTransform(new Vector2(Math.Min(0.9f / buttons.Length, 0.5f), 1.0f), buttonContainer.RectTransform, maxSize: new Point(300, 35)), buttons[i], style: "GUIButtonLarge"); Buttons.Add(button); } diff --git a/Barotrauma/BarotraumaClient/Source/GameMain.cs b/Barotrauma/BarotraumaClient/Source/GameMain.cs index 8d6a47a65..28a8f28a7 100644 --- a/Barotrauma/BarotraumaClient/Source/GameMain.cs +++ b/Barotrauma/BarotraumaClient/Source/GameMain.cs @@ -334,7 +334,7 @@ namespace Barotrauma SoundManager.SetCategoryGainMultiplier("ui", Config.SoundVolume); SoundManager.SetCategoryGainMultiplier("waterambience", Config.SoundVolume); SoundManager.SetCategoryGainMultiplier("music", Config.MusicVolume); - SoundManager.SetCategoryGainMultiplier("voip", Config.VoiceChatVolume * 5.0f); + SoundManager.SetCategoryGainMultiplier("voip", Config.VoiceChatVolume); if (Config.EnableSplashScreen) { var pendingSplashScreens = TitleScreen.PendingSplashScreens; @@ -666,7 +666,7 @@ namespace Barotrauma (NetworkMember == null || !NetworkMember.GameStarted); #if !DEBUG - if (NetworkMember == null && !WindowActive && !paused && true && Screen.Selected != MainMenuScreen && Config.PauseOnFocusLost) + if (NetworkMember == null && !WindowActive && !paused && true && Screen.Selected != MainMenuScreen) { GUI.TogglePauseMenu(); paused = true; @@ -812,19 +812,17 @@ namespace Barotrauma // ToDo: Move texts/links to localization, when possible. public void ShowBugReporter() { - var msgBox = new GUIMessageBox(TextManager.Get("bugreportbutton"), ""); - msgBox.UserData = "bugreporter"; - var linkHolder = new GUILayoutGroup(new RectTransform(new Vector2(1.0f, 1.0f), msgBox.Content.RectTransform)) { Stretch = true, RelativeSpacing = 0.025f }; - linkHolder.RectTransform.MaxSize = new Point(int.MaxValue, linkHolder.Rect.Height); + var msgBox = new GUIMessageBox("", ""); + var linkHolder = new GUILayoutGroup(new RectTransform(new Vector2(1.0f, 0.5f), msgBox.Content.RectTransform)) { Stretch = true, RelativeSpacing = 0.05f }; List> links = new List>() { - new Pair(TextManager.Get("bugreportfeedbackform"),"https://barotraumagame.com/feedback"), - new Pair(TextManager.Get("bugreportgithubform"),"https://github.com/Regalis11/Barotrauma/issues/new?template=bug_report.md") + new Pair("Barotrauma Feedback Form","https://barotraumagame.com/feedback"), + new Pair("Github Issue Form (Needs account)","https://github.com/Regalis11/Barotrauma/issues/new?template=bug_report.md") }; foreach (var link in links) { - new GUIButton(new RectTransform(new Vector2(1.0f, 1.0f), linkHolder.RectTransform), link.First, style: "MainMenuGUIButton", textAlignment: Alignment.Left) + new GUIButton(new RectTransform(new Vector2(1.0f, 0.2f), linkHolder.RectTransform), link.First, style: "MainMenuGUIButton", textAlignment: Alignment.Left) { UserData = link.Second, OnClicked = (btn, userdata) => @@ -835,9 +833,6 @@ namespace Barotrauma } }; } - - msgBox.InnerFrame.RectTransform.MinSize = new Point(0, - msgBox.InnerFrame.Rect.Height + linkHolder.Rect.Height + msgBox.Content.AbsoluteSpacing * 2 + (int)(50 * GUI.Scale)); } static bool waitForKeyHit = true; diff --git a/Barotrauma/BarotraumaClient/Source/GameSettings.cs b/Barotrauma/BarotraumaClient/Source/GameSettings.cs index 1dde7cb03..b96b2f9c5 100644 --- a/Barotrauma/BarotraumaClient/Source/GameSettings.cs +++ b/Barotrauma/BarotraumaClient/Source/GameSettings.cs @@ -85,6 +85,13 @@ namespace Barotrauma TextManager.Get("Settings"), textAlignment: Alignment.TopLeft, font: GUI.LargeFont) { ForceUpperCase = true }; + //TODO: enable when new texts can be added + /*new GUIButton(new RectTransform(new Vector2(1.0f, 0.75f), settingsTitle.RectTransform, Anchor.CenterRight), style: "GUIBugButton") + { + ToolTip = "Bug Reporter", + OnClicked = (btn, userdata) => { GameMain.Instance.ShowBugReporter(); return true; } + };*/ + var generalLayoutGroup = new GUILayoutGroup(new RectTransform(new Vector2(1.0f, 1.0f), leftPanel.RectTransform, Anchor.TopLeft)); new GUITextBlock(new RectTransform(new Vector2(1.0f, 0.05f), generalLayoutGroup.RectTransform), TextManager.Get("ContentPackages")); @@ -171,12 +178,6 @@ namespace Barotrauma }; } - new GUIButton(new RectTransform(new Vector2(0.05f, 0.75f), tabButtonHolder.RectTransform, Anchor.BottomRight) { RelativeOffset = new Vector2(0.0f, 0.2f) }, style: "GUIBugButton") - { - ToolTip = TextManager.Get("bugreportbutton"), - OnClicked = (btn, userdata) => { GameMain.Instance.ShowBugReporter(); return true; } - }; - var buttonArea = new GUIFrame(new RectTransform(new Vector2(1.0f, 0.08f), paddedFrame.RectTransform, Anchor.BottomCenter), style: null); /// Graphics tab -------------------------------------------------------------- @@ -463,6 +464,10 @@ namespace Barotrauma { DebugConsole.NewMessage(name + " " + name.Length.ToString(), Color.Lime); } + deviceList.OnSelected = (GUIComponent selected, object obj) => + { + string name = obj as string; + if (VoiceCaptureDevice == name) { return true; } GUITickBox directionalVoiceChat = new GUITickBox(new RectTransform(new Point(32, 32), audioSliders.RectTransform), TextManager.Get("DirectionalVoiceChat")); directionalVoiceChat.Selected = UseDirectionalVoiceChat; diff --git a/Barotrauma/BarotraumaClient/Source/Items/CharacterInventory.cs b/Barotrauma/BarotraumaClient/Source/Items/CharacterInventory.cs index b79bd9c75..b304ac33e 100644 --- a/Barotrauma/BarotraumaClient/Source/Items/CharacterInventory.cs +++ b/Barotrauma/BarotraumaClient/Source/Items/CharacterInventory.cs @@ -543,10 +543,7 @@ namespace Barotrauma //equipped item that can't be put in the inventory, use delayed dropping if (quickUseAction == QuickUseAction.Drop) { - slots[i].QuickUseButtonToolTip = - TextManager.Get("QuickUseAction.HoldToUnequip", returnNull: true) ?? - (GameMain.Config.Language == "English" ? "Hold to unequip" : TextManager.Get("QuickUseAction.Unequip")); - + slots[i].QuickUseButtonToolTip = "Hold to unequip"; if (PlayerInput.LeftButtonHeld()) { slots[i].QuickUseTimer = Math.Max(0.1f, slots[i].QuickUseTimer + deltaTime); diff --git a/Barotrauma/BarotraumaClient/Source/Items/Components/Machines/Pump.cs b/Barotrauma/BarotraumaClient/Source/Items/Components/Machines/Pump.cs index d588efa0d..55caa8d4b 100644 --- a/Barotrauma/BarotraumaClient/Source/Items/Components/Machines/Pump.cs +++ b/Barotrauma/BarotraumaClient/Source/Items/Components/Machines/Pump.cs @@ -89,7 +89,7 @@ namespace Barotrauma.Items.Components RelativeSpacing = 0.05f }; - var outLabel = new GUITextBlock(new RectTransform(new Vector2(0.3f, 1.0f), sliderArea.RectTransform), + new GUITextBlock(new RectTransform(new Vector2(0.15f, 1.0f), sliderArea.RectTransform), TextManager.Get("PumpOut"), textAlignment: Alignment.Center, wrap: true, font: GUI.SmallFont); pumpSpeedSlider = new GUIScrollBar(new RectTransform(new Vector2(0.8f, 1.0f), sliderArea.RectTransform), barSize: 0.25f, style: "GUISlider") { @@ -109,10 +109,9 @@ namespace Barotrauma.Items.Components return true; } }; - var inLabel = new GUITextBlock(new RectTransform(new Vector2(0.3f, 1.0f), sliderArea.RectTransform), - TextManager.Get("PumpIn"), textAlignment: Alignment.Center, wrap: true, font: GUI.SmallFont); - GUITextBlock.AutoScaleAndNormalize(outLabel, inLabel); + new GUITextBlock(new RectTransform(new Vector2(0.15f, 1.0f), sliderArea.RectTransform), + TextManager.Get("PumpIn"), textAlignment: Alignment.Center, wrap: true, font: GUI.SmallFont); } public override void OnItemLoaded() diff --git a/Barotrauma/BarotraumaClient/Source/Items/Components/Signal/Connection.cs b/Barotrauma/BarotraumaClient/Source/Items/Components/Signal/Connection.cs index d5ab17ccb..bcce5950b 100644 --- a/Barotrauma/BarotraumaClient/Source/Items/Components/Signal/Connection.cs +++ b/Barotrauma/BarotraumaClient/Source/Items/Components/Signal/Connection.cs @@ -143,7 +143,7 @@ namespace Barotrauma.Items.Components private void Draw(SpriteBatch spriteBatch, ConnectionPanel panel, Vector2 position, Vector2 labelPos, Vector2 wirePosition, bool mouseIn, Wire equippedWire, float wireInterval) { //spriteBatch.DrawString(GUI.SmallFont, Name, new Vector2(labelPos.X, labelPos.Y-10), Color.White); - GUI.DrawString(spriteBatch, labelPos, DisplayName, IsPower ? Color.Red : Color.White, Color.Black, 0, GUI.SmallFont); + GUI.DrawString(spriteBatch, labelPos, Name, IsPower ? Color.Red : Color.White, Color.Black, 0, GUI.SmallFont); connectionSprite.Draw(spriteBatch, position); diff --git a/Barotrauma/BarotraumaClient/Source/Map/Structure.cs b/Barotrauma/BarotraumaClient/Source/Map/Structure.cs index 46d973c57..550149d9f 100644 --- a/Barotrauma/BarotraumaClient/Source/Map/Structure.cs +++ b/Barotrauma/BarotraumaClient/Source/Map/Structure.cs @@ -281,8 +281,7 @@ namespace Barotrauma new Vector2(rect.Width, rect.Height), color: color, textureScale: TextureScale * Scale, - startOffset: backGroundOffset, - depth: Math.Max(Prefab.BackgroundSprite.Depth, depth + 0.000001f)); + startOffset: backGroundOffset); if (UseDropShadow) { diff --git a/Barotrauma/BarotraumaClient/Source/Networking/GameClient.cs b/Barotrauma/BarotraumaClient/Source/Networking/GameClient.cs index 9215d7d70..5807af85a 100644 --- a/Barotrauma/BarotraumaClient/Source/Networking/GameClient.cs +++ b/Barotrauma/BarotraumaClient/Source/Networking/GameClient.cs @@ -903,7 +903,7 @@ namespace Barotrauma.Networking connected = false; ConnectToServer(serverIP); } - if (clientID == myID) + else { string msg = ""; if (disconnectReason == DisconnectReason.Unknown) @@ -921,18 +921,8 @@ namespace Barotrauma.Networking msg += TextManager.GetServerMessage(splitMsg[i]); } } - - if (msg == NetConnection.NoResponseMessage) - { - //display a generic "could not connect" popup if the message is Lidgren's "failed to establish connection" - var msgBox = new GUIMessageBox(TextManager.Get("ConnectionFailed"), TextManager.Get(allowReconnect ? "ConnectionLost" : "CouldNotConnectToServer")); - msgBox.Buttons[0].OnClicked += ReturnToServerList; - } - else - { - var msgBox = new GUIMessageBox(TextManager.Get(allowReconnect ? "ConnectionLost" : "CouldNotConnectToServer"), msg); - msgBox.Buttons[0].OnClicked += ReturnToServerList; - } + var msgBox = new GUIMessageBox(TextManager.Get(allowReconnect ? "ConnectionLost" : "CouldNotConnectToServer"), msg); + msgBox.Buttons[0].OnClicked += ReturnToServerList; } } diff --git a/Barotrauma/BarotraumaClient/Source/Screens/ServerListScreen.cs b/Barotrauma/BarotraumaClient/Source/Screens/ServerListScreen.cs index 092e188d8..9e3e7dfca 100644 --- a/Barotrauma/BarotraumaClient/Source/Screens/ServerListScreen.cs +++ b/Barotrauma/BarotraumaClient/Source/Screens/ServerListScreen.cs @@ -31,8 +31,6 @@ namespace Barotrauma private bool masterServerResponded; private IRestResponse masterServerResponse; - private GUIButton refreshButton; - private float[] columnRelativeWidth; //filters @@ -142,7 +140,7 @@ namespace Barotrauma OnClicked = GameMain.MainMenuScreen.ReturnToMainMenu }; - refreshButton = new GUIButton(new RectTransform(new Vector2(buttonContainer.Rect.Height / (float)buttonContainer.Rect.Width, 0.9f), buttonContainer.RectTransform, Anchor.Center), + var refreshButton = new GUIButton(new RectTransform(new Vector2(buttonContainer.Rect.Height / (float)buttonContainer.Rect.Width, 0.9f), buttonContainer.RectTransform, Anchor.Center), "", style: "GUIButtonRefresh") { ToolTip = TextManager.Get("ServerListRefresh"), @@ -222,6 +220,22 @@ namespace Barotrauma return true; } + private bool RefreshJoinButtonState(GUIComponent component, object obj) + { + if (obj == null || waitingForRefresh) return false; + + if (!string.IsNullOrWhiteSpace(clientNameBox.Text) && !string.IsNullOrWhiteSpace(ipBox.Text)) + { + joinButton.Enabled = true; + } + else + { + joinButton.Enabled = false; + } + + return true; + } + private bool SelectServer(GUIComponent component, object obj) { if (obj == null || waitingForRefresh) { return false; } @@ -236,6 +250,16 @@ namespace Barotrauma joinButton.Enabled = false; } + if (!string.IsNullOrWhiteSpace(clientNameBox.Text)) + { + joinButton.Enabled = true; + } + else + { + clientNameBox.Flash(); + joinButton.Enabled = false; + } + ServerInfo serverInfo; try { @@ -260,11 +284,8 @@ namespace Barotrauma ipBox.Text = null; joinButton.Enabled = false; - new GUITextBlock(new RectTransform(new Vector2(1.0f, 1.0f), serverList.Content.RectTransform), - TextManager.Get("RefreshingServerList"), textAlignment: Alignment.Center) - { - CanBeFocused = false - }; + new GUITextBlock(new RectTransform(new Vector2(1.0f, 0.05f), serverList.Content.RectTransform), + TextManager.Get("RefreshingServerList")); CoroutineManager.StartCoroutine(WaitForRefresh()); @@ -285,19 +306,17 @@ namespace Barotrauma if (!SteamManager.GetServers(AddToServerList, UpdateServerInfo, ServerQueryFinished)) { serverList.ClearChildren(); - new GUITextBlock(new RectTransform(new Vector2(1.0f, 1.0f), serverList.Content.RectTransform), - TextManager.Get("ServerListNoSteamConnection"), textAlignment: Alignment.Center) - { - CanBeFocused = false - }; + new GUITextBlock(new RectTransform(new Vector2(1.0f, 0.05f), serverList.Content.RectTransform), + TextManager.Get("ServerListNoSteamConnection")); } } else { CoroutineManager.StartCoroutine(SendMasterServerRequest()); - waitingForRefresh = false; } + waitingForRefresh = false; + refreshDisableTimer = DateTime.Now + AllowedRefreshInterval; yield return CoroutineStatus.Success; @@ -362,11 +381,8 @@ namespace Barotrauma serverList.Content.ClearChildren(); if (serverInfos.Count() == 0) { - new GUITextBlock(new RectTransform(new Vector2(1.0f, 1.0f), serverList.Content.RectTransform), - TextManager.Get("NoServers"), textAlignment: Alignment.Center) - { - CanBeFocused = false - }; + new GUITextBlock(new RectTransform(new Vector2(1.0f, 0.05f), serverList.Content.RectTransform), + TextManager.Get("NoServers")); return; } foreach (ServerInfo serverInfo in serverInfos) @@ -506,7 +522,6 @@ namespace Barotrauma UserData = "noresults" }; } - waitingForRefresh = false; } private IEnumerable SendMasterServerRequest() diff --git a/Barotrauma/BarotraumaClient/Source/Screens/SteamWorkshopScreen.cs b/Barotrauma/BarotraumaClient/Source/Screens/SteamWorkshopScreen.cs index d7b1219b3..704ae4c9d 100644 --- a/Barotrauma/BarotraumaClient/Source/Screens/SteamWorkshopScreen.cs +++ b/Barotrauma/BarotraumaClient/Source/Screens/SteamWorkshopScreen.cs @@ -478,7 +478,7 @@ namespace Barotrauma } else { - var downloadBtn = new GUIButton(new RectTransform(new Point((int)(32 * GUI.Scale)), rightColumn.RectTransform), "+", style: null) + var downloadBtn = new GUIButton(new RectTransform(new Point(32, 32), rightColumn.RectTransform), "+", style: null) { Font = GUI.LargeFont, Color = new Color(38, 65, 86, 255), diff --git a/Barotrauma/BarotraumaShared/Source/Characters/AI/HumanAIController.cs b/Barotrauma/BarotraumaShared/Source/Characters/AI/HumanAIController.cs index 81cb836b6..2ea236421 100644 --- a/Barotrauma/BarotraumaShared/Source/Characters/AI/HumanAIController.cs +++ b/Barotrauma/BarotraumaShared/Source/Characters/AI/HumanAIController.cs @@ -100,6 +100,25 @@ namespace Barotrauma steeringManager = outsideSteering; } + float maxDistanceToSub = 3000; + if (Character.Submarine != null || SelectedAiTarget?.Entity?.Submarine != null && + Vector2.DistanceSquared(Character.WorldPosition, SelectedAiTarget.Entity.Submarine.WorldPosition) < maxDistanceToSub * maxDistanceToSub) + { + if (steeringManager != insideSteering) + { + insideSteering.Reset(); + } + steeringManager = insideSteering; + } + else + { + if (steeringManager != outsideSteering) + { + outsideSteering.Reset(); + } + steeringManager = outsideSteering; + } + AnimController.Crouching = shouldCrouch; CheckCrouching(deltaTime); Character.ClearInputs(); @@ -360,9 +379,6 @@ namespace Barotrauma if (GameMain.GameSession?.CrewManager != null && GameMain.GameSession.CrewManager.AddOrder(newOrder, newOrder.FadeOutTime)) { Character.Speak(newOrder.GetChatMessage("", Character.CurrentHull?.DisplayName, givingOrderToSelf: false), ChatMessageType.Order); -#if SERVER - GameMain.Server.SendOrderChatMessage(new OrderChatMessage(newOrder, "", Character.CurrentHull, null, Character)); -#endif } } } diff --git a/Barotrauma/BarotraumaShared/Source/Characters/AI/Objectives/AIObjectiveGoTo.cs b/Barotrauma/BarotraumaShared/Source/Characters/AI/Objectives/AIObjectiveGoTo.cs index 1a5874252..9d23de7d3 100644 --- a/Barotrauma/BarotraumaShared/Source/Characters/AI/Objectives/AIObjectiveGoTo.cs +++ b/Barotrauma/BarotraumaShared/Source/Characters/AI/Objectives/AIObjectiveGoTo.cs @@ -1,7 +1,6 @@ -using FarseerPhysics; -using Microsoft.Xna.Framework; +using Microsoft.Xna.Framework; using System; -using System.Linq; +using Barotrauma.Extensions; namespace Barotrauma { @@ -46,7 +45,7 @@ namespace Barotrauma { this.Target = target; this.repeat = repeat; - waitUntilPathUnreachable = 2.0f; + waitUntilPathUnreachable = 3.0f; this.getDivingGearIfNeeded = getDivingGearIfNeeded; CalculateCloseEnough(); } @@ -115,9 +114,9 @@ namespace Barotrauma Vector2 currTargetSimPos = Vector2.Zero; currTargetSimPos = Target.SimPosition; // Take the sub position into account in the sim pos - if (character.Submarine == null && Target.Submarine != null) + if (SteeringManager != PathSteering && character.Submarine == null && Target.Submarine != null) { - //currTargetSimPos += Target.Submarine.SimPosition; + currTargetSimPos += Target.Submarine.SimPosition; } else if (character.Submarine != null && Target.Submarine == null) { @@ -132,6 +131,10 @@ namespace Barotrauma } } character.AIController.SteeringManager.SteeringSeek(currTargetSimPos); + if (SteeringManager != PathSteering) + { + SteeringManager.SteeringAvoid(deltaTime, lookAheadDistance: 5, weight: 1, heading: VectorExtensions.Forward(character.AnimController.Collider.Rotation)); + } if (getDivingGearIfNeeded) { bool needsDivingGear = HumanAIController.NeedsDivingGear(targetHull); diff --git a/Barotrauma/BarotraumaShared/Source/Characters/AI/SteeringManager.cs b/Barotrauma/BarotraumaShared/Source/Characters/AI/SteeringManager.cs index 371adce79..3f47266e4 100644 --- a/Barotrauma/BarotraumaShared/Source/Characters/AI/SteeringManager.cs +++ b/Barotrauma/BarotraumaShared/Source/Characters/AI/SteeringManager.cs @@ -45,9 +45,9 @@ namespace Barotrauma steering += DoSteeringWander(weight); } - public void SteeringAvoid(float deltaTime, float lookAheadDistance, float weight = 1) + public void SteeringAvoid(float deltaTime, float lookAheadDistance, float weight = 1, Vector2? heading = null) { - steering += DoSteeringAvoid(deltaTime, lookAheadDistance, weight); + steering += DoSteeringAvoid(deltaTime, lookAheadDistance, weight, heading); } public void SteeringManual(float deltaTime, Vector2 velocity) @@ -129,10 +129,12 @@ namespace Barotrauma return newSteering; } - protected virtual Vector2 DoSteeringAvoid(float deltaTime, float lookAheadDistance, float weight) + protected virtual Vector2 DoSteeringAvoid(float deltaTime, float lookAheadDistance, float weight, Vector2? heading = null) { - if (steering == Vector2.Zero || host.Steering == Vector2.Zero) return Vector2.Zero; - + if (steering == Vector2.Zero || host.Steering == Vector2.Zero) + { + return Vector2.Zero; + } float maxDistance = lookAheadDistance; if (rayCastTimer <= 0.0f) { @@ -158,19 +160,11 @@ namespace Barotrauma { obstaclePosition.X = closestStructure.SimPosition.X; } - avoidObstaclePos = obstaclePosition; - //avoidSteering = Vector2.Normalize(Submarine.LastPickedPosition - obstaclePosition); } - /*else if (closestBody.UserData is Item) - { - avoidSteering = Vector2.Normalize(Submarine.LastPickedPosition - item.SimPosition); - }*/ else { - avoidObstaclePos = Submarine.LastPickedPosition; - //avoidSteering = Vector2.Normalize(host.SimPosition - Submarine.LastPickedPosition); } } } @@ -185,22 +179,26 @@ namespace Barotrauma Vector2 diff = avoidObstaclePos.Value - host.SimPosition; float dist = diff.Length(); - if (!avoidObstaclePos.HasValue) return Vector2.Zero; - - Vector2 diff = avoidObstaclePos.Value - host.SimPosition; - float dist = diff.Length(); - - if (dist > maxDistance) return Vector2.Zero; - - return -diff * (1.0f - dist / maxDistance) * weight; - } - - Vector2 diff = avoidObstaclePos.Value - host.SimPosition; - float dist = diff.Length(); - - if (dist > maxDistance) return Vector2.Zero; - - return -diff * (1.0f - dist / maxDistance) * weight; + if (dist > maxDistance) + { + return Vector2.Zero; + } + if (heading.HasValue) + { + var f = heading ?? host.Steering; + // Avoid to left or right depending on the current heading + Vector2 relativeVector = Vector2.Normalize(diff) - Vector2.Normalize(f); + var dir = relativeVector.X > 0 ? diff.Right() : diff.Left(); + float factor = 1.0f - Math.Min(dist / maxDistance, 1); + return dir * factor * weight; + } + else + { + // Doesn't work right because it effectively just slows down or reverses the movement, where as we'd like to go right or left to avoid the target. + // There's also another issue, which also affects going right or left: the raycast doesn't hit anything if we turn too much -> avoiding doesn't work well. + // Could probably "remember" the avoidance a bit longer so that the avoid steering is not immedieately disgarded, but kept for a while and reduced gradually? + return -diff * (1.0f - dist / maxDistance) * weight; + } } } } diff --git a/Barotrauma/BarotraumaShared/Source/GameSettings.cs b/Barotrauma/BarotraumaShared/Source/GameSettings.cs index 562989979..6316e04d9 100644 --- a/Barotrauma/BarotraumaShared/Source/GameSettings.cs +++ b/Barotrauma/BarotraumaShared/Source/GameSettings.cs @@ -45,7 +45,7 @@ namespace Barotrauma public bool PauseOnFocusLost { get; set; } = true; public bool MuteOnFocusLost { get; set; } - public bool UseDirectionalVoiceChat { get; set; } = true; + public bool UseDirectionalVoiceChat { get; set; } public enum VoiceMode { @@ -206,7 +206,7 @@ namespace Barotrauma { voiceChatVolume = MathHelper.Clamp(value, 0.0f, 1.0f); #if CLIENT - GameMain.SoundManager?.SetCategoryGainMultiplier("voip", voiceChatVolume * 5.0f); + GameMain.SoundManager?.SetCategoryGainMultiplier("voip", voiceChatVolume); #endif } } @@ -415,6 +415,79 @@ namespace Barotrauma } } + #region Load DefaultConfig + private void LoadDefaultConfig(bool setLanguage = true) + { + XDocument doc = XMLExtensions.TryLoadXml(savePath); + + if (setLanguage || string.IsNullOrEmpty(Language)) + { + Language = doc.Root.GetAttributeString("language", "English"); + } + if (doc != null) + { + foreach (XElement subElement in doc.Root.Elements()) + { + if (subElement.Name.ToString().ToLowerInvariant() == "keymapping") + { + LoadKeyBinds(subElement); + } + } + } + } + + public void CheckBindings(bool useDefaults) + { + foreach (InputType inputType in Enum.GetValues(typeof(InputType))) + { + var binding = keyMapping[(int)inputType]; + if (binding == null) + { + switch (inputType) + { + case InputType.Deselect: + if (useDefaults) + { + binding = new KeyOrMouse(1); + } + else + { + // Legacy support + var selectKey = keyMapping[(int)InputType.Select]; + if (selectKey != null && selectKey.Key != Keys.None) + { + binding = new KeyOrMouse(selectKey.Key); + } + } + break; + case InputType.Shoot: + if (useDefaults) + { + binding = new KeyOrMouse(0); + } + else + { + // Legacy support + var useKey = keyMapping[(int)InputType.Use]; + if (useKey != null && useKey.MouseButton.HasValue) + { + binding = new KeyOrMouse(useKey.MouseButton.Value); + } + } + break; + default: + break; + } + if (binding == null) + { + DebugConsole.ThrowError("Key binding for the input type \"" + inputType + " not set!"); + binding = new KeyOrMouse(Keys.D1); + } + keyMapping[(int)inputType] = binding; + } + } + } + #region Load DefaultConfig private void LoadDefaultConfig(bool setLanguage = true) { @@ -483,6 +556,16 @@ namespace Barotrauma QuickStartSubmarineName = doc.Root.GetAttributeString("quickstartsub", ""); + 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 (doc == null) { GraphicsWidth = 1024; diff --git a/Barotrauma/BarotraumaShared/Source/Map/Levels/Level.cs b/Barotrauma/BarotraumaShared/Source/Map/Levels/Level.cs index 68b5ca6df..695b56df0 100644 --- a/Barotrauma/BarotraumaShared/Source/Map/Levels/Level.cs +++ b/Barotrauma/BarotraumaShared/Source/Map/Levels/Level.cs @@ -609,7 +609,8 @@ namespace Barotrauma foreach (InterestingPosition pos in positionsOfInterest) { if (pos.PositionType != PositionType.MainPath || pos.Position.X < 5000 || pos.Position.X > Size.X - 5000) continue; - if (Math.Abs(pos.Position.X - StartPosition.X) < minWidth * 2 || Math.Abs(pos.Position.X - EndPosition.X) < minWidth * 2) continue; + if (Math.Abs(pos.Position.X - StartPosition.X) < 10000) continue; + if (Math.Abs(pos.Position.Y - StartPosition.Y) < 10000) continue; if (GetTooCloseCells(pos.Position.ToVector2(), minWidth * 0.7f).Count > 0) continue; iceChunkPositions.Add(pos.Position); } diff --git a/Barotrauma/BarotraumaShared/Source/Map/Structure.cs b/Barotrauma/BarotraumaShared/Source/Map/Structure.cs index ea5fb139f..b73eb5e65 100644 --- a/Barotrauma/BarotraumaShared/Source/Map/Structure.cs +++ b/Barotrauma/BarotraumaShared/Source/Map/Structure.cs @@ -301,10 +301,6 @@ namespace Barotrauma #endif spriteColor = prefab.SpriteColor; if (sp.IsHorizontal.HasValue) - { - IsHorizontal = sp.IsHorizontal.Value; - } - else if (ResizeHorizontal && !ResizeVertical) { IsHorizontal = true; } @@ -349,7 +345,7 @@ namespace Barotrauma } // Only add ai targets automatically to submarine/outpost walls - if (aiTarget == null && HasBody && Tags.Contains("wall") && submarine != null && !Prefab.NoAITarget) + if (aiTarget == null && HasBody && Tags.Contains("wall") && submarine != null) { aiTarget = new AITarget(this); } diff --git a/Barotrauma/BarotraumaShared/Source/Map/StructurePrefab.cs b/Barotrauma/BarotraumaShared/Source/Map/StructurePrefab.cs index b43be342f..b049e8d8e 100644 --- a/Barotrauma/BarotraumaShared/Source/Map/StructurePrefab.cs +++ b/Barotrauma/BarotraumaShared/Source/Map/StructurePrefab.cs @@ -184,11 +184,6 @@ namespace Barotrauma sp.Tags.Add(tag.Trim().ToLowerInvariant()); } - if (element.Attribute("ishorizontal") != null) - { - sp.IsHorizontal = element.GetAttributeBool("ishorizontal", false); - } - foreach (XElement subElement in element.Elements()) { switch (subElement.Name.ToString())