From b8c3b9c29f0cf03f6d3f5f213c3d99f8a7c481c4 Mon Sep 17 00:00:00 2001 From: Regalis Date: Fri, 24 Feb 2017 00:01:46 +0200 Subject: [PATCH] - sub editor shows a warning upon saving if there are entities way outside the sub - warnings are shown in a GUIMessageBox instead of the debug console - added a submarine indicator to the editor --- Subsurface/Source/Map/Submarine.cs | 39 +++++++++++++++++++--- Subsurface/Source/Screens/EditMapScreen.cs | 13 +++++--- Subsurface/Source/Screens/GameScreen.cs | 21 ------------ Subsurface/Source/Screens/Screen.cs | 20 +++++++++++ 4 files changed, 62 insertions(+), 31 deletions(-) diff --git a/Subsurface/Source/Map/Submarine.cs b/Subsurface/Source/Map/Submarine.cs index 32cee36b5..e3be7b567 100644 --- a/Subsurface/Source/Map/Submarine.cs +++ b/Subsurface/Source/Map/Submarine.cs @@ -938,9 +938,11 @@ namespace Barotrauma public void CheckForErrors() { + string errorMsg = ""; + if (!Hull.hullList.Any()) { - DebugConsole.ThrowError("No hulls found in the submarine. Hulls determine the \"borders\" of an individual room and are required for water and air distribution to work correctly."); + errorMsg = "No hulls found in the submarine. Hulls determine the \"borders\" of an individual room and are required for water and air distribution to work correctly."; } foreach (Item item in Item.ItemList) @@ -949,19 +951,46 @@ namespace Barotrauma if (!item.linkedTo.Any()) { - DebugConsole.ThrowError("The submarine contains vents which haven't been linked to an oxygen generator. Select a vent and click an oxygen generator while holding space to link them."); + errorMsg += "\nThe submarine contains vents which haven't been linked to an oxygen generator. Select a vent and click an oxygen generator while holding space to link them."; } } if (WayPoint.WayPointList.Find(wp => !wp.MoveWithLevel && wp.SpawnType == SpawnType.Path) == null) { - DebugConsole.ThrowError("No waypoints found in the submarine. AI controlled crew members won't be able to navigate without waypoints."); + errorMsg += "\nNo waypoints found in the submarine. AI controlled crew members won't be able to navigate without waypoints."; } if (WayPoint.WayPointList.Find(wp => wp.SpawnType == SpawnType.Cargo) == null) { - DebugConsole.ThrowError("The submarine doesn't have spawnpoints for cargo (which are used for determining where to place bought items). " - +"To fix this, create a new spawnpoint and change its \"spawn type\" parameter to \"cargo\"."); + errorMsg += "\nThe submarine doesn't have spawnpoints for cargo (which are used for determining where to place bought items). " + +"To fix this, create a new spawnpoint and change its \"spawn type\" parameter to \"cargo\"."; + } + + if (!string.IsNullOrWhiteSpace(errorMsg)) + { + new GUIMessageBox("Warning", errorMsg); + } + + foreach (MapEntity e in MapEntity.mapEntityList) + { + if (Vector2.Distance(e.Position, HiddenSubPosition) > 20000) + { + var msgBox = new GUIMessageBox( + "Warning", + "One or more structures have been placed very far from the submarine. Show the structures?", + new string[] {"Yes", "No"}); + + msgBox.Buttons[0].OnClicked += (btn, obj) => + { + GameMain.EditMapScreen.Cam.Position = e.WorldPosition; + return true; + }; + msgBox.Buttons[0].OnClicked += msgBox.Close; + msgBox.Buttons[1].OnClicked += msgBox.Close; + + break; + + } } } diff --git a/Subsurface/Source/Screens/EditMapScreen.cs b/Subsurface/Source/Screens/EditMapScreen.cs index 86176a7a3..6929e2ae7 100644 --- a/Subsurface/Source/Screens/EditMapScreen.cs +++ b/Subsurface/Source/Screens/EditMapScreen.cs @@ -309,9 +309,8 @@ namespace Barotrauma } else { - cam.Position = Submarine.HiddenSubStartPosition; - Submarine.MainSub = new Submarine(Path.Combine(Submarine.SavePath, "Unnamed.sub"), "", false); + cam.Position = Submarine.MainSub.Position; } SoundPlayer.OverrideMusicType = "none"; @@ -588,8 +587,7 @@ namespace Barotrauma Submarine.MainSub = selectedSub; selectedSub.Load(true); - //nameBox.Text = selectedSub.Name; - //descriptionBox.Text = ToolBox.LimitString(selectedSub.Description,15); + cam.Position = Submarine.MainSub.Position + Submarine.MainSub.HiddenSubPosition; loadFrame = null; @@ -1064,7 +1062,7 @@ namespace Barotrauma graphics.Clear(new Color(0.051f, 0.149f, 0.271f, 1.0f)); if (GameMain.DebugDraw) { - GUI.DrawLine(spriteBatch, new Vector2(0.0f, -cam.WorldView.Y), new Vector2(0.0f, -(cam.WorldView.Y - cam.WorldView.Height)), Color.White*0.5f, 1.0f, (int)(2.0f/cam.Zoom)); + GUI.DrawLine(spriteBatch, new Vector2(Submarine.MainSub.HiddenSubPosition.X, -cam.WorldView.Y), new Vector2(Submarine.MainSub.HiddenSubPosition.X, -(cam.WorldView.Y - cam.WorldView.Height)), Color.White * 0.5f, 1.0f, (int)(2.0f / cam.Zoom)); GUI.DrawLine(spriteBatch, new Vector2(cam.WorldView.X, -Submarine.MainSub.HiddenSubPosition.Y), new Vector2(cam.WorldView.Right, -Submarine.MainSub.HiddenSubPosition.Y), Color.White * 0.5f, 1.0f, (int)(2.0f / cam.Zoom)); } @@ -1084,6 +1082,11 @@ namespace Barotrauma spriteBatch.Begin(); + if (Submarine.MainSub != null) + { + DrawSubmarineIndicator(spriteBatch, Submarine.MainSub, Color.LightBlue * 0.5f); + } + leftPanel.Draw(spriteBatch); topPanel.Draw(spriteBatch); diff --git a/Subsurface/Source/Screens/GameScreen.cs b/Subsurface/Source/Screens/GameScreen.cs index 1493dd02b..d6685f0ab 100644 --- a/Subsurface/Source/Screens/GameScreen.cs +++ b/Subsurface/Source/Screens/GameScreen.cs @@ -445,26 +445,5 @@ namespace Barotrauma } } - - private void DrawSubmarineIndicator(SpriteBatch spriteBatch, Submarine submarine, Color color) - { - Vector2 subDiff = submarine.WorldPosition - cam.WorldViewCenter; - - if (Math.Abs(subDiff.X) > cam.WorldView.Width || Math.Abs(subDiff.Y) > cam.WorldView.Height) - { - Vector2 normalizedSubDiff = Vector2.Normalize(subDiff); - - Vector2 iconPos = - cam.WorldToScreen(cam.WorldViewCenter) + - new Vector2(normalizedSubDiff.X * GameMain.GraphicsWidth * 0.4f, -normalizedSubDiff.Y * GameMain.GraphicsHeight * 0.4f); - - GUI.SubmarineIcon.Draw(spriteBatch, iconPos, color); - - Vector2 arrowOffset = normalizedSubDiff * GUI.SubmarineIcon.size.X * 0.7f; - arrowOffset.Y = -arrowOffset.Y; - GUI.Arrow.Draw(spriteBatch, iconPos + arrowOffset, color, MathUtils.VectorToAngle(arrowOffset) + MathHelper.PiOver2); - } - } - } } diff --git a/Subsurface/Source/Screens/Screen.cs b/Subsurface/Source/Screens/Screen.cs index a57a06007..56dfa3421 100644 --- a/Subsurface/Source/Screens/Screen.cs +++ b/Subsurface/Source/Screens/Screen.cs @@ -75,5 +75,25 @@ namespace Barotrauma yield return CoroutineStatus.Success; } + protected void DrawSubmarineIndicator(SpriteBatch spriteBatch, Submarine submarine, Color color) + { + Vector2 subDiff = submarine.WorldPosition - Cam.WorldViewCenter; + + if (Math.Abs(subDiff.X) > Cam.WorldView.Width || Math.Abs(subDiff.Y) > Cam.WorldView.Height) + { + Vector2 normalizedSubDiff = Vector2.Normalize(subDiff); + + Vector2 iconPos = + Cam.WorldToScreen(Cam.WorldViewCenter) + + new Vector2(normalizedSubDiff.X * GameMain.GraphicsWidth * 0.4f, -normalizedSubDiff.Y * GameMain.GraphicsHeight * 0.4f); + + GUI.SubmarineIcon.Draw(spriteBatch, iconPos, color); + + Vector2 arrowOffset = normalizedSubDiff * GUI.SubmarineIcon.size.X * 0.7f; + arrowOffset.Y = -arrowOffset.Y; + GUI.Arrow.Draw(spriteBatch, iconPos + arrowOffset, color, MathUtils.VectorToAngle(arrowOffset) + MathHelper.PiOver2); + } + } + } }