100 lines
2.4 KiB
C#
100 lines
2.4 KiB
C#
|
|
using Marro.PacManUdon;
|
|
using System;
|
|
using UdonSharp;
|
|
using UnityEngine;
|
|
|
|
public class NetworkManagerTester : UdonSharpBehaviour
|
|
{
|
|
[SerializeField] private NetworkManager[] networkManagers;
|
|
[SerializeField] private float interval = 0.1f;
|
|
[SerializeField] private int ownerIndex = 0;
|
|
|
|
private float countdown = 0;
|
|
private bool serializationRequested;
|
|
|
|
private void Start()
|
|
{
|
|
foreach (var networkManager in networkManagers)
|
|
{
|
|
networkManager.SetNetworkManagerTester(this);
|
|
if (networkManager.Ready)
|
|
{
|
|
networkManager.Reset();
|
|
}
|
|
}
|
|
}
|
|
|
|
private void FixedUpdate()
|
|
{
|
|
countdown -= Time.deltaTime;
|
|
if (countdown > 0)
|
|
{
|
|
return;
|
|
}
|
|
countdown = interval;
|
|
|
|
if (!serializationRequested)
|
|
{
|
|
return;
|
|
}
|
|
|
|
var source = networkManagers[ownerIndex];
|
|
|
|
var data = PerformSerialization(source);
|
|
|
|
//Debug.Log($"{nameof(NetworkManagerTester)} Transferring {data.Length} bytes.");
|
|
|
|
foreach (var target in networkManagers)
|
|
{
|
|
if (target == source)
|
|
{
|
|
continue;
|
|
}
|
|
|
|
PerformDeserialization(target, data);
|
|
}
|
|
|
|
serializationRequested = false;
|
|
}
|
|
|
|
private byte[] PerformSerialization(NetworkManager networkManager)
|
|
{
|
|
networkManager.OnPreSerialization();
|
|
var data = networkManager.NetworkedData;
|
|
networkManager.OnPostSerializationInternal(true, data.Length) ;
|
|
|
|
return data;
|
|
}
|
|
|
|
private byte[] PerformDeserialization(NetworkManager networkManager, byte[] data)
|
|
{
|
|
networkManager.NetworkedData = data;
|
|
networkManager.OnDeserialization();
|
|
|
|
return data;
|
|
}
|
|
|
|
public bool ShouldBeOwner(NetworkManager manager) => Array.IndexOf(networkManagers, manager) == ownerIndex;
|
|
|
|
public void RequestSerializationTest()
|
|
{
|
|
serializationRequested = true;
|
|
}
|
|
|
|
public void RequestEvent(NetworkEventType eventType)
|
|
{
|
|
foreach (var target in networkManagers)
|
|
{
|
|
if (!target.IsOwner || !target.SerializationRequested)
|
|
{
|
|
continue;
|
|
}
|
|
|
|
//Debug.Log($"{nameof(NetworkManagerTester)} Requested event with type {eventType}.");
|
|
|
|
target.RequestEventReceived(eventType);
|
|
}
|
|
}
|
|
}
|