< Summary

Information
Class: Trailblazer.Pathing.NavigationGuideStatusMapper
Assembly: Trailblazer
File(s): /home/runner/work/Trailblazer/Trailblazer/src/Trailblazer/Pathing/Search/AStar/NavigationGuideLease.cs
Line coverage
100%
Covered lines: 48
Uncovered lines: 0
Coverable lines: 48
Total lines: 149
Line coverage: 100%
Branch coverage
100%
Covered branches: 33
Total branches: 33
Branch coverage: 100%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
ToPublic(...)100%1212100%
ToPublic(...)100%1212100%
ToPublic(...)100%55100%
ToFlowField(...)100%44100%

File(s)

/home/runner/work/Trailblazer/Trailblazer/src/Trailblazer/Pathing/Search/AStar/NavigationGuideLease.cs

#LineLine coverage
 1//=======================================================================
 2// NavigationGuideLease.cs
 3//=======================================================================
 4// MIT License, Copyright (c) 2024-present David Oravsky (mrdav30)
 5// See LICENSE file in the project root for full license information.
 6//=======================================================================
 7
 8using System;
 9using FixedMathSharp;
 10
 11namespace Trailblazer.Pathing;
 12
 13/// <summary>Owns one graph-backed A* payload reference and its guide-local step cursor.</summary>
 14public readonly struct NavigationGuideLease : IDisposable
 15{
 16    private readonly NavigationAStarGuideLease? _inner;
 17    private readonly long _generation;
 18
 19    internal NavigationGuideLease(NavigationAStarGuideLease inner)
 20    {
 21        _inner = inner;
 22        _generation = inner.Generation;
 23    }
 24
 25    /// <summary>Gets the lease's current dependency-validated status.</summary>
 26    public NavigationGuideStatus Status => NavigationGuideStatusMapper.ToPublic(
 27        _inner?.GetStatus(_generation) ?? NavigationAStarQueryStatus.Stale);
 28
 29    /// <summary>Gets the zero-based guide-local step cursor.</summary>
 30    public int CurrentStepIndex => _inner?.GetCurrentWaypointOrdinal(_generation) ?? -1;
 31
 32    /// <summary>Gets the immutable number of movement and action steps in the leased route.</summary>
 33    public int StepCount => _inner?.GetWaypointCount(_generation) ?? 0;
 34
 35    /// <summary>Gets the immutable exact fixed-point cost of the complete route.</summary>
 36    public Fixed64 TotalCost => _inner?.GetTotalCost(_generation) ?? Fixed64.Zero;
 37
 38    /// <summary>Gets the current dependency-validated movement or action step.</summary>
 39    public NavigationGuideStatus TryGetCurrentStep(out NavigationGuideStep step)
 40    {
 41        NavigationAStarGuideLease? inner = _inner;
 42        if (inner == null)
 43        {
 44            step = default;
 45            return NavigationGuideStatus.Stale;
 46        }
 47
 48        return NavigationGuideStatusMapper.ToPublic(
 49            inner.TryGetCurrentStep(
 50                _generation,
 51                out step));
 52    }
 53
 54    /// <summary>Advances one ordinary movement step; a pending action cannot be crossed.</summary>
 55    public NavigationGuideStatus TryAdvanceStep()
 56    {
 57        return _inner == null
 58            ? NavigationGuideStatus.Stale
 59            : NavigationGuideStatusMapper.ToPublic(
 60                _inner.TryAdvanceWaypoint(_generation));
 61    }
 62
 63    /// <summary>Completes the exact current pending semantic action.</summary>
 64    public NavigationGuideStatus CompletePendingTransition(
 65        in NavigationTransitionInstruction instruction) =>
 66        _inner == null
 67            ? NavigationGuideStatus.Stale
 68            : NavigationGuideStatusMapper.ToPublic(
 69                _inner.CompletePendingTransition(_generation, instruction));
 70
 71    /// <inheritdoc />
 72    public void Dispose() => _inner?.Dispose(_generation);
 73}
 74
 75internal static class NavigationGuideStatusMapper
 76{
 93577    internal static NavigationGuideStatus ToPublic(NavigationAStarQueryStatus status) => status switch
 93578    {
 86479        NavigationAStarQueryStatus.Success => NavigationGuideStatus.Success,
 180        NavigationAStarQueryStatus.Unsupported => NavigationGuideStatus.Unsupported,
 281        NavigationAStarQueryStatus.NoMap => NavigationGuideStatus.NoMap,
 282        NavigationAStarQueryStatus.InvalidProfile => NavigationGuideStatus.InvalidProfile,
 283        NavigationAStarQueryStatus.InvalidStart => NavigationGuideStatus.InvalidStart,
 484        NavigationAStarQueryStatus.InvalidEnd => NavigationGuideStatus.InvalidEnd,
 1385        NavigationAStarQueryStatus.NoPath => NavigationGuideStatus.NoPath,
 486        NavigationAStarQueryStatus.BudgetExceeded => NavigationGuideStatus.BudgetExceeded,
 287        NavigationAStarQueryStatus.CostOverflow => NavigationGuideStatus.CostOverflow,
 888        NavigationAStarQueryStatus.CapacityExceeded => NavigationGuideStatus.CapacityExceeded,
 3089        NavigationAStarQueryStatus.Stale => NavigationGuideStatus.Stale,
 390        _ => NavigationGuideStatus.Stale
 93591    };
 92
 2393    internal static NavigationGuideStatus ToPublic(NavigationFlowQueryStatus status) => status switch
 2394    {
 195        NavigationFlowQueryStatus.Success => NavigationGuideStatus.Success,
 196        NavigationFlowQueryStatus.Unsupported => NavigationGuideStatus.Unsupported,
 297        NavigationFlowQueryStatus.NoMap => NavigationGuideStatus.NoMap,
 198        NavigationFlowQueryStatus.InvalidProfile => NavigationGuideStatus.InvalidProfile,
 299        NavigationFlowQueryStatus.InvalidStart => NavigationGuideStatus.InvalidStart,
 4100        NavigationFlowQueryStatus.InvalidEnd => NavigationGuideStatus.InvalidEnd,
 3101        NavigationFlowQueryStatus.NoPath => NavigationGuideStatus.NoPath,
 2102        NavigationFlowQueryStatus.BudgetExceeded => NavigationGuideStatus.BudgetExceeded,
 2103        NavigationFlowQueryStatus.CostOverflow => NavigationGuideStatus.CostOverflow,
 2104        NavigationFlowQueryStatus.CapacityExceeded => NavigationGuideStatus.CapacityExceeded,
 2105        NavigationFlowQueryStatus.Stale => NavigationGuideStatus.Stale,
 1106        _ => NavigationGuideStatus.Stale
 23107    };
 108
 109    internal static NavigationGuideStatus ToPublic(NavigationRayStatus status)
 110    {
 111        System.Diagnostics.Debug.Assert(status is
 112            NavigationRayStatus.Blocked or
 113            NavigationRayStatus.BudgetExceeded or
 114            NavigationRayStatus.CostOverflow or
 115            NavigationRayStatus.CapacityExceeded or
 116            NavigationRayStatus.Stale,
 117            "Ray recovery maps only terminal statuses not handled by its caller.");
 19118        return status switch
 19119        {
 5120            NavigationRayStatus.Blocked => NavigationGuideStatus.LocalRecoveryRequired,
 9121            NavigationRayStatus.BudgetExceeded => NavigationGuideStatus.BudgetExceeded,
 1122            NavigationRayStatus.CostOverflow => NavigationGuideStatus.CostOverflow,
 2123            NavigationRayStatus.CapacityExceeded => NavigationGuideStatus.CapacityExceeded,
 2124            _ => NavigationGuideStatus.Stale
 19125        };
 126    }
 127
 128    internal static NavigationFlowFieldStatus ToFlowField(
 129        NavigationTraversalEdgeAdvanceStatus status)
 130    {
 131        System.Diagnostics.Debug.Assert(status is
 132            NavigationTraversalEdgeAdvanceStatus.Complete or
 133            NavigationTraversalEdgeAdvanceStatus.BudgetExceeded or
 134            NavigationTraversalEdgeAdvanceStatus.CostOverflow or
 135            NavigationTraversalEdgeAdvanceStatus.CapacityExceeded or
 136            NavigationTraversalEdgeAdvanceStatus.Stale,
 137            "Flow traversal maps only terminal statuses not handled by its caller.");
 9138        return status switch
 9139        {
 9140            NavigationTraversalEdgeAdvanceStatus.BudgetExceeded =>
 4141                NavigationFlowFieldStatus.BudgetExceeded,
 9142            NavigationTraversalEdgeAdvanceStatus.CostOverflow =>
 2143                NavigationFlowFieldStatus.CostOverflow,
 9144            NavigationTraversalEdgeAdvanceStatus.CapacityExceeded =>
 1145                NavigationFlowFieldStatus.CapacityExceeded,
 2146            _ => NavigationFlowFieldStatus.Stale
 9147        };
 148    }
 149}