Skip to content

Commit f45ac57

Browse files
committed
Fixed issue with Target SyncedVar when running as host
1 parent e8d58d2 commit f45ac57

File tree

1 file changed

+77
-74
lines changed

1 file changed

+77
-74
lines changed

MLAPI/MonoBehaviours/Core/NetworkedBehaviour.cs

Lines changed: 77 additions & 74 deletions
Original file line numberDiff line numberDiff line change
@@ -453,88 +453,91 @@ internal void SyncVarUpdate()
453453
}
454454
else
455455
{
456-
//It's sync time. This is the target receivers packet.
457-
using (BitWriter writer = new BitWriter())
456+
if (!(isHost && new NetId(ownerClientId).IsHost()))
458457
{
459-
//Write all indexes
460-
writer.WriteByte(totalDirtyCount);
461-
writer.WriteUInt(networkId); //NetId
462-
writer.WriteUShort(networkedObject.GetOrderIndex(this)); //Behaviour OrderIndex
463-
for (byte i = 0; i < syncedVarFields.Count; i++)
458+
//It's sync time. This is the target receivers packet.
459+
using (BitWriter writer = new BitWriter())
464460
{
465-
//Writes all the indexes of the dirty syncvars.
466-
if (syncedVarFields[i].Dirty == true)
461+
//Write all indexes
462+
writer.WriteByte(totalDirtyCount);
463+
writer.WriteUInt(networkId); //NetId
464+
writer.WriteUShort(networkedObject.GetOrderIndex(this)); //Behaviour OrderIndex
465+
for (byte i = 0; i < syncedVarFields.Count; i++)
467466
{
468-
writer.WriteByte(i); //FieldIndex
469-
switch (syncedVarFields[i].FieldType)
467+
//Writes all the indexes of the dirty syncvars.
468+
if (syncedVarFields[i].Dirty == true)
470469
{
471-
case FieldType.Bool:
472-
writer.WriteBool((bool)syncedVarFields[i].FieldInfo.GetValue(this));
473-
break;
474-
case FieldType.Byte:
475-
writer.WriteByte((byte)syncedVarFields[i].FieldInfo.GetValue(this));
476-
break;
477-
case FieldType.Double:
478-
writer.WriteDouble((double)syncedVarFields[i].FieldInfo.GetValue(this));
479-
break;
480-
case FieldType.Single:
481-
writer.WriteFloat((float)syncedVarFields[i].FieldInfo.GetValue(this));
482-
break;
483-
case FieldType.Int:
484-
writer.WriteInt((int)syncedVarFields[i].FieldInfo.GetValue(this));
485-
break;
486-
case FieldType.Long:
487-
writer.WriteLong((long)syncedVarFields[i].FieldInfo.GetValue(this));
488-
break;
489-
case FieldType.SByte:
490-
writer.WriteSByte((sbyte)syncedVarFields[i].FieldInfo.GetValue(this));
491-
break;
492-
case FieldType.Short:
493-
writer.WriteShort((short)syncedVarFields[i].FieldInfo.GetValue(this));
494-
break;
495-
case FieldType.UInt:
496-
writer.WriteUInt((uint)syncedVarFields[i].FieldInfo.GetValue(this));
497-
break;
498-
case FieldType.ULong:
499-
writer.WriteULong((ulong)syncedVarFields[i].FieldInfo.GetValue(this));
500-
break;
501-
case FieldType.UShort:
502-
writer.WriteUShort((ushort)syncedVarFields[i].FieldInfo.GetValue(this));
503-
break;
504-
case FieldType.String:
505-
writer.WriteString((string)syncedVarFields[i].FieldInfo.GetValue(this));
506-
break;
507-
case FieldType.Vector3:
508-
Vector3 vector3 = (Vector3)syncedVarFields[i].FieldInfo.GetValue(this);
509-
writer.WriteFloat(vector3.x);
510-
writer.WriteFloat(vector3.y);
511-
writer.WriteFloat(vector3.z);
512-
break;
513-
case FieldType.Vector2:
514-
Vector2 vector2 = (Vector2)syncedVarFields[i].FieldInfo.GetValue(this);
515-
writer.WriteFloat(vector2.x);
516-
writer.WriteFloat(vector2.y);
517-
break;
518-
case FieldType.Quaternion:
519-
Vector3 euler = ((Quaternion)syncedVarFields[i].FieldInfo.GetValue(this)).eulerAngles;
520-
writer.WriteFloat(euler.x);
521-
writer.WriteFloat(euler.y);
522-
writer.WriteFloat(euler.z);
523-
break;
524-
case FieldType.ByteArray:
525-
writer.WriteByteArray((byte[])syncedVarFields[i].FieldInfo.GetValue(this));
526-
break;
527-
}
470+
writer.WriteByte(i); //FieldIndex
471+
switch (syncedVarFields[i].FieldType)
472+
{
473+
case FieldType.Bool:
474+
writer.WriteBool((bool)syncedVarFields[i].FieldInfo.GetValue(this));
475+
break;
476+
case FieldType.Byte:
477+
writer.WriteByte((byte)syncedVarFields[i].FieldInfo.GetValue(this));
478+
break;
479+
case FieldType.Double:
480+
writer.WriteDouble((double)syncedVarFields[i].FieldInfo.GetValue(this));
481+
break;
482+
case FieldType.Single:
483+
writer.WriteFloat((float)syncedVarFields[i].FieldInfo.GetValue(this));
484+
break;
485+
case FieldType.Int:
486+
writer.WriteInt((int)syncedVarFields[i].FieldInfo.GetValue(this));
487+
break;
488+
case FieldType.Long:
489+
writer.WriteLong((long)syncedVarFields[i].FieldInfo.GetValue(this));
490+
break;
491+
case FieldType.SByte:
492+
writer.WriteSByte((sbyte)syncedVarFields[i].FieldInfo.GetValue(this));
493+
break;
494+
case FieldType.Short:
495+
writer.WriteShort((short)syncedVarFields[i].FieldInfo.GetValue(this));
496+
break;
497+
case FieldType.UInt:
498+
writer.WriteUInt((uint)syncedVarFields[i].FieldInfo.GetValue(this));
499+
break;
500+
case FieldType.ULong:
501+
writer.WriteULong((ulong)syncedVarFields[i].FieldInfo.GetValue(this));
502+
break;
503+
case FieldType.UShort:
504+
writer.WriteUShort((ushort)syncedVarFields[i].FieldInfo.GetValue(this));
505+
break;
506+
case FieldType.String:
507+
writer.WriteString((string)syncedVarFields[i].FieldInfo.GetValue(this));
508+
break;
509+
case FieldType.Vector3:
510+
Vector3 vector3 = (Vector3)syncedVarFields[i].FieldInfo.GetValue(this);
511+
writer.WriteFloat(vector3.x);
512+
writer.WriteFloat(vector3.y);
513+
writer.WriteFloat(vector3.z);
514+
break;
515+
case FieldType.Vector2:
516+
Vector2 vector2 = (Vector2)syncedVarFields[i].FieldInfo.GetValue(this);
517+
writer.WriteFloat(vector2.x);
518+
writer.WriteFloat(vector2.y);
519+
break;
520+
case FieldType.Quaternion:
521+
Vector3 euler = ((Quaternion)syncedVarFields[i].FieldInfo.GetValue(this)).eulerAngles;
522+
writer.WriteFloat(euler.x);
523+
writer.WriteFloat(euler.y);
524+
writer.WriteFloat(euler.z);
525+
break;
526+
case FieldType.ByteArray:
527+
writer.WriteByteArray((byte[])syncedVarFields[i].FieldInfo.GetValue(this));
528+
break;
529+
}
528530

529-
if (nonTargetDirtyCount == 0)
530-
{
531-
//Only targeted SyncedVars were changed. Thus we need to set them as non dirty here since it wont be done by the next loop.
532-
syncedVarFields[i].FieldValue = syncedVarFields[i].FieldInfo.GetValue(this);
533-
syncedVarFields[i].Dirty = false;
531+
if (nonTargetDirtyCount == 0)
532+
{
533+
//Only targeted SyncedVars were changed. Thus we need to set them as non dirty here since it wont be done by the next loop.
534+
syncedVarFields[i].FieldValue = syncedVarFields[i].FieldInfo.GetValue(this);
535+
syncedVarFields[i].Dirty = false;
536+
}
534537
}
535538
}
539+
InternalMessageHandler.Send(ownerClientId, "MLAPI_SYNC_VAR_UPDATE", "MLAPI_INTERNAL", writer.Finalize()); //Send only to target
536540
}
537-
InternalMessageHandler.Send(ownerClientId, "MLAPI_SYNC_VAR_UPDATE", "MLAPI_INTERNAL", writer.Finalize()); //Send only to target
538541
}
539542

540543
if (nonTargetDirtyCount == 0)

0 commit comments

Comments
 (0)