(7d0cf0d4f) Clamp forces in a bunch of more places where forces are applied to bodies

This commit is contained in:
Joonas Rikkonen
2019-04-03 16:21:38 +03:00
parent 0844f1eae4
commit 8de2eccff2
7 changed files with 26 additions and 20 deletions
@@ -1,4 +1,5 @@
using FarseerPhysics; using Barotrauma.Networking;
using FarseerPhysics;
using FarseerPhysics.Dynamics.Joints; using FarseerPhysics.Dynamics.Joints;
using Microsoft.Xna.Framework; using Microsoft.Xna.Framework;
using System; using System;
@@ -314,7 +315,7 @@ namespace Barotrauma
//pull the character's mouth to the target character (again with a fluctuating force) //pull the character's mouth to the target character (again with a fluctuating force)
float pullStrength = (float)(Math.Sin(eatTimer) * Math.Max(Math.Sin(eatTimer * 0.5f), 0.0f)); float pullStrength = (float)(Math.Sin(eatTimer) * Math.Max(Math.Sin(eatTimer * 0.5f), 0.0f));
mouthLimb.body.ApplyForce(limbDiff * mouthLimb.Mass * 50.0f * pullStrength); mouthLimb.body.ApplyForce(limbDiff * mouthLimb.Mass * 50.0f * pullStrength, maxVelocity: NetConfig.MaxPhysicsBodyVelocity);
character.ApplyStatusEffects(ActionType.OnEating, deltaTime); character.ApplyStatusEffects(ActionType.OnEating, deltaTime);
@@ -695,7 +696,7 @@ namespace Barotrauma
return; return;
} }
limb.body.ApplyForce(diff * (float)(Math.Sin(WalkPos) * Math.Sqrt(limb.Mass)) * 30.0f * animStrength); limb.body.ApplyForce(diff * (float)(Math.Sin(WalkPos) * Math.Sqrt(limb.Mass)) * 30.0f * animStrength, maxVelocity: 10.0f);
} }
} }
@@ -5,6 +5,7 @@ using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using Barotrauma.Extensions; using Barotrauma.Extensions;
using Barotrauma.Networking;
namespace Barotrauma namespace Barotrauma
{ {
@@ -1189,7 +1190,7 @@ namespace Barotrauma
if (character.SimPosition.Y > ladderSimPos.Y) { climbForce.Y = Math.Min(0.0f, climbForce.Y); } if (character.SimPosition.Y > ladderSimPos.Y) { climbForce.Y = Math.Min(0.0f, climbForce.Y); }
//apply forces to the collider to move the Character up/down //apply forces to the collider to move the Character up/down
Collider.ApplyForce((climbForce * 20.0f + subSpeed * 50.0f) * Collider.Mass); Collider.ApplyForce((climbForce * 20.0f + subSpeed * 50.0f) * Collider.Mass, maxVelocity: NetConfig.MaxPhysicsBodyVelocity);
head.body.SmoothRotate(0.0f); head.body.SmoothRotate(0.0f);
if (!character.SelectedConstruction.Prefab.Triggers.Any()) if (!character.SelectedConstruction.Prefab.Triggers.Any())
@@ -1347,8 +1348,8 @@ namespace Barotrauma
if (cprPump >= 1) if (cprPump >= 1)
{ {
torso.body.ApplyForce(new Vector2(0, -1000f)); torso.body.ApplyLinearImpulse(new Vector2(0, -20f), maxVelocity: NetConfig.MaxPhysicsBodyVelocity);
targetTorso.body.ApplyForce(new Vector2(0, -1000f)); targetTorso.body.ApplyLinearImpulse(new Vector2(0, -20f), maxVelocity: NetConfig.MaxPhysicsBodyVelocity);
cprPump = 0; cprPump = 0;
if (skill < CPRSettings.DamageSkillThreshold) if (skill < CPRSettings.DamageSkillThreshold)
@@ -1,5 +1,6 @@
using System.Xml.Linq; using System.Xml.Linq;
using Microsoft.Xna.Framework; using Microsoft.Xna.Framework;
using Barotrauma.Networking;
#if CLIENT #if CLIENT
using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Graphics;
using Barotrauma.Particles; using Barotrauma.Particles;
@@ -83,15 +84,20 @@ namespace Barotrauma.Items.Components
foreach (Limb limb in character.AnimController.Limbs) foreach (Limb limb in character.AnimController.Limbs)
{ {
if (limb.WearingItems.Find(w => w.WearableComponent.Item == this.item)==null) continue; if (limb.WearingItems.Find(w => w.WearableComponent.Item == this.item) == null) continue;
limb.body.ApplyForce(propulsion, maxVelocity: NetConfig.MaxPhysicsBodyVelocity);
limb.body.ApplyForce(propulsion);
} }
character.AnimController.Collider.ApplyForce(propulsion); character.AnimController.Collider.ApplyForce(propulsion, maxVelocity: NetConfig.MaxPhysicsBodyVelocity);
if (character.SelectedItems[0] == item) character.AnimController.GetLimb(LimbType.RightHand).body.ApplyForce(propulsion); if (character.SelectedItems[0] == item)
if (character.SelectedItems[1] == item) character.AnimController.GetLimb(LimbType.LeftHand).body.ApplyForce(propulsion); {
character.AnimController.GetLimb(LimbType.RightHand)?.body.ApplyForce(propulsion, maxVelocity: NetConfig.MaxPhysicsBodyVelocity);
}
if (character.SelectedItems[1] == item)
{
character.AnimController.GetLimb(LimbType.LeftHand)?.body.ApplyForce(propulsion, maxVelocity: NetConfig.MaxPhysicsBodyVelocity);
}
#if CLIENT #if CLIENT
if (!string.IsNullOrWhiteSpace(particles)) if (!string.IsNullOrWhiteSpace(particles))
@@ -26,10 +26,6 @@ namespace Barotrauma.Items.Components
private float blinkTimer; private float blinkTimer;
private bool itemLoaded;
private float blinkTimer;
public PhysicsBody ParentBody; public PhysicsBody ParentBody;
[Editable(MinValueFloat = 0.0f, MaxValueFloat = 2048.0f), Serialize(100.0f, true)] [Editable(MinValueFloat = 0.0f, MaxValueFloat = 2048.0f), Serialize(100.0f, true)]
@@ -315,7 +315,7 @@ namespace Barotrauma.Items.Components
Vector2 diff = nodes[nodes.Count - 1] - newNodePos; Vector2 diff = nodes[nodes.Count - 1] - newNodePos;
Vector2 pullBackDir = diff == Vector2.Zero ? Vector2.Zero : Vector2.Normalize(diff); Vector2 pullBackDir = diff == Vector2.Zero ? Vector2.Zero : Vector2.Normalize(diff);
user.AnimController.Collider.ApplyForce(pullBackDir * user.Mass * 50.0f); user.AnimController.Collider.ApplyForce(pullBackDir * user.Mass * 50.0f, maxVelocity: NetConfig.MaxPhysicsBodyVelocity);
user.AnimController.UpdateUseItem(true, user.WorldPosition + pullBackDir * 200.0f); user.AnimController.UpdateUseItem(true, user.WorldPosition + pullBackDir * 200.0f);
if (GameMain.NetworkMember == null || GameMain.NetworkMember.IsServer) if (GameMain.NetworkMember == null || GameMain.NetworkMember.IsServer)
@@ -1,4 +1,5 @@
using Barotrauma.Items.Components; using Barotrauma.Items.Components;
using Barotrauma.Networking;
using FarseerPhysics; using FarseerPhysics;
using Microsoft.Xna.Framework; using Microsoft.Xna.Framework;
using System; using System;
@@ -310,7 +311,7 @@ namespace Barotrauma
errorMsg); errorMsg);
continue; continue;
} }
character.AnimController.Collider.ApplyForce(force * limb.body.Mass); character.AnimController.Collider.ApplyForce(force * limb.body.Mass, maxVelocity: NetConfig.MaxPhysicsBodyVelocity);
} }
} }
} }
@@ -1,4 +1,5 @@
using FarseerPhysics; using Barotrauma.Networking;
using FarseerPhysics;
using FarseerPhysics.Collision; using FarseerPhysics.Collision;
using FarseerPhysics.Common; using FarseerPhysics.Common;
using FarseerPhysics.Dynamics; using FarseerPhysics.Dynamics;
@@ -368,7 +369,7 @@ namespace Barotrauma
public void ApplyForce(Vector2 force) public void ApplyForce(Vector2 force)
{ {
Body.ApplyForce(force); Body.ApplyForce(force, maxVelocity: NetConfig.MaxPhysicsBodyVelocity);
} }
public void SetPosition(Vector2 position) public void SetPosition(Vector2 position)