Refactored input

This commit is contained in:
2026-06-23 13:00:48 +02:00
parent 540cfe16ab
commit 378d6bc7a7
8 changed files with 1685 additions and 1555 deletions

View File

@@ -15,7 +15,7 @@ namespace Marro.PacManUdon
{
FullSyncForced = 0,
FullSync = 1,
PacManTurn = 2,
InputChange = 2,
StartGameButtonPressed = 3,
Pause = 7,
Resume = 8,
@@ -65,7 +65,7 @@ namespace Marro.PacManUdon
/// <summary>
/// The time delta at which updates occur.
/// </summary>
[SerializeField] private float tickDelta = 0.0166666667f;
[SerializeField] private float tickDelta = 0.0165f;
#endregion
#region Constants
@@ -162,13 +162,21 @@ namespace Marro.PacManUdon
private bool serializationRequested;
/// <summary>
/// Events to send at the end of SyncedUpdate cycle
/// Events to send at the end of SyncedUpdate cycle.
/// </summary>
private NetworkEventType[] eventsToSend;
private NetworkEventType[] eventsToSendEarly;
/// <summary>
/// Index for <see cref="eventsToSend"/>
/// Index for <see cref="eventsToSendEarly"/>.
/// </summary>
private int eventsToSendIndex;
private int eventsToSendEarlyIndex;
/// <summary>
/// Events to send at the end of SyncedUpdate cycle, delayed by a tick.
/// </summary>
private NetworkEventType[] eventsToSendLate;
/// <summary>
/// Index for <see cref="eventsToSendLate"/>.
/// </summary>
private int eventsToSendLateIndex;
/// <summary>
/// Queue of events to be transmitted or processed.
@@ -406,7 +414,7 @@ namespace Marro.PacManUdon
ProcessEventsToSend(); // Prepare events from last cycle
ProgressPingTime(); // See if we need to send a ping
}
else
if (!isOwner)
{
ApplyReceivedEvents(); // See if there's events after last update that need to be replayed
}
@@ -489,7 +497,7 @@ namespace Marro.PacManUdon
#endregion
#region Sender
public void SendEventSoon(NetworkEventType eventType)
public void SendEventSoon(NetworkEventType eventType, bool early = false)
{
if (!Ready)
{
@@ -502,27 +510,48 @@ namespace Marro.PacManUdon
return;
}
if (eventsQueueIndex > eventsToSend.Length)
if (early)
{
Debug.LogWarning($"({nameof(PacManUdon)} {nameof(NetworkManager)}) {nameof(eventsToSend)} overflow!");
HandleError(false);
return;
}
if (eventsToSendEarlyIndex >= eventsToSendEarly.Length)
{
Debug.LogWarning($"({nameof(PacManUdon)} {nameof(NetworkManager)}) {nameof(eventsToSendEarly)} overflow!");
HandleError(false);
return;
}
eventsToSend[eventsToSendIndex++] = eventType;
eventsToSendEarly[eventsToSendEarlyIndex++] = eventType;
}
else
{
if (eventsToSendLateIndex >= eventsToSendLate.Length)
{
Debug.LogWarning($"({nameof(PacManUdon)} {nameof(NetworkManager)}) {nameof(eventsToSendLate)} overflow!");
HandleError(false);
return;
}
eventsToSendLate[eventsToSendLateIndex++] = eventType;
}
}
private void ProcessEventsToSend()
{
for (int i = 0; i < eventsToSendIndex; i++)
for (int i = 0; i < eventsToSendEarlyIndex; i++)
{
SendEventNow(eventsToSend[0]);
SendEventNow(eventsToSendEarly[i], true);
}
eventsToSendIndex = 0;
eventsToSendEarlyIndex = 0;
for (int i = 0; i < eventsToSendLateIndex; i++)
{
SendEventNow(eventsToSendLate[i], false);
}
eventsToSendLateIndex = 0;
}
public void SendEventNow(NetworkEventType eventType)
public void SendEventNow(NetworkEventType eventType, bool early)
{
if (!Ready)
{
@@ -537,6 +566,11 @@ namespace Marro.PacManUdon
var timestamp = SyncedTimeTicks;
if (early)
{
timestamp--;
}
var eventId = GetNextEventId(lastEventId);
InitializeEvent(eventType, timestamp, eventId, out byte[] data, out var index);
@@ -911,8 +945,11 @@ namespace Marro.PacManUdon
eventTransmissionHistory = new int[maxEventSendTries];
eventTransmissionHistoryIndex = 0;
eventsQueueIndexAtLastTransmission = 0;
eventsToSend = new NetworkEventType[BufferMaxTotalEvents];
eventsToSendIndex = 0;
eventsToSendEarly = new NetworkEventType[BufferMaxTotalEvents];
eventsToSendEarlyIndex = 0;
eventsToSendLate = new NetworkEventType[BufferMaxTotalEvents];
eventsToSendLateIndex = 0;
}
private void DequeueEventsFromBuffer(int eventCount)