فهرست منبع

networkLocalChange + @:notMutable @:noSerialize support

ncannasse 9 سال پیش
والد
کامیت
1a5d657e58
1فایلهای تغییر یافته به همراه12 افزوده شده و 1 حذف شده
  1. 12 1
      hxd/net/Macros.hx

+ 12 - 1
hxd/net/Macros.hx

@@ -52,6 +52,7 @@ typedef PropType = {
 	@:optional var isNull : Bool;
 	@:optional var increment : Float;
 	@:optional var condSend : Expr;
+	@:optional var notMutable : Bool;
 }
 
 class Macros {
@@ -120,6 +121,8 @@ class Macros {
 				}
 			case ":condSend" if( m.params.length == 1 ):
 				t.condSend = m.params[0];
+			case ":notMutable":
+				t.notMutable = true;
 			default:
 				Context.error("Unsupported network metadata", m.pos);
 			}
@@ -184,6 +187,8 @@ class Macros {
 			var a = a.get();
 			var fields = [];
 			for( f in a.fields ) {
+				if( f.meta.has(":noSerialize") )
+					continue;
 				var ft = getPropField(f.type, f.meta.get());
 				if( ft == null ) return null;
 				fields.push( { name : f.name, type : ft, opt : f.meta.has(":optional") } );
@@ -674,7 +679,7 @@ class Macros {
 			return false;
 		switch( t.d ) {
 		case PMap(_), PArray(_), PObj(_), PVector(_):
-			return true;
+			return !t.notMutable;
 		default:
 			return false;
 		}
@@ -845,6 +850,12 @@ class Macros {
 				public inline function networkCancelProperty( props : hxd.net.NetworkSerializable.NetworkProperty ) {
 					__bits &= ~props.toInt();
 				}
+				inline function networkLocalChange( f : Void -> Void ) {
+					var old = __host;
+					__host = null;
+					f();
+					__host = old;
+				}
 			}).fields);
 
 			if( !Lambda.exists(fields, function(f) return f.name == "networkGetOwner") )