v0.14.6.0

This commit is contained in:
Joonas Rikkonen
2021-06-17 17:54:52 +03:00
parent 3f324b14e8
commit c27e2ea5ab
348 changed files with 13156 additions and 4266 deletions
@@ -8,7 +8,7 @@ namespace Barotrauma
{
class AIObjectiveGoTo : AIObjective
{
public override string DebugTag => "go to";
public override string Identifier { get; set; } = "go to";
private AIObjectiveFindDivingGear findDivingGear;
private readonly bool repeat;
@@ -20,10 +20,6 @@ namespace Barotrauma
/// Doesn't allow the objective to complete if this condition is false
/// </summary>
public Func<bool> requiredCondition;
/// <summary>
/// Aborts the objective when this condition is true
/// </summary>
public Func<AIObjectiveGoTo, bool> abortCondition;
public Func<PathNode, bool> endNodeFilter;
public Func<float> priorityGetter;
@@ -38,6 +34,7 @@ namespace Barotrauma
private readonly float minDistance = 50;
private readonly float seekGapsInterval = 1;
private float seekGapsTimer;
private bool cannotFollow;
/// <summary>
/// Display units
@@ -81,7 +78,7 @@ namespace Barotrauma
public float? OverridePriority = null;
public override float GetPriority()
protected override float GetPriority()
{
bool isOrder = objectiveManager.IsOrder(this);
if (!IsAllowed)
@@ -177,6 +174,11 @@ namespace Barotrauma
character.AIController.SteeringManager.Reset();
return;
}
if (cannotFollow)
{
// Wait
character.AIController.SteeringManager.Reset();
}
waitUntilPathUnreachable -= deltaTime;
if (!character.IsClimbing)
{
@@ -263,16 +265,29 @@ namespace Barotrauma
if (findDivingGear != null && !findDivingGear.CanBeCompleted)
{
TryAddSubObjective(ref findDivingGear, () => new AIObjectiveFindDivingGear(character, needsDivingSuit: false, objectiveManager),
onAbandon: () => Abandon = true,
onCompleted: () => RemoveSubObjective(ref findDivingGear));
onAbandon: () => Abort(),
onCompleted: () =>
{
cannotFollow = false;
RemoveSubObjective(ref findDivingGear);
});
}
else
{
TryAddSubObjective(ref findDivingGear, () => new AIObjectiveFindDivingGear(character, needsDivingSuit, objectiveManager),
onCompleted: () => RemoveSubObjective(ref findDivingGear));
onAbandon: () => Abort(),
onCompleted: () =>
{
cannotFollow = false;
RemoveSubObjective(ref findDivingGear);
});
}
return;
}
else
{
cannotFollow = false;
}
}
if (repeat)
{
@@ -578,22 +593,15 @@ namespace Barotrauma
}
}
protected override bool Check()
protected override bool CheckObjectiveSpecific()
{
if (IsCompleted) { return true; }
// First check the distance
// Then the custom condition
// And finally check if can interact (heaviest)
// First check the distance and then if can interact (heaviest)
if (Target == null)
{
Abandon = true;
return false;
}
if (abortCondition != null && abortCondition(this))
{
Abandon = true;
return false;
}
if (repeat)
{
return false;
@@ -624,6 +632,18 @@ namespace Barotrauma
return IsCompleted;
}
private void Abort()
{
if (!objectiveManager.IsOrder(this))
{
Abandon = true;
}
else
{
cannotFollow = true;
}
}
protected override void OnAbandon()
{
StopMovement();
@@ -657,6 +677,7 @@ namespace Barotrauma
findDivingGear = null;
seekGapsTimer = 0;
TargetGap = null;
cannotFollow = false;
}
}
}