From 45ba589d962f192aac3eeee838c37df4d8ddfdcd Mon Sep 17 00:00:00 2001 From: Joonas Rikkonen Date: Fri, 3 May 2019 13:41:06 +0300 Subject: [PATCH] (12412e6fd) Determine the steering vector relative to the center of the sub, not the center of the display when clicking on the display --- .../Source/GUI/GUIComponent.cs | 2 + .../Source/GUI/GUIMessageBox.cs | 6 ++ .../BarotraumaClient/Source/GameMain.cs | 18 ++--- .../Source/GameSession/CrewManager.cs | 24 +++++++ .../Items/Components/Machines/Steering.cs | 66 +++++++++---------- .../BarotraumaClient/Source/Map/Hull.cs | 27 ++++++++ .../Source/Characters/AI/EnemyAIController.cs | 2 + .../Source/Characters/Character.cs | 4 ++ 8 files changed, 100 insertions(+), 49 deletions(-) diff --git a/Barotrauma/BarotraumaClient/Source/GUI/GUIComponent.cs b/Barotrauma/BarotraumaClient/Source/GUI/GUIComponent.cs index 5493906af..8d0a7e1b2 100644 --- a/Barotrauma/BarotraumaClient/Source/GUI/GUIComponent.cs +++ b/Barotrauma/BarotraumaClient/Source/GUI/GUIComponent.cs @@ -138,6 +138,8 @@ namespace Barotrauma public bool IgnoreLayoutGroups; + public bool IgnoreLayoutGroups; + public virtual ScalableFont Font { get; diff --git a/Barotrauma/BarotraumaClient/Source/GUI/GUIMessageBox.cs b/Barotrauma/BarotraumaClient/Source/GUI/GUIMessageBox.cs index f9d40494a..de8bc615c 100644 --- a/Barotrauma/BarotraumaClient/Source/GUI/GUIMessageBox.cs +++ b/Barotrauma/BarotraumaClient/Source/GUI/GUIMessageBox.cs @@ -65,6 +65,12 @@ namespace Barotrauma Content = new GUILayoutGroup(new RectTransform(new Vector2(0.9f, 0.85f), InnerFrame.RectTransform, Anchor.Center)) { AbsoluteSpacing = 5 }; Tag = tag; + InnerFrame = new GUIFrame(new RectTransform(new Point(width, height), RectTransform, Anchor.Center) { IsFixedSize = false }, style: null); + GUI.Style.Apply(InnerFrame, "", this); + + Content = new GUILayoutGroup(new RectTransform(new Vector2(0.9f, 0.85f), InnerFrame.RectTransform, Anchor.Center)) { AbsoluteSpacing = 5 }; + Tag = tag; + if (height == 0) { string wrappedText = ToolBox.WrapText(text, Content.Rect.Width, GUI.Font); diff --git a/Barotrauma/BarotraumaClient/Source/GameMain.cs b/Barotrauma/BarotraumaClient/Source/GameMain.cs index f11fcdf8c..6ea5cbce7 100644 --- a/Barotrauma/BarotraumaClient/Source/GameMain.cs +++ b/Barotrauma/BarotraumaClient/Source/GameMain.cs @@ -186,6 +186,10 @@ namespace Barotrauma GUI.KeyboardDispatcher = new EventInput.KeyboardDispatcher(Window); + GUI.KeyboardDispatcher = new EventInput.KeyboardDispatcher(Window); + + + PerformanceCounter = new PerformanceCounter(); PerformanceCounter = new PerformanceCounter(); @@ -786,20 +790,6 @@ namespace Barotrauma Config.SaveNewPlayerConfig(); } - msgBox.Text.RectTransform.MaxSize = new Point(int.MaxValue, msgBox.Text.Rect.Height); - linkHolder.RectTransform.MaxSize = new Point(int.MaxValue, linkHolder.Rect.Height); - msgBox.RectTransform.MinSize = new Point(0, msgBox.Rect.Height + linkHolder.Rect.Height + msgBox.Buttons.First().Rect.Height * 8); - Config.EditorDisclaimerShown = true; - Config.SaveNewPlayerConfig(); - } - - msgBox.Text.RectTransform.MaxSize = new Point(int.MaxValue, msgBox.Text.Rect.Height); - linkHolder.RectTransform.MaxSize = new Point(int.MaxValue, linkHolder.Rect.Height); - msgBox.RectTransform.MinSize = new Point(0, msgBox.Rect.Height + linkHolder.Rect.Height + msgBox.Buttons.First().Rect.Height * 8); - Config.EditorDisclaimerShown = true; - Config.SaveNewPlayerConfig(); - } - // ToDo: Move texts/links to localization, when possible. public void ShowBugReporter() { diff --git a/Barotrauma/BarotraumaClient/Source/GameSession/CrewManager.cs b/Barotrauma/BarotraumaClient/Source/GameSession/CrewManager.cs index ddad8bfd9..01b7c98e9 100644 --- a/Barotrauma/BarotraumaClient/Source/GameSession/CrewManager.cs +++ b/Barotrauma/BarotraumaClient/Source/GameSession/CrewManager.cs @@ -98,6 +98,20 @@ namespace Barotrauma CanBeFocused = false }; + scrollButtonUp = new GUIButton(new RectTransform(scrollButtonSize, crewArea.RectTransform, Anchor.TopLeft, Pivot.TopLeft), "", Alignment.Center, "GUIButtonVerticalArrow") + { + Visible = false, + UserData = -1, + OnClicked = ScrollCharacterList + }; + scrollButtonDown = new GUIButton(new RectTransform(scrollButtonSize, crewArea.RectTransform, Anchor.BottomLeft, Pivot.BottomLeft), "", Alignment.Center, "GUIButtonVerticalArrow") + { + Visible = false, + UserData = 1, + OnClicked = ScrollCharacterList + }; + scrollButtonDown.Children.ForEach(c => c.SpriteEffects = SpriteEffects.FlipVertically); + var characterInfo = new CharacterInfo(subElement); characterInfos.Add(characterInfo); foreach (XElement invElement in subElement.Elements()) @@ -159,6 +173,16 @@ namespace Barotrauma ToggleCrewAreaOpen = GameMain.Config.CrewMenuOpen; } + + #endregion + + #region Character list management + + public Rectangle GetCharacterListArea() + { + return characterListBox.Rect; + } + partial void InitProjectSpecific() { guiFrame = new GUIFrame(new RectTransform(Vector2.One, GUICanvas.Instance), null, Color.Transparent) diff --git a/Barotrauma/BarotraumaClient/Source/Items/Components/Machines/Steering.cs b/Barotrauma/BarotraumaClient/Source/Items/Components/Machines/Steering.cs index d4fc11cbd..f96f11335 100644 --- a/Barotrauma/BarotraumaClient/Source/Items/Components/Machines/Steering.cs +++ b/Barotrauma/BarotraumaClient/Source/Items/Components/Machines/Steering.cs @@ -328,13 +328,21 @@ namespace Barotrauma.Items.Components int width = rect.Width, height = rect.Height; int x = rect.X; int y = rect.Y; - - if (voltage < minVoltage && currPowerConsumption > 0.0f) return; - Rectangle velRect = new Rectangle(x + 20, y + 20, width - 40, height - 40); + //docking interface ---------------------------------------------------- + dockingContainer = new GUIFrame(new RectTransform(new Vector2(0.3f, 0.25f), GuiFrame.RectTransform, Anchor.BottomLeft) + { MinSize = new Point(150, 0), AbsoluteOffset = new Point((int)(viewSize * 0.9f), 0) }, style: null); + var paddedDockingContainer = new GUIFrame(new RectTransform(new Vector2(0.9f, 0.9f), dockingContainer.RectTransform, Anchor.Center), style: null); + + Rectangle velRect = new Rectangle(x + 20, y + 20, width - 40, height - 40); + Vector2 displaySubPos = (-sonar.DisplayOffset * sonar.Zoom) / sonar.Range * sonar.DisplayRadius * sonar.Zoom; + displaySubPos.Y = -displaySubPos.Y; + displaySubPos = displaySubPos.ClampLength(velRect.Width / 2); + displaySubPos = steerArea.Rect.Center.ToVector2() + displaySubPos; + GUI.DrawLine(spriteBatch, - new Vector2(velRect.Center.X, velRect.Center.Y), - new Vector2(velRect.Center.X + currVelocity.X, velRect.Center.Y - currVelocity.Y), + displaySubPos, + new Vector2(displaySubPos.X + currVelocity.X, displaySubPos.Y - currVelocity.Y), Color.Gray); if (!AutoPilot) @@ -344,17 +352,10 @@ namespace Barotrauma.Items.Components Vector2 steeringInputPos = new Vector2( steeringInput.X * (float)Math.Sqrt(1.0f - 0.5f * unitSteeringInput.Y * unitSteeringInput.Y), -steeringInput.Y * (float)Math.Sqrt(1.0f - 0.5f * unitSteeringInput.X * unitSteeringInput.X)); - steeringInputPos.X += velRect.Center.X; - steeringInputPos.Y += velRect.Center.Y; - - GUI.DrawLine(spriteBatch, - new Vector2(velRect.Center.X, velRect.Center.Y), - steeringInputPos, - Color.LightGray); + steeringInputPos += displaySubPos; + GUI.DrawLine(spriteBatch, displaySubPos, steeringInputPos, Color.LightGray); GUI.DrawRectangle(spriteBatch, new Rectangle((int)steeringInputPos.X - 5, (int)steeringInputPos.Y - 5, 10, 10), Color.White); - - //if (keyboardInput.Length() > 0 || Vector2.Distance(PlayerInput.MousePosition, new Vector2(velRect.Center.X, velRect.Center.Y)) < 200.0f) if (velRect.Contains(PlayerInput.MousePosition)) { GUI.DrawRectangle(spriteBatch, new Rectangle((int)steeringInputPos.X - 10, (int)steeringInputPos.Y - 10, 20, 20), Color.Red); @@ -384,12 +385,7 @@ namespace Barotrauma.Items.Components GUI.DrawRectangle(spriteBatch, new Rectangle((int)neutralPos.X - 5, (int)neutralPos.Y - 5, 10, 10), Color.Orange); } } - - Vector2 displaySubPos = ((posToMaintain.Value - sonar.DisplayOffset * sonar.Zoom - controlledSub.WorldPosition)) / sonar.Range * sonar.DisplayRadius * sonar.Zoom; - displaySubPos.Y = -displaySubPos.Y; - displaySubPos = displaySubPos.ClampLength(velRect.Width / 2); - displaySubPos = velRect.Center.ToVector2() + displaySubPos; - + //map velocity from rectangle to circle Vector2 unitTargetVel = targetVelocity / 100.0f; Vector2 steeringPos = new Vector2( @@ -397,6 +393,15 @@ namespace Barotrauma.Items.Components -targetVelocity.Y * 0.9f * (float)Math.Sqrt(1.0f - 0.5f * unitTargetVel.X * unitTargetVel.X)); steeringPos += displaySubPos; + public void DrawHUD(SpriteBatch spriteBatch, Rectangle rect) + { + int width = rect.Width, height = rect.Height; + int x = rect.X; + int y = rect.Y; + + if (voltage < minVoltage && currPowerConsumption > 0.0f) return; + + Rectangle velRect = new Rectangle(x + 20, y + 20, width - 40, height - 40); GUI.DrawLine(spriteBatch, displaySubPos, steeringPos, @@ -457,7 +462,6 @@ namespace Barotrauma.Items.Components Color.Lerp(Color.Green, Color.Orange, obstacle.Dot), width: 2); } } - } public override void UpdateHUD(Character character, float deltaTime, Camera cam) { @@ -516,21 +520,13 @@ namespace Barotrauma.Items.Components if (Vector2.Distance(PlayerInput.MousePosition, steerArea.Rect.Center.ToVector2()) < steerArea.Rect.Width / 2) { - tipContainer.Visible = true; - tipContainer.Text = noPowerTip; - return; - } + if (PlayerInput.LeftButtonHeld()) + { + Vector2 displaySubPos = (-sonar.DisplayOffset * sonar.Zoom) / sonar.Range * sonar.DisplayRadius * sonar.Zoom; + displaySubPos.Y = -displaySubPos.Y; + displaySubPos = steerArea.Rect.Center.ToVector2() + displaySubPos; - tipContainer.Visible = AutoPilot; - if (AutoPilot) - { - if (maintainPos) - { - tipContainer.Text = autoPilotMaintainPosTip; - } - else if (LevelStartSelected) - { - Vector2 inputPos = PlayerInput.MousePosition - steerArea.Rect.Center.ToVector2(); + Vector2 inputPos = PlayerInput.MousePosition - displaySubPos; inputPos.Y = -inputPos.Y; if (AutoPilot && !LevelStartSelected && !LevelEndSelected) { diff --git a/Barotrauma/BarotraumaClient/Source/Map/Hull.cs b/Barotrauma/BarotraumaClient/Source/Map/Hull.cs index 6f9edce00..0f5c15c60 100644 --- a/Barotrauma/BarotraumaClient/Source/Map/Hull.cs +++ b/Barotrauma/BarotraumaClient/Source/Map/Hull.cs @@ -434,6 +434,33 @@ namespace Barotrauma Color.Green, width: 2); } } + + foreach (MapEntity e in linkedTo) + { + if (e is Hull) + { + Hull linkedHull = (Hull)e; + Rectangle connectedHullRect = e.Submarine == null ? + linkedHull.rect : + new Rectangle( + (int)(Submarine.DrawPosition.X + linkedHull.WorldPosition.X), + (int)(Submarine.DrawPosition.Y + linkedHull.WorldPosition.Y), + linkedHull.WorldRect.Width, linkedHull.WorldRect.Height); + + //center of the hull + Rectangle currentHullRect = Submarine == null ? + WorldRect : + new Rectangle( + (int)(Submarine.DrawPosition.X + WorldPosition.X), + (int)(Submarine.DrawPosition.Y + WorldPosition.Y), + WorldRect.Width, WorldRect.Height); + + GUI.DrawLine(spriteBatch, + new Vector2(currentHullRect.X, -currentHullRect.Y), + new Vector2(connectedHullRect.X, -connectedHullRect.Y), + Color.Green, width: 2); + } + } } public static void UpdateVertices(GraphicsDevice graphicsDevice, Camera cam, WaterRenderer renderer) diff --git a/Barotrauma/BarotraumaShared/Source/Characters/AI/EnemyAIController.cs b/Barotrauma/BarotraumaShared/Source/Characters/AI/EnemyAIController.cs index 96171b218..232f2d24f 100644 --- a/Barotrauma/BarotraumaShared/Source/Characters/AI/EnemyAIController.cs +++ b/Barotrauma/BarotraumaShared/Source/Characters/AI/EnemyAIController.cs @@ -1055,6 +1055,8 @@ namespace Barotrauma private bool IsProperlyLatchedOnSub => LatchOntoAI != null && LatchOntoAI.IsAttachedToSub && SelectedAiTarget?.Entity == wallTarget?.Structure; + private bool IsProperlyLatchedOnSub => LatchOntoAI != null && LatchOntoAI.IsAttachedToSub && SelectedAiTarget?.Entity == wallTarget?.Structure; + //goes through all the AItargets, evaluates how preferable it is to attack the target, //whether the Character can see/hear the target and chooses the most preferable target within //sight/hearing range diff --git a/Barotrauma/BarotraumaShared/Source/Characters/Character.cs b/Barotrauma/BarotraumaShared/Source/Characters/Character.cs index 509314699..9004982fc 100644 --- a/Barotrauma/BarotraumaShared/Source/Characters/Character.cs +++ b/Barotrauma/BarotraumaShared/Source/Characters/Character.cs @@ -2567,6 +2567,10 @@ namespace Barotrauma GameMain.GameSession?.CrewManager?.RemoveCharacter(this); #endif +#if CLIENT + GameMain.GameSession?.CrewManager?.RemoveCharacter(this); +#endif + #if CLIENT GameMain.GameSession?.CrewManager?.RemoveCharacter(this); #endif