Working via NetworkManager

This commit is contained in:
2026-01-14 21:39:24 +01:00
parent 89607f0868
commit fb902aaddc
26 changed files with 3106 additions and 2561 deletions

View File

@@ -1,5 +1,4 @@
using System;
using System.Reflection;
using System.Text;
using TMPro;
using UdonSharp;
@@ -42,9 +41,9 @@ namespace Marro.PacManUdon
#region Settings
/// <summary>
/// Objects which are controlled by this <see cref="NetworkManager"/>.
/// The root from which this <see cref="NetworkManager"/> will look for <see cref="SyncedObject"/> to control.
/// </summary>
[SerializeField] private SyncedObject[] syncedObjects;
[SerializeField] private GameObject root;
/// <summary>
/// The delay at which the receiving side replays events.
/// </summary>
@@ -88,6 +87,11 @@ namespace Marro.PacManUdon
#endregion
#region Private attributes
/// <summary>
/// Objects which are controlled by this <see cref="NetworkManager"/>.
/// </summary>
private SyncedObject[] syncedObjects;
/// <summary>
/// Offset from system time to network time, including delay.
/// </summary>
@@ -176,7 +180,7 @@ namespace Marro.PacManUdon
/// <summary>
/// Time since the last simulation, in seconds.
/// </summary>
public float Dt { get; private set; }
public float SyncedDeltaTime { get; private set; }
/// <summary>
/// Is the current simulation to prepare for applying a network event?
@@ -194,7 +198,12 @@ namespace Marro.PacManUdon
#region General
public void Awake()
{
offsetTime = Time.fixedTime;
// I would set the instance variable here, but it's somehow null by the time Initialize() is called... Udon moment?
var syncedObjects = root.GetComponentsInChildren<SyncedObject>(includeInactive: true);
foreach (var obj in syncedObjects)
{
obj.networkManager = this;
}
}
public void Initialize()
@@ -206,6 +215,10 @@ namespace Marro.PacManUdon
return;
}
syncedObjects = root.GetComponentsInChildren<SyncedObject>(includeInactive: true);
Debug.Log($"({nameof(PacManUdon)} {nameof(NetworkManager)}) 3 Found {syncedObjects.Length} {nameof(SyncedObject)} in children of {root.name}.");
SetOwner(Networking.IsOwner(gameObject));
ClearBuffer();
@@ -217,7 +230,7 @@ namespace Marro.PacManUdon
offsetTime = Time.fixedTime;
internalTime = 0;
SyncedTime = 0;
Dt = Time.fixedDeltaTime;
SyncedDeltaTime = Time.fixedDeltaTime;
Ready = true;
@@ -255,8 +268,13 @@ namespace Marro.PacManUdon
IsEventUpdate = false;
ProgressSyncedTime(internalTime);
foreach (var obj in syncedObjects)
Debug.Log($"{nameof(PacManUdon)} {nameof(NetworkManager)} syncedObjects: {syncedObjects}");
Debug.Log($"{nameof(PacManUdon)} {nameof(NetworkManager)} Starting SyncedUpdate for {syncedObjects.Length} objects.");
for (int i = 0; i < syncedObjects.Length; i++)
{
var obj = syncedObjects[i];
Debug.Log($"{nameof(PacManUdon)} {nameof(NetworkManager)} SyncedUpdate for {obj.gameObject.name}");
obj.SyncedUpdate();
}
}
@@ -701,11 +719,11 @@ namespace Marro.PacManUdon
private void ProgressSyncedTime(float newTime)
{
//Debug.Log($"({nameof(PacManUdon)} {nameof(NetworkManager)}) updating SyncedTime from {SyncedTime} to {newTime}");
Dt = newTime - SyncedTime;
SyncedDeltaTime = newTime - SyncedTime;
if (Dt < 0)
if (SyncedDeltaTime < 0)
{
Debug.LogWarning($"({nameof(PacManUdon)} {nameof(NetworkManager)}) Negative Dt: {Dt}! Going from {SyncedTime} to {newTime}, IsEventUpdate: {IsEventUpdate}");
Debug.LogWarning($"({nameof(PacManUdon)} {nameof(NetworkManager)}) Negative Dt: {SyncedDeltaTime}! Going from {SyncedTime} to {newTime}, IsEventUpdate: {IsEventUpdate}");
}
SyncedTime = newTime;
@@ -877,7 +895,7 @@ namespace Marro.PacManUdon
$"offsetTime: {offsetTime}\n" +
$"internalTime: {internalTime}\n" +
$"SyncedTime: {SyncedTime}\n" +
$"Dt: {Dt}\n" +
$"Dt: {SyncedDeltaTime}\n" +
$"BufferIndex: {eventsQueueIndex}\n" +
$"BufferIndexHistory: {ArrayToString(eventTransmissionHistory)}\n" +
$"\n";