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