(ef6edf745) Fixed remote characters frequently getting stuck to the ragdoll state in multiplayer. Happened because the characters are forced to stay in ragdoll mode if they're moving more than 1 m/s, and if the character stops being ragdolled server-side and starts moving, the movement will prevent it from going back to normal state client-side. Now the client will simply determine the ragdoll state based on the ragdoll input from the server.

This commit is contained in:
Joonas Rikkonen
2019-05-06 11:24:37 +03:00
parent 6cfca0437e
commit 44001459c0
17 changed files with 106 additions and 761 deletions
@@ -152,6 +152,32 @@ namespace Barotrauma
}
if (character.MemLocalState.Count > 120) character.MemLocalState.RemoveRange(0, character.MemLocalState.Count - 120);
character.MemState.Clear();
}
}
partial void ImpactProjSpecific(float impact, Body body)
{
float volume = MathHelper.Clamp(impact - 3.0f, 0.5f, 1.0f);
if (body.UserData is Limb limb && character.Stun <= 0f)
{
if (impact > 3.0f) { PlayImpactSound(limb); }
}
else if (body.UserData is Limb || body == Collider.FarseerBody)
{
if (!character.IsRemotePlayer && impact > ImpactTolerance)
{
SoundPlayer.PlayDamageSound("LimbBlunt", strongestImpact, Collider);
}
}
if (Character.Controlled == character)
{
GameMain.GameScreen.Cam.Shake = Math.Min(Math.Max(strongestImpact, GameMain.GameScreen.Cam.Shake), 3.0f);
}
}
if (character.MemState.Count < 1) return;
overrideTargetMovement = Vector2.Zero;