protected override void BeforePhysics(float delta)
{
base.BeforePhysics(delta);
MergeJitterBuffer();
ApplyLagComp();
var ents = EntityManager.GetEntities(Aspect.One(typeof(NetPhysicsObject)));
foreach (var ent in ents)
{
var dObj = ent.GetComponent<NetPhysicsObject>();
float X = dObj.position_error.X;
float Y = dObj.position_error.Y;
if (Math.Abs(dObj.position_error.X) >= 0.00001f)
if (Math.Abs(dObj.position_error.X) >= 1f)
X *= 0.975f;
else
X *= 0.975f;
else
X = 0;
if (Math.Abs(dObj.position_error.Y) >= 0.00001f)
if (Math.Abs(dObj.position_error.Y) >= 1f)
Y *= 0.975f;
else
Y *= 0.975f;
else
Y = 0;
var phyComp = ent.GetComponent<Physics2dComponent>();
if (phyComp != null && phyComp.Body != null)
{
float d = dObj.rotation_slerp - phyComp.Body.Rotation;
if (!dObj.PlayerControlled && Math.Abs(d) >= 0.01f)
{
dObj.rotation_slerp = phyComp.Body.Rotation;
// dObj.rotation_slerp = MathHelper.Lerp(dObj.rotation_slerp, phyComp.Body.Rotation, 0.2f);
// System.Diagnostics.Trace.WriteLine("slerp => " + dObj.rotation_slerp + " "
// + dObj.rotation_error + " " + phyComp.Body.Rotation);
//dObj.rotation_error = dObj.rotation_slerp;
}
else if (!dObj.PlayerControlled)
{
// System.Diagnostics.Trace.WriteLine("break out => " + phyComp.Body.Rotation);
dObj.rotation_slerp = phyComp.Body.Rotation;
}
}
dObj.position_error = new Vector2(X, Y);
}
}