Release v0.15.12.0
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
using Microsoft.Xna.Framework;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace Barotrauma
|
||||
@@ -24,16 +25,47 @@ namespace Barotrauma
|
||||
if (Unreachable) { return float.PositiveInfinity; }
|
||||
if (!totalLength.HasValue)
|
||||
{
|
||||
totalLength = 0.0f;
|
||||
for (int i = 0; i < nodes.Count - 1; i++)
|
||||
{
|
||||
totalLength += Vector2.Distance(nodes[i].WorldPosition, nodes[i + 1].WorldPosition);
|
||||
}
|
||||
CalculateTotalLength();
|
||||
}
|
||||
return totalLength.Value;
|
||||
}
|
||||
}
|
||||
|
||||
public float GetLength(int? startIndex = null, int? endIndex = null)
|
||||
{
|
||||
if (Unreachable) { return float.PositiveInfinity; }
|
||||
startIndex ??= 0;
|
||||
endIndex ??= Nodes.Count - 1;
|
||||
if (startIndex == 0 && endIndex == Nodes.Count - 1)
|
||||
{
|
||||
return TotalLength;
|
||||
}
|
||||
if (!totalLength.HasValue)
|
||||
{
|
||||
CalculateTotalLength();
|
||||
}
|
||||
float length = 0.0f;
|
||||
for (int i = startIndex.Value; i < endIndex.Value; i++)
|
||||
{
|
||||
length += nodeDistances[i];
|
||||
}
|
||||
return length;
|
||||
}
|
||||
|
||||
private void CalculateTotalLength()
|
||||
{
|
||||
totalLength = 0.0f;
|
||||
nodeDistances.Clear();
|
||||
for (int i = 0; i < nodes.Count - 1; i++)
|
||||
{
|
||||
float distance = Vector2.Distance(nodes[i].WorldPosition, nodes[i + 1].WorldPosition);
|
||||
totalLength += distance;
|
||||
nodeDistances.Add(distance);
|
||||
}
|
||||
}
|
||||
|
||||
private readonly List<float> nodeDistances = new List<float>();
|
||||
|
||||
public SteeringPath(bool unreachable = false)
|
||||
{
|
||||
nodes = new List<WayPoint>();
|
||||
@@ -107,6 +139,11 @@ namespace Barotrauma
|
||||
currentIndex++;
|
||||
}
|
||||
|
||||
public void SkipToNode(int nodeIndex)
|
||||
{
|
||||
currentIndex = nodeIndex;
|
||||
}
|
||||
|
||||
public WayPoint CheckProgress(Vector2 simPosition, float minSimDistance = 0.1f)
|
||||
{
|
||||
if (nodes.Count == 0 || currentIndex > nodes.Count - 1) { return null; }
|
||||
|
||||
Reference in New Issue
Block a user