< Summary

Information
Class: Trailblazer.Navigation.GuidedVolumeExitHandoff
Assembly: Trailblazer
File(s): /home/runner/work/Trailblazer/Trailblazer/src/Trailblazer/Navigation/Navigator/Guidance/VolumeExit/GuidedVolumeExitHandoff.cs
Line coverage
97%
Covered lines: 48
Uncovered lines: 1
Coverable lines: 49
Total lines: 103
Line coverage: 97.9%
Branch coverage
94%
Covered branches: 17
Total branches: 18
Branch coverage: 94.4%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor()100%11100%
get_IsValid()100%44100%
TryCreateFollowupRequest(...)92.85%141496.87%
RecordData(...)100%11100%

File(s)

/home/runner/work/Trailblazer/Trailblazer/src/Trailblazer/Navigation/Navigator/Guidance/VolumeExit/GuidedVolumeExitHandoff.cs

#LineLine coverage
 1using Chronicler;
 2using FixedMathSharp;
 3using Trailblazer.Pathing;
 4
 5namespace Trailblazer.Navigation;
 6
 7/// <summary>
 8/// Stores the follow-up chart-backed leg for a object-owned volume exit handoff.
 9/// </summary>
 10internal sealed class GuidedVolumeExitHandoff : IRecordable
 11{
 12    public TrailblazerWorldContext? Context;
 13
 14    public string? TransitionId;
 15
 16    public Vector3d ChartOriginPosition;
 17
 18    public Vector3d TargetPosition;
 19
 20    public SolidPathAlgorithm ChartPathMode = SolidPathAlgorithm.AStar;
 21
 22    public bool AllowUnwalkableEndpoints;
 23
 24    public bool AllowTraversalTransitions;
 25
 7426    public Fixed64 MaxClimbHeight = Fixed64.One;
 27
 28    public HeuristicMethod AStarHeuristic = HeuristicMethod.Manhattan;
 29
 7430    public int FlowFieldExtraFloodRange = FlowFieldPathRequest.DefaultExtraFloodRange;
 31
 7432    public int MovementGroupId = -1;
 33
 34    public bool IsRequestingClimb;
 35
 36    public bool IsValid =>
 6137        !string.IsNullOrWhiteSpace(TransitionId)
 6138        && (ChartPathMode == SolidPathAlgorithm.AStar || ChartPathMode == SolidPathAlgorithm.FlowField);
 39
 40    public bool TryCreateFollowupRequest(
 41        TrailblazerWorldContext context,
 42        Vector3d currentPosition,
 43        Fixed64 unitSize,
 44        out IPathRequest? request)
 45    {
 1746        PathRequestContextResolver.ThrowIfUnusable(context);
 1747        request = null;
 1748        if (!IsValid)
 249            return false;
 1550        switch (ChartPathMode)
 51        {
 52            case SolidPathAlgorithm.AStar:
 953                var aStar = AStarPathRequest.Create(
 954                    context,
 955                    ChartOriginPosition,
 956                    TargetPosition,
 957                    unitSize,
 958                    AStarHeuristic,
 959                    AllowUnwalkableEndpoints,
 960                    AllowTraversalTransitions);
 961                if (aStar == null || !aStar.TrySetOrigin(currentPosition))
 162                    return false;
 63
 864                aStar.MaxClimbHeight = MaxClimbHeight;
 865                request = aStar;
 866                return true;
 67
 68            case SolidPathAlgorithm.FlowField:
 669                var flowField = FlowFieldPathRequest.Create(
 670                    context,
 671                    ChartOriginPosition,
 672                    TargetPosition,
 673                    unitSize,
 674                    AllowUnwalkableEndpoints,
 675                    AllowTraversalTransitions);
 676                if (flowField == null || !flowField.TrySetOrigin(currentPosition))
 177                    return false;
 78
 579                flowField.MaxClimbHeight = MaxClimbHeight;
 580                flowField.ExtraFloodRange = FlowFieldExtraFloodRange;
 581                request = flowField;
 582                return true;
 83
 84            default:
 085                return false;
 86        }
 87    }
 88
 89    public void RecordData(IChronicler chronicler)
 90    {
 1291        RecordValues.Look(chronicler, ref TransitionId, "TransitionId", null);
 1292        RecordValues.Look(chronicler, ref ChartOriginPosition, "ChartOriginPosition", Vector3d.Zero);
 1293        RecordValues.Look(chronicler, ref TargetPosition, "TargetPosition", Vector3d.Zero);
 1294        RecordValues.Look(chronicler, ref ChartPathMode, "ChartPathMode", SolidPathAlgorithm.AStar);
 1295        RecordValues.Look(chronicler, ref AllowUnwalkableEndpoints, "AllowUnwalkableEndpoints", false);
 1296        RecordValues.Look(chronicler, ref AllowTraversalTransitions, "AllowTraversalTransitions", false);
 1297        RecordValues.Look(chronicler, ref MaxClimbHeight, "MaxClimbHeight", Fixed64.One);
 1298        RecordValues.Look(chronicler, ref AStarHeuristic, "AStarHeuristic", HeuristicMethod.Manhattan);
 1299        RecordValues.Look(chronicler, ref FlowFieldExtraFloodRange, "FlowFieldExtraFloodRange", FlowFieldPathRequest.Def
 12100        RecordValues.Look(chronicler, ref MovementGroupId, "MovementGroupId", -1);
 12101        RecordValues.Look(chronicler, ref IsRequestingClimb, "IsRequestingClimb", false);
 12102    }
 103}