Some tweaks to make enemy attacks less likely to miss:

- Option to select which limbs attack force is applied to (e.g. husks and crawlers now lunge forward when attacking).
- Enemies attack towards the closest limb of their target instead of the main limb.
This commit is contained in:
Joonas Rikkonen
2017-06-14 20:38:16 +03:00
parent 242da11e3f
commit 06e23ffe6d
7 changed files with 63 additions and 11 deletions
+20 -5
View File
@@ -449,17 +449,32 @@ namespace Barotrauma
{
attack.DoDamage(character, damageTarget, WorldPosition, 1.0f, (soundTimer <= 0.0f));
soundTimer = Limb.SoundInterval;
soundTimer = SoundInterval;
}
}
Vector2 diff = attackPosition - SimPosition;
if (diff.LengthSquared() > 0.00001f)
if (diff.LengthSquared() < 0.00001f) return;
if (attack.ApplyForceOnLimbs != null)
{
Vector2 pos = pullJoint == null ? body.SimPosition : pullJoint.WorldAnchorA;
body.ApplyLinearImpulse(Mass * attack.Force *
Vector2.Normalize(attackPosition - SimPosition), pos);
foreach (int limbIndex in attack.ApplyForceOnLimbs)
{
if (limbIndex < 0 || limbIndex >= character.AnimController.Limbs.Length) continue;
Limb limb = character.AnimController.Limbs[limbIndex];
Vector2 forcePos = limb.pullJoint == null ? limb.body.SimPosition : limb.pullJoint.WorldAnchorA;
limb.body.ApplyLinearImpulse(
limb.Mass * attack.Force * Vector2.Normalize(attackPosition - SimPosition), forcePos);
}
}
else
{
Vector2 forcePos = pullJoint == null ? body.SimPosition : pullJoint.WorldAnchorA;
body.ApplyLinearImpulse(Mass * attack.Force *
Vector2.Normalize(attackPosition - SimPosition), forcePos);
}
}
public void Draw(SpriteBatch spriteBatch)