Tools for testing
This commit is contained in:
@@ -43,7 +43,7 @@ MonoBehaviour:
|
||||
Data:
|
||||
- Name:
|
||||
Entry: 12
|
||||
Data: 7
|
||||
Data: 10
|
||||
- Name:
|
||||
Entry: 7
|
||||
Data:
|
||||
@@ -349,19 +349,19 @@ MonoBehaviour:
|
||||
Data:
|
||||
- Name: $k
|
||||
Entry: 1
|
||||
Data: captureTime
|
||||
Data: captureTimes
|
||||
- Name: $v
|
||||
Entry: 7
|
||||
Data: 22|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
|
||||
- Name: <Name>k__BackingField
|
||||
Entry: 1
|
||||
Data: captureTime
|
||||
Data: captureTimes
|
||||
- Name: <UserType>k__BackingField
|
||||
Entry: 7
|
||||
Data: 23|System.RuntimeType, mscorlib
|
||||
- Name:
|
||||
Entry: 1
|
||||
Data: System.Single, mscorlib
|
||||
Data: System.Int32[], mscorlib
|
||||
- Name:
|
||||
Entry: 8
|
||||
Data:
|
||||
@@ -403,25 +403,31 @@ MonoBehaviour:
|
||||
Data:
|
||||
- Name: $k
|
||||
Entry: 1
|
||||
Data: positions
|
||||
Data: positionCaptures
|
||||
- Name: $v
|
||||
Entry: 7
|
||||
Data: 25|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
|
||||
- Name: <Name>k__BackingField
|
||||
Entry: 1
|
||||
Data: positions
|
||||
Data: positionCaptures
|
||||
- Name: <UserType>k__BackingField
|
||||
Entry: 7
|
||||
Data: 26|System.RuntimeType, mscorlib
|
||||
- Name:
|
||||
Entry: 1
|
||||
Data: UnityEngine.Vector2[], UnityEngine.CoreModule
|
||||
Data: UnityEngine.Vector2[][], UnityEngine.CoreModule
|
||||
- Name:
|
||||
Entry: 8
|
||||
Data:
|
||||
- Name: <SystemType>k__BackingField
|
||||
Entry: 9
|
||||
Data: 26
|
||||
Entry: 7
|
||||
Data: 27|System.RuntimeType, mscorlib
|
||||
- Name:
|
||||
Entry: 1
|
||||
Data: System.Object[], mscorlib
|
||||
- Name:
|
||||
Entry: 8
|
||||
Data:
|
||||
- Name: <SyncMode>k__BackingField
|
||||
Entry: 7
|
||||
Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib
|
||||
@@ -436,7 +442,157 @@ MonoBehaviour:
|
||||
Data: false
|
||||
- Name: _fieldAttributes
|
||||
Entry: 7
|
||||
Data: 27|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib
|
||||
Data: 28|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib
|
||||
- Name:
|
||||
Entry: 12
|
||||
Data: 0
|
||||
- Name:
|
||||
Entry: 13
|
||||
Data:
|
||||
- Name:
|
||||
Entry: 8
|
||||
Data:
|
||||
- Name:
|
||||
Entry: 8
|
||||
Data:
|
||||
- Name:
|
||||
Entry: 8
|
||||
Data:
|
||||
- Name:
|
||||
Entry: 7
|
||||
Data:
|
||||
- Name: $k
|
||||
Entry: 1
|
||||
Data: ownerIndex
|
||||
- Name: $v
|
||||
Entry: 7
|
||||
Data: 29|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
|
||||
- Name: <Name>k__BackingField
|
||||
Entry: 1
|
||||
Data: ownerIndex
|
||||
- Name: <UserType>k__BackingField
|
||||
Entry: 7
|
||||
Data: 30|System.RuntimeType, mscorlib
|
||||
- Name:
|
||||
Entry: 1
|
||||
Data: System.Int32, mscorlib
|
||||
- Name:
|
||||
Entry: 8
|
||||
Data:
|
||||
- Name: <SystemType>k__BackingField
|
||||
Entry: 9
|
||||
Data: 30
|
||||
- Name: <SyncMode>k__BackingField
|
||||
Entry: 7
|
||||
Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib
|
||||
- Name:
|
||||
Entry: 6
|
||||
Data:
|
||||
- Name:
|
||||
Entry: 8
|
||||
Data:
|
||||
- Name: <IsSerialized>k__BackingField
|
||||
Entry: 5
|
||||
Data: false
|
||||
- Name: _fieldAttributes
|
||||
Entry: 7
|
||||
Data: 31|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib
|
||||
- Name:
|
||||
Entry: 12
|
||||
Data: 0
|
||||
- Name:
|
||||
Entry: 13
|
||||
Data:
|
||||
- Name:
|
||||
Entry: 8
|
||||
Data:
|
||||
- Name:
|
||||
Entry: 8
|
||||
Data:
|
||||
- Name:
|
||||
Entry: 8
|
||||
Data:
|
||||
- Name:
|
||||
Entry: 7
|
||||
Data:
|
||||
- Name: $k
|
||||
Entry: 1
|
||||
Data: remoteIndex
|
||||
- Name: $v
|
||||
Entry: 7
|
||||
Data: 32|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
|
||||
- Name: <Name>k__BackingField
|
||||
Entry: 1
|
||||
Data: remoteIndex
|
||||
- Name: <UserType>k__BackingField
|
||||
Entry: 9
|
||||
Data: 30
|
||||
- Name: <SystemType>k__BackingField
|
||||
Entry: 9
|
||||
Data: 30
|
||||
- Name: <SyncMode>k__BackingField
|
||||
Entry: 7
|
||||
Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib
|
||||
- Name:
|
||||
Entry: 6
|
||||
Data:
|
||||
- Name:
|
||||
Entry: 8
|
||||
Data:
|
||||
- Name: <IsSerialized>k__BackingField
|
||||
Entry: 5
|
||||
Data: false
|
||||
- Name: _fieldAttributes
|
||||
Entry: 7
|
||||
Data: 33|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib
|
||||
- Name:
|
||||
Entry: 12
|
||||
Data: 0
|
||||
- Name:
|
||||
Entry: 13
|
||||
Data:
|
||||
- Name:
|
||||
Entry: 8
|
||||
Data:
|
||||
- Name:
|
||||
Entry: 8
|
||||
Data:
|
||||
- Name:
|
||||
Entry: 8
|
||||
Data:
|
||||
- Name:
|
||||
Entry: 7
|
||||
Data:
|
||||
- Name: $k
|
||||
Entry: 1
|
||||
Data: previousCaptureTime
|
||||
- Name: $v
|
||||
Entry: 7
|
||||
Data: 34|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor
|
||||
- Name: <Name>k__BackingField
|
||||
Entry: 1
|
||||
Data: previousCaptureTime
|
||||
- Name: <UserType>k__BackingField
|
||||
Entry: 9
|
||||
Data: 30
|
||||
- Name: <SystemType>k__BackingField
|
||||
Entry: 9
|
||||
Data: 30
|
||||
- Name: <SyncMode>k__BackingField
|
||||
Entry: 7
|
||||
Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib
|
||||
- Name:
|
||||
Entry: 6
|
||||
Data:
|
||||
- Name:
|
||||
Entry: 8
|
||||
Data:
|
||||
- Name: <IsSerialized>k__BackingField
|
||||
Entry: 5
|
||||
Data: false
|
||||
- Name: _fieldAttributes
|
||||
Entry: 7
|
||||
Data: 35|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib
|
||||
- Name:
|
||||
Entry: 12
|
||||
Data: 0
|
||||
|
||||
@@ -14,66 +14,79 @@ public class NetworkManagerSyncTester : UdonSharpBehaviour
|
||||
[SerializeField] GridMover[] gridMovers2;
|
||||
[SerializeField] Animator debugImageToIndicateSynced;
|
||||
|
||||
private float captureTime;
|
||||
private Vector2[] positions;
|
||||
private int[] captureTimes = new int[1000];
|
||||
private Vector2[][] positionCaptures = new Vector2[1000][];
|
||||
private int ownerIndex = -1;
|
||||
private int remoteIndex = 0;
|
||||
private int previousCaptureTime = -1;
|
||||
|
||||
public void Update()
|
||||
{
|
||||
if (!networkManager1.Synced || !networkManager2.Synced)
|
||||
{
|
||||
positions = null;
|
||||
ownerIndex = -1;
|
||||
remoteIndex = 0;
|
||||
return;
|
||||
}
|
||||
|
||||
if (positions == null)
|
||||
var ownerTime = networkManager1.SyncedTimeTicks;
|
||||
|
||||
if (ownerTime > previousCaptureTime)
|
||||
{
|
||||
positions = GetPositions(gridMovers1);
|
||||
captureTime = networkManager1.SyncedTime;
|
||||
IncrementIndex(ref ownerIndex);
|
||||
captureTimes[ownerIndex] = ownerTime;
|
||||
previousCaptureTime = ownerTime;
|
||||
positionCaptures[ownerIndex] = GetPositions(gridMovers1);
|
||||
}
|
||||
|
||||
var remoteTime = networkManager2.SyncedTime;
|
||||
if (captureTime > remoteTime)
|
||||
var remoteTime = networkManager2.SyncedTimeTicks;
|
||||
|
||||
while (captureTimes[remoteIndex] < remoteTime && remoteIndex != ownerIndex)
|
||||
{
|
||||
return;
|
||||
DiscardCapture();
|
||||
}
|
||||
|
||||
if (captureTime < remoteTime)
|
||||
Debug.Log($"ownerTime: {ownerTime}, remoteTime: {remoteTime}, ownerIndex: {ownerIndex} ({captureTimes[ownerIndex]}), remoteIndex: {remoteIndex} ({captureTimes[remoteIndex]})");
|
||||
|
||||
if (captureTimes[remoteIndex] == remoteTime)
|
||||
{
|
||||
Debug.Log($"{nameof(NetworkManagerSyncTester)} Skipping check");
|
||||
positions = null;
|
||||
return;
|
||||
bool equal = IsEqual(remoteIndex);
|
||||
SetIndicator(equal);
|
||||
|
||||
DiscardCapture();
|
||||
}
|
||||
|
||||
bool equal = IsEqual(remoteTime);
|
||||
|
||||
SetIndicator(equal);
|
||||
|
||||
positions = null;
|
||||
}
|
||||
|
||||
private bool IsEqual(float remoteTime)
|
||||
private void DiscardCapture()
|
||||
{
|
||||
positionCaptures[remoteIndex] = null;
|
||||
IncrementIndex(ref remoteIndex);
|
||||
}
|
||||
|
||||
private bool IsEqual(int index)
|
||||
{
|
||||
var equal = true;
|
||||
|
||||
var positions1 = positionCaptures[index];
|
||||
var positions2 = GetPositions(gridMovers2);
|
||||
for (int i = 0; i < positions.Length; i++)
|
||||
for (int i = 0; i < positions1.Length; i++)
|
||||
{
|
||||
var gridMover1 = gridMovers1[i];
|
||||
var gridMover1Position = positions[i];
|
||||
var gridMover1Position = positions1[i];
|
||||
|
||||
var gridMover2 = gridMovers2[i];
|
||||
var gridMover2Position = positions2[i];
|
||||
|
||||
var equal = gridMover1Position == gridMover2Position;
|
||||
|
||||
if (!equal)
|
||||
if (gridMover1Position != gridMover2Position)
|
||||
{
|
||||
Debug.LogWarning($"{nameof(NetworkManagerSyncTester)} Desync found:\n{gridMover1.name} {gridMover1Position} (at {captureTime}) != {gridMover2.name} {gridMover2Position} (at {remoteTime})");
|
||||
networkManager1.Pause();
|
||||
networkManager2.Pause();
|
||||
return false;
|
||||
Debug.LogWarning($"{nameof(NetworkManagerSyncTester)} Desync found:\n{gridMover1.name} {gridMover1Position} != {gridMover2.name} {gridMover2Position}");
|
||||
//networkManager1.Pause();
|
||||
//networkManager2.Pause();
|
||||
equal = false;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
return equal;
|
||||
}
|
||||
|
||||
private void SetIndicator(bool value)
|
||||
@@ -84,7 +97,7 @@ public class NetworkManagerSyncTester : UdonSharpBehaviour
|
||||
}
|
||||
}
|
||||
|
||||
private Vector2[] GetPositions(GridMover[] gridMovers)
|
||||
private static Vector2[] GetPositions(GridMover[] gridMovers)
|
||||
{
|
||||
var length = gridMovers.Length;
|
||||
var positions = new Vector2[length];
|
||||
@@ -96,4 +109,16 @@ public class NetworkManagerSyncTester : UdonSharpBehaviour
|
||||
|
||||
return positions;
|
||||
}
|
||||
|
||||
private void IncrementIndex(ref int index)
|
||||
{
|
||||
if (index >= positionCaptures.Length - 1)
|
||||
{
|
||||
index = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
index++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user