Skip to content

Commit

Permalink
Merge pull request #675 from DatGuy1/patch-1
Browse files Browse the repository at this point in the history
PredictionRigidbody2D: write state to reconcile to
  • Loading branch information
FirstGearGames authored May 21, 2024
2 parents 9533cae + d098a3f commit 0d1788b
Showing 1 changed file with 21 additions and 3 deletions.
24 changes: 21 additions & 3 deletions Assets/FishNet/Runtime/Object/Prediction/PredictionRigidbody2D.cs
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
using FishNet.CodeGenerating;
using FishNet.CodeGenerating;
using FishNet.Managing;
using FishNet.Serializing;
using GameKit.Dependencies.Utilities;
using System.Collections.Generic;
using FishNet.Component.Prediction;
using UnityEngine;

namespace FishNet.Object.Prediction
Expand Down Expand Up @@ -72,16 +73,18 @@ public static PredictionRigidbody2D.EntryData ReadForceData(this Reader r)

public static void WritePredictionRigidbody2D(this Writer w, PredictionRigidbody2D pr)
{
w.Write(pr.Rigidbody2D.GetState());
w.WriteList<PredictionRigidbody2D.EntryData>(pr.GetPendingForces());
}

public static PredictionRigidbody2D ReadPredictionRigidbody2D(this Reader r)
{
List<PredictionRigidbody2D.EntryData> lst = CollectionCaches<PredictionRigidbody2D.EntryData>.RetrieveList();
Rigidbody2DState rs = r.Read<Rigidbody2DState>();
r.ReadList<PredictionRigidbody2D.EntryData>(ref lst);
PredictionRigidbody2D pr = ResettableObjectCaches<PredictionRigidbody2D>.Retrieve();

pr.SetPendingForces(lst);
pr.SetReconcileData(rs, lst);
return pr;
}

Expand Down Expand Up @@ -154,6 +157,14 @@ public EntryData(EntryData fd)
/// </summary>
public Rigidbody2D Rigidbody2D { get; private set; }
#endregion

#region Internal.
/// <summary>
/// Rigidbody2DState set only as reconcile data.
/// </summary>
[System.NonSerialized]
internal Rigidbody2DState Rigidbody2DState;
#endregion

#region Private
/// <summary>
Expand Down Expand Up @@ -286,6 +297,8 @@ public void Reconcile(PredictionRigidbody2D pr)
foreach (EntryData item in pr._pendingForces)
_pendingForces.Add(new EntryData(item));
}
// Set state
Rigidbody2D.SetState(pr.Rigidbody2DState);

ResettableObjectCaches<PredictionRigidbody2D>.Store(pr);
}
Expand Down Expand Up @@ -326,7 +339,12 @@ bool VelocityApplicationTypesContains(ForceApplicationType apt)
}

internal List<EntryData> GetPendingForces() => _pendingForces;
internal void SetPendingForces(List<EntryData> lst) => _pendingForces = lst;

internal void SetReconcileData(Rigidbody2DState rs, List<EntryData> lst)
{
Rigidbody2DState = rs;
_pendingForces = lst;
}

public void ResetState()
{
Expand Down

0 comments on commit 0d1788b

Please sign in to comment.