Skip to content

Commit

Permalink
fix: don't apply any hybrid rpcs in host mode, fixes overwriting clie…
Browse files Browse the repository at this point in the history
…nt's data points
  • Loading branch information
miwarnec committed Nov 4, 2024
1 parent 6ece0c7 commit fa53191
Showing 1 changed file with 30 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -338,6 +338,11 @@ void RpcServerToClientBaseline_PositionRotation(byte baselineTick, Vector3 posit
// ignore if this object is owned by this client.
if (IsClientWithAuthority) return;

// host mode: baseline Rpc is also sent through host's local connection and applied.
// applying host's baseline as last deserialized would overwrite the owner client's data and cause jitter.
// in other words: never apply the rpcs in host mode.
if (isServer) return;

// save last deserialized baseline tick number to compare deltas against
lastDeserializedBaselineTick = baselineTick;
lastDeserializedBaselinePosition = position;
Expand All @@ -358,6 +363,11 @@ void RpcServerToClientBaseline_Position(byte baselineTick, Vector3 position)
// ignore if this object is owned by this client.
if (IsClientWithAuthority) return;

// host mode: baseline Rpc is also sent through host's local connection and applied.
// applying host's baseline as last deserialized would overwrite the owner client's data and cause jitter.
// in other words: never apply the rpcs in host mode.
if (isServer) return;

// save last deserialized baseline tick number to compare deltas against
lastDeserializedBaselineTick = baselineTick;
lastDeserializedBaselinePosition = position;
Expand All @@ -377,6 +387,11 @@ void RpcServerToClientBaseline_Rotation(byte baselineTick, Quaternion rotation)
// ignore if this object is owned by this client.
if (IsClientWithAuthority) return;

// host mode: baseline Rpc is also sent through host's local connection and applied.
// applying host's baseline as last deserialized would overwrite the owner client's data and cause jitter.
// in other words: never apply the rpcs in host mode.
if (isServer) return;

// save last deserialized baseline tick number to compare deltas against
lastDeserializedBaselineTick = baselineTick;
lastDeserializedBaselineRotation = rotation;
Expand All @@ -394,6 +409,11 @@ void RpcServerToClientDelta_PositionRotation(byte baselineTick, Vector3 position
// ignore if this object is owned by this client.
if (IsClientWithAuthority) return;

// host mode: baseline Rpc is also sent through host's local connection and applied.
// applying host's baseline as last deserialized would overwrite the owner client's data and cause jitter.
// in other words: never apply the rpcs in host mode.
if (isServer) return;

// debug draw: delta
if (debugDraw) Debug.DrawLine(position, position + Vector3.up, Color.white, 10f);

Expand All @@ -408,6 +428,11 @@ void RpcServerToClientDelta_Position(byte baselineTick, Vector3 position)
// ignore if this object is owned by this client.
if (IsClientWithAuthority) return;

// host mode: baseline Rpc is also sent through host's local connection and applied.
// applying host's baseline as last deserialized would overwrite the owner client's data and cause jitter.
// in other words: never apply the rpcs in host mode.
if (isServer) return;

// debug draw: delta
if (debugDraw) Debug.DrawLine(position, position + Vector3.up, Color.white, 10f);

Expand All @@ -422,6 +447,11 @@ void RpcServerToClientDelta_Rotation(byte baselineTick, Quaternion rotation)
// ignore if this object is owned by this client.
if (IsClientWithAuthority) return;

// host mode: baseline Rpc is also sent through host's local connection and applied.
// applying host's baseline as last deserialized would overwrite the owner client's data and cause jitter.
// in other words: never apply the rpcs in host mode.
if (isServer) return;

OnServerToClientDeltaSync(baselineTick, Vector3.zero, rotation);//, scale);
}

Expand Down

0 comments on commit fa53191

Please sign in to comment.