internal static void WriteNetObject(DataSerializationItem item, Bitstream msg, NetworkObject owner, NetworkObject baseline = null)
{
if (owner is DefinitionNetworkObject)
{
if ((owner as DefinitionNetworkObject).Destroy)
{
msg.Write(true);
return;
}
else
{
msg.Write(false);
}
}
foreach (var prop in item.Properties)
{
if (UseBaseline(prop, owner, baseline))
{
msg.Write(true);
continue;
}
else
{
msg.Write(false);
}
switch (prop.Type)
{
case DataTypes.BOOL:
var b = prop.Get<bool>(owner);
msg.Write(b);
break;
case DataTypes.UBYTE:
msg.Write(prop.Get<byte>(owner));
break;
case DataTypes.UINT:
msg.WriteVariableUInt32(prop.Get<uint>(owner));
break;
case DataTypes.BYTE:
msg.Write(prop.Get<sbyte>(owner));
break;
case DataTypes.INT:
msg.WriteVariableInt32(prop.Get<int>(owner));
break;
case DataTypes.ULONG:
msg.Write(prop.Get<ulong>(owner));
break;
case DataTypes.LONG:
msg.Write(prop.Get<long>(owner));
break;
case DataTypes.FLOAT:
msg.Write(prop.Get<float>(owner));
break;
case DataTypes.DOUBLE:
msg.Write(prop.Get<double>(owner));
break;
case DataTypes.STRING:
msg.Write(prop.Get<string>(owner));
break;
case DataTypes.VECTOR2:
msg.Write(prop.Get<Vector2>(owner));
break;
case DataTypes.NETPROP:
var childProp = prop.ChildProperty;
if (childProp != null)
{
var o = prop.Get<NetworkObject>(owner);
var baselinebackup = baseline;
if (baseline != null)
{
var childBase = prop.Get<NetworkObject>(baseline);
baseline = childBase;
}
WriteNetObject(childProp, msg, o, baseline);
baseline = baselinebackup;
}
break;
}
}
}