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