瀏覽代碼

dispose() to free the filesystem

ncannasse 10 年之前
父節點
當前提交
c619aec48e
共有 2 個文件被更改,包括 23 次插入2 次删除
  1. 14 1
      hxd/res/FileTree.hx
  2. 9 1
      hxd/snd/Worker.hx

+ 14 - 1
hxd/res/FileTree.hx

@@ -208,9 +208,22 @@ class FileTree {
 			fields.push({
 				name : "loader",
 				access : [APublic, AStatic],
-				kind : FVar(loaderType),
+				kind : FProp("default","set",loaderType),
 				pos : pos,
 			});
+			fields.push( {
+				name : "set_loader",
+				access : [AStatic],
+				kind : FFun( {
+					args : [ { name : "l", type : loaderType } ],
+					ret : loaderType,
+					expr : macro {
+						hxd.res.Loader.currentInstance = l;
+						return loader = l;
+					}
+				}),
+				pos : pos
+			});
 		}
 		ignoredPairedExt = new Map();
 		for( e1 in pairedExt.keys() ) {

+ 9 - 1
hxd/snd/Worker.hx

@@ -14,6 +14,7 @@ private enum Message {
 	Active( b : Bool );
 	StopAll;
 	Sync( dst : Int, src : Int );
+	Dispose;
 }
 
 private class WorkerChannel extends NativeChannel {
@@ -116,7 +117,7 @@ class Worker extends hxd.Worker<Message> {
 	override function handleMessage( msg : Message ) {
 		switch( msg ) {
 		case Play(path, loop, volume, time):
-			var res = hxd.Res.loader.load(path).toSound();
+			var res = hxd.res.Loader.currentInstance.load(path).toSound();
 			var cid = channelID++;
 			var snd = res.getData();
 			snd.load(function() {
@@ -189,6 +190,9 @@ class Worker extends hxd.Worker<Message> {
 			if( cdst == null || csrc == null ) return;
 			moveChannel(cdst, csrc.channel);
 			cdst.syncWith(csrc);
+		case Dispose:
+			stopAll();
+			hxd.res.Loader.currentInstance.dispose();
 		}
 	}
 
@@ -310,6 +314,10 @@ class Worker extends hxd.Worker<Message> {
 		return allocChannel(snd, loop, volume, time);
 	}
 
+	public function dispose() {
+		send(Dispose);
+	}
+
 	public static function init() {
 		var w = new Worker();
 		return w.start() ? null : w;