瀏覽代碼

minor fix: ensure all refs saved in __uid order

ncannasse 8 年之前
父節點
當前提交
389c3e2d16
共有 2 個文件被更改,包括 7 次插入4 次删除
  1. 4 3
      hxd/net/Macros.hx
  2. 3 1
      hxd/net/NetworkHost.hx

+ 4 - 3
hxd/net/Macros.hx

@@ -526,7 +526,7 @@ class Macros {
 				meta : noCompletion,
 				meta : noCompletion,
 				kind : FVar(macro : Int, macro @:privateAccess hxd.net.Serializer.allocUID()),
 				kind : FVar(macro : Int, macro @:privateAccess hxd.net.Serializer.allocUID()),
 			});
 			});
-	
+
 		var clName = StringTools.endsWith(cl.module,"."+cl.name) ? cl.module.split(".") : [cl.name];
 		var clName = StringTools.endsWith(cl.module,"."+cl.name) ? cl.module.split(".") : [cl.name];
 		fields.push({
 		fields.push({
 			name : "__clid",
 			name : "__clid",
@@ -1035,8 +1035,9 @@ class Macros {
 						ret : ftype.t,
 						ret : ftype.t,
 					}),
 					}),
 				});
 				});
-			flushExpr.push(macro if( b & (1 << $v{ bitID } ) != 0 ) hxd.net.Macros.serializeValue(ctx, this.$fname));
-			syncExpr.push(macro if( __bits & (1 << $v { bitID } ) != 0 ) hxd.net.Macros.unserializeValue(ctx, this.$fname));
+			var fexpr = { expr : EField({ expr : EConst(CIdent("this")), pos : pos }, fname), pos : pos };
+			flushExpr.push(macro if( b & (1 << $v{ bitID } ) != 0 ) hxd.net.Macros.serializeValue(ctx, $fexpr));
+			syncExpr.push(macro if( __bits & (1 << $v { bitID } ) != 0 ) hxd.net.Macros.unserializeValue(ctx, $fexpr));
 
 
 			var prop = "networkProp" + fname.charAt(0).toUpperCase() + fname.substr(1);
 			var prop = "networkProp" + fname.charAt(0).toUpperCase() + fname.substr(1);
 			fields.push({
 			fields.push({

+ 3 - 1
hxd/net/NetworkHost.hx

@@ -196,7 +196,9 @@ class NetworkHost {
 	public function saveState() {
 	public function saveState() {
 		var s = new hxd.net.Serializer();
 		var s = new hxd.net.Serializer();
 		s.beginSave();
 		s.beginSave();
-		for( r in ctx.refs )
+		var refs = [for( r in ctx.refs ) r];
+		refs.sort(sortByUID);
+		for( r in refs )
 			if( !s.refs.exists(r.__uid) )
 			if( !s.refs.exists(r.__uid) )
 				s.addAnyRef(r);
 				s.addAnyRef(r);
 		s.addAnyRef(null);
 		s.addAnyRef(null);