Working on networkmanager
This commit is contained in:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user