public PlayerLagCompensationSnapshot InterpolateLagCompensationSnapshots( PlayerLagCompensationSnapshot snapshot1, PlayerLagCompensationSnapshot snapshot2, float rewoundTime ) { var interpolationPercent = (rewoundTime - snapshot1.Time) / (snapshot2.Time - snapshot1.Time); return(new PlayerLagCompensationSnapshot { Time = Mathf.Lerp(snapshot1.Time, snapshot2.Time, interpolationPercent), Position = Vector3.Lerp(snapshot1.Position, snapshot2.Position, interpolationPercent), LookDirAngles = Vector2.Lerp( snapshot1.LookDirAngles, snapshot2.LookDirAngles, interpolationPercent ) }); }
public void ApplyLagCompensationSnapshot( PlayerObjectComponent playerObjectComponent, PlayerLagCompensationSnapshot snapshot ) { playerObjectComponent.transform.position = snapshot.Position; ApplyLookDirAnglesToPlayer(playerObjectComponent, snapshot.LookDirAngles); if (OsFps.ShowLagCompensationOnServer) { var tmpCube = GameObject.CreatePrimitive(PrimitiveType.Cube); tmpCube.transform.position = snapshot.Position + (2 * new float3(0, 1, 0)); tmpCube.transform.localScale = 0.25f * Vector3.one; tmpCube.transform.eulerAngles = new Vector3(snapshot.LookDirAngles.x, snapshot.LookDirAngles.y); Object.DestroyImmediate(tmpCube.GetComponent <BoxCollider>()); Object.Destroy(tmpCube, 2); } }