Cherry-picked fa84c5b (ragdoll optimization)

This commit is contained in:
Joonas Rikkonen
2018-07-02 16:04:55 +03:00
parent 49c6b177e3
commit 15331c58bb
@@ -93,6 +93,8 @@ namespace Barotrauma
protected List<PhysicsBody> collider; protected List<PhysicsBody> collider;
protected int colliderIndex = 0; protected int colliderIndex = 0;
private Category prevCollisionCategory = Category.None;
public PhysicsBody Collider public PhysicsBody Collider
{ {
get get
@@ -274,11 +276,7 @@ namespace Barotrauma
get { return ignorePlatforms; } get { return ignorePlatforms; }
set set
{ {
if (ignorePlatforms == value) return;
ignorePlatforms = value; ignorePlatforms = value;
UpdateCollisionCategories();
} }
} }
@@ -812,10 +810,7 @@ namespace Barotrauma
} }
CurrentHull = newHull; CurrentHull = newHull;
character.Submarine = currentHull?.Submarine;
character.Submarine = currentHull == null ? null : currentHull.Submarine;
UpdateCollisionCategories();
} }
public void Teleport(Vector2 moveAmount, Vector2 velocityChange) public void Teleport(Vector2 moveAmount, Vector2 velocityChange)
@@ -856,6 +851,9 @@ namespace Barotrauma
wall | Physics.CollisionProjectile | Physics.CollisionStairs wall | Physics.CollisionProjectile | Physics.CollisionStairs
: wall | Physics.CollisionProjectile | Physics.CollisionPlatform | Physics.CollisionStairs; : wall | Physics.CollisionProjectile | Physics.CollisionPlatform | Physics.CollisionStairs;
if (collisionCategory == prevCollisionCategory) return;
prevCollisionCategory = collisionCategory;
Collider.CollidesWith = collisionCategory; Collider.CollidesWith = collisionCategory;
foreach (Limb limb in Limbs) foreach (Limb limb in Limbs)
@@ -881,6 +879,7 @@ namespace Barotrauma
UpdateNetPlayerPosition(deltaTime); UpdateNetPlayerPosition(deltaTime);
CheckDistFromCollider(); CheckDistFromCollider();
UpdateCollisionCategories();
Vector2 flowForce = Vector2.Zero; Vector2 flowForce = Vector2.Zero;
@@ -1268,8 +1267,6 @@ namespace Barotrauma
{ {
//set the position of the ragdoll to make sure limbs don't get stuck inside walls when re-enabling collisions //set the position of the ragdoll to make sure limbs don't get stuck inside walls when re-enabling collisions
SetPosition(Collider.SimPosition, true); SetPosition(Collider.SimPosition, true);
UpdateCollisionCategories();
collisionsDisabled = false; collisionsDisabled = false;
} }
} }