From 1a12f467084f1d2a0bf911e9118c5f940a655df6 Mon Sep 17 00:00:00 2001 From: Joonas Rikkonen Date: Thu, 24 Aug 2017 20:30:10 +0300 Subject: [PATCH] All remaining physics bodies are removed at the end of submarine unloading (freeing debug bodyShapeTextures, etc). -> LevelTrigger bodies don't have to be removed separately during unloading --- .../BarotraumaShared/Source/Map/Submarine.cs | 4 ++-- .../Source/Physics/PhysicsBody.cs | 15 ++++++++++++++- .../BarotraumaShared/Source/Screens/GameScreen.cs | 2 +- 3 files changed, 17 insertions(+), 4 deletions(-) diff --git a/Barotrauma/BarotraumaShared/Source/Map/Submarine.cs b/Barotrauma/BarotraumaShared/Source/Map/Submarine.cs index a379bd8ac..45f7e53f4 100644 --- a/Barotrauma/BarotraumaShared/Source/Map/Submarine.cs +++ b/Barotrauma/BarotraumaShared/Source/Map/Submarine.cs @@ -1153,8 +1153,8 @@ namespace Barotrauma } Item.ItemList.Clear(); } - - PhysicsBody.list.Clear(); + + PhysicsBody.RemoveAll(); Ragdoll.list.Clear(); diff --git a/Barotrauma/BarotraumaShared/Source/Physics/PhysicsBody.cs b/Barotrauma/BarotraumaShared/Source/Physics/PhysicsBody.cs index 1da67195f..79dc90406 100644 --- a/Barotrauma/BarotraumaShared/Source/Physics/PhysicsBody.cs +++ b/Barotrauma/BarotraumaShared/Source/Physics/PhysicsBody.cs @@ -65,7 +65,11 @@ namespace Barotrauma Circle, Rectangle, Capsule }; - public static List list = new List(); + private static List list = new List(); + public static List List + { + get { return list; } + } //the farseer physics body of the item private Body body; @@ -534,6 +538,15 @@ namespace Barotrauma DisposeProjSpecific(); } + public static void RemoveAll() + { + for (int i = list.Count - 1; i >= 0; i--) + { + list[i].Remove(); + } + System.Diagnostics.Debug.Assert(list.Count == 0); + } + partial void DisposeProjSpecific(); } } diff --git a/Barotrauma/BarotraumaShared/Source/Screens/GameScreen.cs b/Barotrauma/BarotraumaShared/Source/Screens/GameScreen.cs index efcf785fd..82f8f582f 100644 --- a/Barotrauma/BarotraumaShared/Source/Screens/GameScreen.cs +++ b/Barotrauma/BarotraumaShared/Source/Screens/GameScreen.cs @@ -113,7 +113,7 @@ namespace Barotrauma sub.SetPrevTransform(sub.Position); } - foreach (PhysicsBody pb in PhysicsBody.list) + foreach (PhysicsBody pb in PhysicsBody.List) { pb.SetPrevTransform(pb.SimPosition, pb.Rotation); }