(2cf47ee24) Cherry pick some steering fixes from the human-ai branch: fix ladder usage while swimming.

This commit is contained in:
Joonas Rikkonen
2019-04-26 11:18:47 +03:00
parent 010411d434
commit 8919bf5c10
@@ -218,13 +218,13 @@ namespace Barotrauma
} }
else if (character.Submarine != currentPath.CurrentNode.Submarine) else if (character.Submarine != currentPath.CurrentNode.Submarine)
{ {
pos -= FarseerPhysics.ConvertUnits.ToSimUnits(currentPath.CurrentNode.Submarine.Position-character.Submarine.Position); pos -= FarseerPhysics.ConvertUnits.ToSimUnits(currentPath.CurrentNode.Submarine.Position - character.Submarine.Position);
} }
} }
} }
//only humanoids can climb ladders //only humanoids can climb ladders
if (character.AnimController is HumanoidAnimController && IsNextLadderSameAsCurrent) if (!character.AnimController.InWater && character.AnimController is HumanoidAnimController && IsNextLadderSameAsCurrent)
{ {
if (character.SelectedConstruction != currentPath.CurrentNode.Ladders.Item && if (character.SelectedConstruction != currentPath.CurrentNode.Ladders.Item &&
currentPath.CurrentNode.Ladders.Item.IsInsideTrigger(character.WorldPosition)) currentPath.CurrentNode.Ladders.Item.IsInsideTrigger(character.WorldPosition))
@@ -234,7 +234,7 @@ namespace Barotrauma
} }
var collider = character.AnimController.Collider; var collider = character.AnimController.Collider;
if (character.IsClimbing) if (character.IsClimbing && !character.AnimController.InWater)
{ {
Vector2 diff = currentPath.CurrentNode.SimPosition - pos; Vector2 diff = currentPath.CurrentNode.SimPosition - pos;
bool nextLadderSameAsCurrent = IsNextLadderSameAsCurrent; bool nextLadderSameAsCurrent = IsNextLadderSameAsCurrent;
@@ -278,6 +278,12 @@ namespace Barotrauma
} }
else if (character.AnimController.InWater) else if (character.AnimController.InWater)
{ {
// If the character is underwater, we don't need the ladders anymore
if (character.IsClimbing)
{
character.AnimController.Anim = AnimController.Animation.None;
character.SelectedConstruction = null;
}
if (Vector2.DistanceSquared(pos, currentPath.CurrentNode.SimPosition) < MathUtils.Pow(collider.radius * 3, 2)) if (Vector2.DistanceSquared(pos, currentPath.CurrentNode.SimPosition) < MathUtils.Pow(collider.radius * 3, 2))
{ {
currentPath.SkipToNextNode(); currentPath.SkipToNextNode();