Item position updates include whether the physics body is sleeping, clients disable sleeping bodies

This commit is contained in:
Regalis
2017-02-22 21:27:52 +02:00
parent 13a9b7ea88
commit 75d047b57e

View File

@@ -2072,20 +2072,34 @@ namespace Barotrauma
{
msg.Write(ID);
//length in bytes
msg.Write((byte)(4 + 4 + 1 + 3));
if (body.FarseerBody.Awake)
{
msg.Write((byte)(4 + 4 + 1 + 3));
}
else
{
msg.Write((byte)(4 + 4 + 1));
}
msg.Write(SimPosition.X);
msg.Write(SimPosition.Y);
msg.Write(MathUtils.AngleToByte(body.Rotation));
msg.WriteRangedSingle(MathUtils.WrapAngleTwoPi(body.Rotation), 0.0f, MathHelper.TwoPi, 7);
#if DEBUG
if (Math.Abs(body.LinearVelocity.X)>32.0f || Math.Abs(body.LinearVelocity.Y)>32.0f)
DebugConsole.ThrowError("Item velocity out of range ("+body.LinearVelocity+")");
if (Math.Abs(body.LinearVelocity.X) > 32.0f || Math.Abs(body.LinearVelocity.Y) > 32.0f)
DebugConsole.ThrowError("Item velocity out of range (" + body.LinearVelocity + ")");
#endif
msg.WriteRangedSingle(MathHelper.Clamp(body.LinearVelocity.X, -32.0f, 32.0f), -32.0f, 32.0f, 12);
msg.WriteRangedSingle(MathHelper.Clamp(body.LinearVelocity.Y, -32.0f, 32.0f), -32.0f, 32.0f, 12);
msg.Write(body.FarseerBody.Awake);
if (body.FarseerBody.Awake)
{
body.FarseerBody.Enabled = true;
msg.WriteRangedSingle(MathHelper.Clamp(body.LinearVelocity.X, -32.0f, 32.0f), -32.0f, 32.0f, 12);
msg.WriteRangedSingle(MathHelper.Clamp(body.LinearVelocity.Y, -32.0f, 32.0f), -32.0f, 32.0f, 12);
}
msg.WritePadBits();
lastSentPos = SimPosition;
}
@@ -2097,15 +2111,22 @@ namespace Barotrauma
msg.ReadFloat(),
msg.ReadFloat());
body.FarseerBody.Rotation = MathUtils.ByteToAngle(msg.ReadByte());
body.FarseerBody.Rotation = msg.ReadRangedSingle(0.0f, MathHelper.TwoPi, 7);
body.LinearVelocity = new Vector2(
msg.ReadRangedSingle(-32.0f, 32.0f, 12),
msg.ReadRangedSingle(-32.0f, 32.0f, 12));
body.FarseerBody.Awake = msg.ReadBoolean();
DebugConsole.NewMessage("Received item pos, t: "+sendingTime+ " ("+Name+")", Color.LightGreen);
if (body.FarseerBody.Awake)
{
body.LinearVelocity = new Vector2(
msg.ReadRangedSingle(-32.0f, 32.0f, 12),
msg.ReadRangedSingle(-32.0f, 32.0f, 12));
}
else
{
body.FarseerBody.Enabled = false;
}
DebugConsole.NewMessage("Received item pos, t: "+sendingTime+ " ("+Name+")", Color.LightGreen);
/* //already interpolating with more up-to-date data -> ignore
if (MemPos.Count > 1 && MemPos[0].Timestamp > sendingTime)