Working on networkmanager

This commit is contained in:
2026-01-03 15:41:46 +01:00
parent 26625f6b6f
commit 68016b1d78
16 changed files with 2837 additions and 2278 deletions

View File

@@ -3,32 +3,49 @@ using Marro.PacManUdon;
using System;
using System.Drawing.Text;
using UnityEngine;
using VRC.SDKBase;
enum TestBallMode
{
UseNetworkTime,
UseNetworkDt,
UseUnityDt,
}
public class TestBall : SyncedObject
{
[SerializeField] private NetworkManager networkManager;
[SerializeField] private Transform start;
[SerializeField] private Transform end;
[SerializeField] private TestBallMode mode;
private NetworkManager networkManager;
private const int LoopTimeMs = 1000;
private const float MaxUp = 0.7f;
private const float UpPerPress = 0.4f;
private const float DownPerSecond = 1;
private float sumOfDt;
private float amountUp = 0;
private int loopOffset = 0;
private void Start()
public void Initialize(NetworkManager networkManager)
{
networkManager.Initialize();
this.networkManager = networkManager;
sumOfDt = networkManager.SyncedTime;
}
public override void FixedUpdate()
public override void SyncedUpdate()
{
DeltaUp(-DownPerSecond * Dt);
DeltaUp(-DownPerSecond * networkManager.Dt);
UpdateProgress();
float progress = GetProgress();
transform.position = Vector3.Lerp(start.position, end.position, progress) + amountUp * MaxUp * Vector3.up;;
transform.position = Vector3.Lerp(start.position, end.position, progress) + amountUp * MaxUp * Vector3.up;
}
private void DeltaUp(float delta)
@@ -38,16 +55,48 @@ public class TestBall : SyncedObject
private void SetProgress(float progress)
{
var currentTimestamp = networkManager.GetTimestamp(networkManager.CurrentTimeTicks);
var currentTimestamp = NetworkManager.TimeToTimestamp(networkManager.SyncedTime);
loopOffset = (int)(currentTimestamp - progress * LoopTimeMs);
}
private float GetProgress()
{
var currentTimestamp = networkManager.GetTimestamp(networkManager.CurrentTimeTicks);
var currentTimestamp = GetCurrentTimestamp();
//Debug.Log($"CurrentTimeStamp for mode {mode}: {currentTimestamp}");
return ((int)currentTimestamp - loopOffset) % LoopTimeMs / (float)LoopTimeMs; // "uint % int" is not exposed, I love working in Udon
}
private uint GetCurrentTimestamp()
{
switch (mode)
{
case TestBallMode.UseNetworkTime:
return NetworkManager.TimeToTimestamp(networkManager.SyncedTime);
case TestBallMode.UseNetworkDt:
case TestBallMode.UseUnityDt:
return NetworkManager.TimeToTimestamp(sumOfDt);
default:
Debug.LogError($"({nameof(TestBall)}) Unknown mode {mode}!");
return 0;
}
}
private void UpdateProgress()
{
switch (mode)
{
case TestBallMode.UseNetworkDt:
sumOfDt += networkManager.Dt;
break;
case TestBallMode.UseUnityDt:
if (!networkManager.IsEventUpdate)
{
sumOfDt += Time.fixedDeltaTime;
}
break;
}
}
public void UpButtonPressed()
{
DeltaUp(UpPerPress);
@@ -55,12 +104,6 @@ public class TestBall : SyncedObject
networkManager.SendEvent((NetworkEventType)1);
}
public void SyncButtonPressed()
{
networkManager.SendEvent((NetworkEventType)0);
Debug.Log($"({nameof(TestBall)}) Sync button pressed, synced at progress {GetProgress()} and amountUp {amountUp}.");
}
public override void AppendSyncedData(byte[][] data, ref int index, NetworkEventType eventType)
{
if (eventType == 0)