diff --git a/src/DtsObject.hx b/src/DtsObject.hx index d51100cd..e7965c87 100644 --- a/src/DtsObject.hx +++ b/src/DtsObject.hx @@ -1545,6 +1545,8 @@ class DtsObject extends GameObject { public override function dispose() { super.dispose(); this.level = null; + boundingCollider = null; + colliders = null; this.dtsResource.release(); } } diff --git a/src/Marble.hx b/src/Marble.hx index 771d4f05..d53d5024 100644 --- a/src/Marble.hx +++ b/src/Marble.hx @@ -449,8 +449,7 @@ class Marble extends GameObject { if (isUltra) { this.rollMegaSound = AudioManager.playSound(ResourceLoader.getResource("data/sound/mega_roll.wav", ResourceLoader.getAudio, - this.soundResources), this.getAbsPos().getPosition(), - true); + this.soundResources), this.getAbsPos().getPosition(), true); this.rollMegaSound.volume = 0; } @@ -2123,5 +2122,8 @@ class Marble extends GameObject { if (this.helicopterSound != null) this.helicopterSound.stop(); super.dispose(); + removeChildren(); + camera = null; + collider = null; } } diff --git a/src/MarbleWorld.hx b/src/MarbleWorld.hx index 2b0699e6..1901127b 100644 --- a/src/MarbleWorld.hx +++ b/src/MarbleWorld.hx @@ -1843,8 +1843,9 @@ class MarbleWorld extends Scheduler { if (sky != null) sky.dispose(); - + sky = null; instanceManager = null; + collisionWorld.dispose(); collisionWorld = null; particleManager = null; namedObjects = null; diff --git a/src/collision/CollisionEntity.hx b/src/collision/CollisionEntity.hx index 136704b9..7209bf7e 100644 --- a/src/collision/CollisionEntity.hx +++ b/src/collision/CollisionEntity.hx @@ -71,6 +71,15 @@ class CollisionEntity implements IOctreeObject implements IBVHObject { // this.bvh.build(); } + public function dispose() { + for (s in this.surfaces) + s.dispose(); + go = null; + surfaces = null; + bvh = null; + octree = null; + } + public function setTransform(transform:Matrix) { if (this.transform.equal(transform)) return; diff --git a/src/collision/CollisionSurface.hx b/src/collision/CollisionSurface.hx index 28f24471..e9237988 100644 --- a/src/collision/CollisionSurface.hx +++ b/src/collision/CollisionSurface.hx @@ -151,4 +151,15 @@ class CollisionSurface implements IOctreeObject implements IBVHObject { n: _transformedNormals[p1] }; } + + public function dispose() { + points = null; + normals = null; + indices = null; + _transformedPoints = null; + _transformedNormals = null; + edgeData = null; + edgeConcavities = null; + originalIndices = null; + } } diff --git a/src/collision/CollisionWorld.hx b/src/collision/CollisionWorld.hx index 31923ade..28988fc0 100644 --- a/src/collision/CollisionWorld.hx +++ b/src/collision/CollisionWorld.hx @@ -131,4 +131,18 @@ class CollisionWorld { this.dynamicOctree.update(entity); } } + + public function dispose() { + for (e in entities) { + e.dispose(); + } + for (e in dynamicEntities) { + e.dispose(); + } + octree = null; + entities = null; + dynamicEntities = null; + dynamicOctree = null; + dynamicEntitySet = null; + } }