From c55c1b6d0ec74ae977641430dc0b6f138038c221 Mon Sep 17 00:00:00 2001 From: juanjp600 Date: Thu, 9 Mar 2017 20:18:19 -0300 Subject: [PATCH] Vastly improved item syncing + Crouch syncing Using SetTransform instead of TargetPosition + a larger margin seems to make the item syncing near-perfect. --- Subsurface/Source/Characters/Character.cs | 15 ++++++++++----- .../Source/Characters/CharacterNetworking.cs | 12 +++++++----- Subsurface/Source/Items/Item.cs | 17 ++++++++--------- 3 files changed, 25 insertions(+), 19 deletions(-) diff --git a/Subsurface/Source/Characters/Character.cs b/Subsurface/Source/Characters/Character.cs index ab6ce84a7..ede70bb04 100644 --- a/Subsurface/Source/Characters/Character.cs +++ b/Subsurface/Source/Characters/Character.cs @@ -670,13 +670,16 @@ namespace Barotrauma //break; case InputType.Down: return !(dequeuedInput.HasFlag(InputNetFlags.Down)) && (prevDequeuedInput.HasFlag(InputNetFlags.Down)); - //break; + //break; case InputType.Run: return !(dequeuedInput.HasFlag(InputNetFlags.Run)) && (prevDequeuedInput.HasFlag(InputNetFlags.Run)); - //break; + //break; + case InputType.Crouch: + return !(dequeuedInput.HasFlag(InputNetFlags.Crouch)) && (prevDequeuedInput.HasFlag(InputNetFlags.Crouch)); + //break; case InputType.Select: return dequeuedInput.HasFlag(InputNetFlags.Select); //TODO: clean up the way this input is registered - //break; + //break; default: return false; //break; @@ -699,9 +702,11 @@ namespace Barotrauma case InputType.Up: return dequeuedInput.HasFlag(InputNetFlags.Up); case InputType.Down: - return dequeuedInput.HasFlag(InputNetFlags.Down); + return dequeuedInput.HasFlag(InputNetFlags.Down); case InputType.Run: - return dequeuedInput.HasFlag(InputNetFlags.Run); + return dequeuedInput.HasFlag(InputNetFlags.Run); + case InputType.Crouch: + return dequeuedInput.HasFlag(InputNetFlags.Crouch); case InputType.Select: return false; //TODO: clean up the way this input is registered case InputType.Aim: diff --git a/Subsurface/Source/Characters/CharacterNetworking.cs b/Subsurface/Source/Characters/CharacterNetworking.cs index f0e1ac9f3..ba6d6dd14 100644 --- a/Subsurface/Source/Characters/CharacterNetworking.cs +++ b/Subsurface/Source/Characters/CharacterNetworking.cs @@ -21,12 +21,13 @@ namespace Barotrauma Down = 0x8, FacingLeft = 0x10, Run = 0x20, - Select = 0x40, - Use = 0x80, - Aim = 0x100, - Attack = 0x200, + Crouch = 0x40, + Select = 0x80, + Use = 0x100, + Aim = 0x200, + Attack = 0x400, - MaxVal = 0x3FF + MaxVal = 0x7FF } private InputNetFlags dequeuedInput = 0; private InputNetFlags prevDequeuedInput = 0; @@ -134,6 +135,7 @@ namespace Barotrauma if (IsKeyDown(InputType.Up)) newInput |= InputNetFlags.Up; if (IsKeyDown(InputType.Down)) newInput |= InputNetFlags.Down; if (IsKeyDown(InputType.Run)) newInput |= InputNetFlags.Run; + if (IsKeyDown(InputType.Crouch)) newInput |= InputNetFlags.Crouch; if (IsKeyHit(InputType.Select)) newInput |= InputNetFlags.Select; //TODO: clean up the way this input is registered if (IsKeyDown(InputType.Use)) newInput |= InputNetFlags.Use; if (IsKeyDown(InputType.Aim)) newInput |= InputNetFlags.Aim; diff --git a/Subsurface/Source/Items/Item.cs b/Subsurface/Source/Items/Item.cs index 5938b56c1..72b1b6d45 100644 --- a/Subsurface/Source/Items/Item.cs +++ b/Subsurface/Source/Items/Item.cs @@ -1543,7 +1543,11 @@ namespace Barotrauma if (Container != null) { - if (body != null) body.Enabled = true; + if (body != null) + { + body.Enabled = true; + body.LinearVelocity = Vector2.Zero; + } SetTransform(Container.SimPosition, 0.0f); Container.RemoveContained(this); @@ -2109,10 +2113,7 @@ namespace Barotrauma body.FarseerBody.Awake = msg.ReadBoolean(); Vector2 newVelocity = Vector2.Zero; - - //TODO: this code should take previous positions and velocities into account, - //rather than use the current values for the comparisons. - + if (body.FarseerBody.Awake) { newVelocity = new Vector2( @@ -2125,11 +2126,9 @@ namespace Barotrauma body.FarseerBody.Enabled = false; } - if (body.TargetPosition==null || (newPosition - (Vector2)body.TargetPosition).Length() > body.LinearVelocity.Length() * 3.0f) + if ((newPosition - SimPosition).Length() > body.LinearVelocity.Length() * 3.0f + 24.0f) { - body.TargetPosition = newPosition; - - body.FarseerBody.Rotation = newRotation; + body.SetTransform(newPosition,newRotation); } DebugConsole.NewMessage("Received item pos, t: "+sendingTime+ " ("+Name+")", Color.LightGreen);