From a5d605e29b3bdae047baf7844928e0a5d5a8e0c3 Mon Sep 17 00:00:00 2001 From: Regalis Date: Thu, 20 Apr 2017 18:02:20 +0300 Subject: [PATCH] Sub editor doesn't allow creating structures with zero width/height, fixed null exceptions when trying to remove a structure without wall sections --- Subsurface/Source/Map/Structure.cs | 12 ++++++++---- Subsurface/Source/Map/StructurePrefab.cs | 17 ++++++++--------- 2 files changed, 16 insertions(+), 13 deletions(-) diff --git a/Subsurface/Source/Map/Structure.cs b/Subsurface/Source/Map/Structure.cs index 88dd9cd4c..56921ee70 100644 --- a/Subsurface/Source/Map/Structure.cs +++ b/Subsurface/Source/Map/Structure.cs @@ -469,14 +469,18 @@ namespace Barotrauma GameMain.World.RemoveBody(b); } - foreach (WallSection s in sections) + if (sections != null) { - if (s.gap != null) + foreach (WallSection s in sections) { - s.gap.Remove(); - s.gap = null; + if (s.gap != null) + { + s.gap.Remove(); + s.gap = null; + } } } + if (convexHulls != null) convexHulls.ForEach(x => x.Remove()); } diff --git a/Subsurface/Source/Map/StructurePrefab.cs b/Subsurface/Source/Map/StructurePrefab.cs index b99087775..ed551a158 100644 --- a/Subsurface/Source/Map/StructurePrefab.cs +++ b/Subsurface/Source/Map/StructurePrefab.cs @@ -152,11 +152,8 @@ namespace Barotrauma public override void UpdatePlacing(Camera cam) { Vector2 position = Submarine.MouseToWorldGrid(cam, Submarine.MainSub); - //Vector2 placeSize = size; - Rectangle newRect = new Rectangle((int)position.X, (int)position.Y, (int)size.X, (int)size.Y); - - + if (placePosition == Vector2.Zero) { if (PlayerInput.LeftButtonHeld()) @@ -164,8 +161,6 @@ namespace Barotrauma newRect.X = (int)position.X; newRect.Y = (int)position.Y; - - //sprite.Draw(spriteBatch, new Vector2(position.X, -position.Y), placeSize, Color.White); } else { @@ -177,10 +172,14 @@ namespace Barotrauma if (PlayerInput.LeftButtonReleased()) { - newRect.Location -= Submarine.MainSub.Position.ToPoint(); + //don't allow resizing width/height to zero + if ((!resizeHorizontal || placeSize.X != 0.0f) && (!resizeVertical || placeSize.Y != 0.0f)) + { + newRect.Location -= Submarine.MainSub.Position.ToPoint(); - var structure = new Structure(newRect, this, Submarine.MainSub); - structure.Submarine = Submarine.MainSub; + var structure = new Structure(newRect, this, Submarine.MainSub); + structure.Submarine = Submarine.MainSub; + } selected = null; return;