From 9f55da3677c385cf7073ecc57b557892eb8b3fea Mon Sep 17 00:00:00 2001 From: Joonas Rikkonen Date: Wed, 10 Apr 2019 15:13:25 +0300 Subject: [PATCH] (8d282f4cc) Hide the crew area and the chat box when using a controller (= aiming with a turret or similar item). --- .../BarotraumaClient/Source/GUI/ChatBox.cs | 27 ++++++--- .../Source/GameSession/CrewManager.cs | 55 +++++++++++-------- .../Items/Components/Machines/Controller.cs | 54 ++++++++++++++++++ .../Items/Components/Machines/Controller.cs | 4 ++ 4 files changed, 107 insertions(+), 33 deletions(-) diff --git a/Barotrauma/BarotraumaClient/Source/GUI/ChatBox.cs b/Barotrauma/BarotraumaClient/Source/GUI/ChatBox.cs index 64fecb33b..26afe00a0 100644 --- a/Barotrauma/BarotraumaClient/Source/GUI/ChatBox.cs +++ b/Barotrauma/BarotraumaClient/Source/GUI/ChatBox.cs @@ -26,7 +26,21 @@ namespace Barotrauma private bool isSinglePlayer; public bool IsSinglePlayer => isSinglePlayer; - private bool toggleOpen = true; + private bool _toggleOpen = true; + public bool ToggleOpen + { + get { return _toggleOpen; } + set + { + if (_toggleOpen == value) { return; } + _toggleOpen = value; + foreach (GUIComponent child in ToggleButton.Children) + { + child.SpriteEffects = _toggleOpen == (HUDLayoutSettings.ChatBoxAlignment == Alignment.Right) ? + SpriteEffects.FlipHorizontally : SpriteEffects.None; + } + } + } private float openState; private float prevUIScale; @@ -81,12 +95,7 @@ namespace Barotrauma toggleButton.OnClicked += (GUIButton btn, object userdata) => { - toggleOpen = !toggleOpen; - foreach (GUIComponent child in btn.Children) - { - child.SpriteEffects = toggleOpen == (HUDLayoutSettings.ChatBoxAlignment == Alignment.Right) ? - SpriteEffects.FlipHorizontally : SpriteEffects.None; - } + ToggleOpen = !ToggleOpen; return true; }; @@ -228,7 +237,7 @@ namespace Barotrauma chatBox.UpdateScrollBarSize(); - if (!toggleOpen) + if (!ToggleOpen) { var popupMsg = new GUIFrame(new RectTransform(Vector2.One, guiFrame.RectTransform), style: "GUIToolTip") { @@ -315,7 +324,7 @@ namespace Barotrauma - if (toggleOpen || (inputBox != null && inputBox.Selected)) + if (ToggleOpen || (inputBox != null && inputBox.Selected)) { openState += deltaTime * 5.0f; //delete all popup messages when the chatbox is open diff --git a/Barotrauma/BarotraumaClient/Source/GameSession/CrewManager.cs b/Barotrauma/BarotraumaClient/Source/GameSession/CrewManager.cs index 32af88417..32eea4f1d 100644 --- a/Barotrauma/BarotraumaClient/Source/GameSession/CrewManager.cs +++ b/Barotrauma/BarotraumaClient/Source/GameSession/CrewManager.cs @@ -41,7 +41,10 @@ namespace Barotrauma private bool toggleCrewAreaOpen = true; private int characterInfoWidth; - private ChatBox chatBox; + /// + /// Present only in single player games. In multiplayer. The chatbox is found from GameSession.Client. + /// + public ChatBox ChatBox { get; private set; } private float prevUIScale; @@ -50,7 +53,15 @@ namespace Barotrauma public bool ToggleCrewAreaOpen { get { return toggleCrewAreaOpen; } - set { toggleCrewAreaOpen = value; } + set + { + if (toggleCrewAreaOpen == value) { return; } + toggleCrewAreaOpen = value; + foreach (GUIComponent child in toggleCrewButton.Children) + { + child.SpriteEffects = toggleCrewAreaOpen ? SpriteEffects.None : SpriteEffects.FlipHorizontally; + } + } } #endregion @@ -93,11 +104,7 @@ namespace Barotrauma "", style: "UIToggleButton"); toggleCrewButton.OnClicked += (GUIButton btn, object userdata) => { - toggleCrewAreaOpen = !toggleCrewAreaOpen; - foreach (GUIComponent child in btn.Children) - { - child.SpriteEffects = toggleCrewAreaOpen ? SpriteEffects.None : SpriteEffects.FlipHorizontally; - } + ToggleCrewAreaOpen = !ToggleCrewAreaOpen; return true; }; @@ -125,7 +132,7 @@ namespace Barotrauma if (isSinglePlayer) { - chatBox = new ChatBox(guiFrame, isSinglePlayer: true) + ChatBox = new ChatBox(guiFrame, isSinglePlayer: true) { OnEnterMessage = (textbox, text) => { @@ -158,7 +165,7 @@ namespace Barotrauma } }; - chatBox.InputBox.OnTextChanged += chatBox.TypingChatMessage; + ChatBox.InputBox.OnTextChanged += ChatBox.TypingChatMessage; } var reports = Order.PrefabList.FindAll(o => o.TargetAllCharacters && o.SymbolSprite != null); @@ -646,7 +653,7 @@ namespace Barotrauma } if (string.IsNullOrEmpty(text)) { return; } - chatBox.AddMessage(ChatMessage.Create(senderName, text, messageType, sender)); + ChatBox.AddMessage(ChatMessage.Create(senderName, text, messageType, sender)); } private WifiComponent GetHeadset(Character character, bool requireEquipped) @@ -1056,24 +1063,24 @@ namespace Barotrauma } if (GUI.DisableHUD || GUI.DisableUpperHUD) return; - if (chatBox != null) + if (ChatBox != null) { - chatBox.Update(deltaTime); - chatBox.InputBox.Visible = Character.Controlled != null; + ChatBox.Update(deltaTime); + ChatBox.InputBox.Visible = Character.Controlled != null; - if (!DebugConsole.IsOpen && chatBox.InputBox.Visible) + if (!DebugConsole.IsOpen && ChatBox.InputBox.Visible) { - if (PlayerInput.KeyHit(InputType.Chat) && !chatBox.InputBox.Selected) + if (PlayerInput.KeyHit(InputType.Chat) && !ChatBox.InputBox.Selected) { - chatBox.GUIFrame.Flash(Color.DarkGreen, 0.5f); - chatBox.InputBox.Select(); + ChatBox.GUIFrame.Flash(Color.DarkGreen, 0.5f); + ChatBox.InputBox.Select(); } - if (PlayerInput.KeyHit(InputType.RadioChat) && !chatBox.InputBox.Selected) + if (PlayerInput.KeyHit(InputType.RadioChat) && !ChatBox.InputBox.Selected) { - chatBox.GUIFrame.Flash(Color.YellowGreen, 0.5f); - chatBox.InputBox.Select(); - chatBox.InputBox.Text = "r; "; + ChatBox.GUIFrame.Flash(Color.YellowGreen, 0.5f); + ChatBox.InputBox.Select(); + ChatBox.InputBox.Text = "r; "; } } } @@ -1143,7 +1150,7 @@ namespace Barotrauma crewArea.RectTransform.AbsoluteOffset = Vector2.SmoothStep(new Vector2(-crewArea.Rect.Width, 0), new Vector2(toggleCrewButton.Rect.Width, 0), crewAreaOpenState).ToPoint(); - crewAreaOpenState = toggleCrewAreaOpen ? + crewAreaOpenState = ToggleCrewAreaOpen ? Math.Min(crewAreaOpenState + deltaTime * 2.0f, 1.0f) : Math.Max(crewAreaOpenState - deltaTime * 2.0f, 0.0f); @@ -1156,7 +1163,7 @@ namespace Barotrauma { Character.Controlled.SelectedConstruction = null; } - toggleCrewAreaOpen = !toggleCrewAreaOpen; + ToggleCrewAreaOpen = !ToggleCrewAreaOpen; } UpdateReports(deltaTime); @@ -1284,7 +1291,7 @@ namespace Barotrauma { reportButtonFrame.Visible = true; - var reportButtonParent = chatBox ?? GameMain.Client.ChatBox; + var reportButtonParent = ChatBox ?? GameMain.Client.ChatBox; reportButtonFrame.RectTransform.AbsoluteOffset = new Point( Math.Min(reportButtonParent.GUIFrame.Rect.X, reportButtonParent.ToggleButton.Rect.X) - reportButtonFrame.Rect.Width - (int)(10 * GUI.Scale), reportButtonParent.GUIFrame.Rect.Y); diff --git a/Barotrauma/BarotraumaClient/Source/Items/Components/Machines/Controller.cs b/Barotrauma/BarotraumaClient/Source/Items/Components/Machines/Controller.cs index f4cb9447f..ce430e5ee 100644 --- a/Barotrauma/BarotraumaClient/Source/Items/Components/Machines/Controller.cs +++ b/Barotrauma/BarotraumaClient/Source/Items/Components/Machines/Controller.cs @@ -14,5 +14,59 @@ namespace Barotrauma.Items.Components } } } + + private bool crewAreaOriginalState; + private bool chatBoxOriginalState; + private bool isHUDsHidden; + + partial void HideHUDs(bool value) + { + if (isHUDsHidden == value) { return; } + if (value == true) + { + ToggleCrewArea(false, storeOriginalState: true); + ToggleChatBox(false, storeOriginalState: true); + } + else + { + ToggleCrewArea(crewAreaOriginalState, storeOriginalState: false); + ToggleChatBox(chatBoxOriginalState, storeOriginalState: false); + } + isHUDsHidden = value; + } + + private void ToggleCrewArea(bool value, bool storeOriginalState) + { + var crewManager = GameMain.GameSession.CrewManager; + if (storeOriginalState) + { + crewAreaOriginalState = crewManager.ToggleCrewAreaOpen; + } + crewManager.ToggleCrewAreaOpen = value; + } + + private void ToggleChatBox(bool value, bool storeOriginalState) + { + var crewManager = GameMain.GameSession.CrewManager; + if (crewManager.IsSinglePlayer) + { + if (crewManager.ChatBox != null) + { + if (storeOriginalState) + { + chatBoxOriginalState = crewManager.ChatBox.ToggleOpen; + } + crewManager.ChatBox.ToggleOpen = value; + } + } + else if (GameMain.Client != null) + { + if (storeOriginalState) + { + chatBoxOriginalState = GameMain.Client.ChatBox.ToggleOpen; + } + GameMain.Client.ChatBox.ToggleOpen = value; + } + } } } diff --git a/Barotrauma/BarotraumaShared/Source/Items/Components/Machines/Controller.cs b/Barotrauma/BarotraumaShared/Source/Items/Components/Machines/Controller.cs index 9aab03135..3d3565acd 100644 --- a/Barotrauma/BarotraumaShared/Source/Items/Components/Machines/Controller.cs +++ b/Barotrauma/BarotraumaShared/Source/Items/Components/Machines/Controller.cs @@ -206,6 +206,7 @@ namespace Barotrauma.Items.Components cam.OffsetAmount = MathHelper.Lerp(cam.OffsetAmount, (focusTarget as Item).Prefab.OffsetOnSelected, deltaTime * 10.0f); } + HideHUDs(true); #endif if (!character.IsRemotePlayer || character.ViewTarget == focusTarget) @@ -273,6 +274,7 @@ namespace Barotrauma.Items.Components if (character.SelectedConstruction == this.item) character.SelectedConstruction = null; character.AnimController.Anim = AnimController.Animation.None; + HideHUDs(false); } public override bool Select(Character activator) @@ -338,5 +340,7 @@ namespace Barotrauma.Items.Components limbPositions[i] = new LimbPos(limbPositions[i].limbType, flippedPos); } } + + partial void HideHUDs(bool value); } }