فهرست منبع

minor dispose (not absolutely necessary but ease detection of mem leaks)

Nicolas Cannasse 4 سال پیش
والد
کامیت
b18a50f027
5فایلهای تغییر یافته به همراه20 افزوده شده و 0 حذف شده
  1. 7 0
      hide/comp/IconTree.hx
  2. 3 0
      hide/comp/Scene.hx
  3. 6 0
      hide/comp/SceneEditor.hx
  4. 2 0
      hide/view/Prefab.hx
  5. 2 0
      hide/view/l3d/Level3D.hx

+ 7 - 0
hide/comp/IconTree.hx

@@ -204,6 +204,13 @@ class IconTree<T:{}> extends Component {
 		});
 		});
 	}
 	}
 
 
+	public function dispose() {
+		(element:Dynamic).jstree("detroy");
+		element.remove();
+		for( f in Reflect.fields(this) )
+			try Reflect.deleteField(this,f) catch(e:Dynamic) {}
+	}
+
 	function getRev( o : T ) {
 	function getRev( o : T ) {
 		if( Std.is(o, String) )
 		if( Std.is(o, String) )
 			return revMapString.get(cast o);
 			return revMapString.get(cast o);

+ 3 - 0
hide/comp/Scene.hx

@@ -97,6 +97,9 @@ class Scene extends Component implements h3d.IDrawable {
 			c();
 			c();
 		cleanup = [];
 		cleanup = [];
 		engine.dispose();
 		engine.dispose();
+		@:privateAccess engine.driver = null;
+		untyped canvas.__scene = null;
+		canvas = null;
 	}
 	}
 
 
 	public function addListener(f) {
 	public function addListener(f) {

+ 6 - 0
hide/comp/SceneEditor.hx

@@ -266,6 +266,12 @@ class SceneEditor {
 		}
 		}
 	}
 	}
 
 
+	public function dispose() {
+		scene.dispose();
+		tree.dispose();
+		favTree.dispose();
+	}
+
 	function set_camera2D(b) {
 	function set_camera2D(b) {
 		if( cameraController != null ) cameraController.visible = !b;
 		if( cameraController != null ) cameraController.visible = !b;
 		if( cameraController2D != null ) cameraController2D.visible = b;
 		if( cameraController2D != null ) cameraController2D.visible = b;

+ 2 - 0
hide/view/Prefab.hx

@@ -56,6 +56,8 @@ class Prefab extends FileView {
 	}
 	}
 
 
 	override function onDisplay() {
 	override function onDisplay() {
+		if( sceneEditor != null ) sceneEditor.dispose();
+
 		data = new hrt.prefab.Library();
 		data = new hrt.prefab.Library();
 		var content = sys.io.File.getContent(getPath());
 		var content = sys.io.File.getContent(getPath());
 		data.loadData(haxe.Json.parse(content));
 		data.loadData(haxe.Json.parse(content));

+ 2 - 0
hide/view/l3d/Level3D.hx

@@ -259,6 +259,8 @@ class Level3D extends FileView {
 	function get_properties() return sceneEditor.properties;
 	function get_properties() return sceneEditor.properties;
 
 
 	override function onDisplay() {
 	override function onDisplay() {
+		if( sceneEditor != null ) sceneEditor.dispose();
+
 		data = cast(hrt.prefab.Library.create("l3d"), hrt.prefab.l3d.Level3D);
 		data = cast(hrt.prefab.Library.create("l3d"), hrt.prefab.l3d.Level3D);
 		var content = sys.io.File.getContent(getPath());
 		var content = sys.io.File.getContent(getPath());
 		data.loadData(haxe.Json.parse(content));
 		data.loadData(haxe.Json.parse(content));