< Summary

Information
Class: Trailblazer.Pathing.GeneratedTraversalTransitionBuilder
Assembly: Trailblazer
File(s): /home/runner/work/Trailblazer/Trailblazer/src/Trailblazer/Pathing/Transition/Generation/GeneratedTraversalTransitionBuilder.cs
Line coverage
99%
Covered lines: 342
Uncovered lines: 1
Coverable lines: 343
Total lines: 606
Line coverage: 99.7%
Branch coverage
91%
Covered branches: 95
Total branches: 104
Branch coverage: 91.3%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

File(s)

/home/runner/work/Trailblazer/Trailblazer/src/Trailblazer/Pathing/Transition/Generation/GeneratedTraversalTransitionBuilder.cs

#LineLine coverage
 1using FixedMathSharp;
 2using SwiftCollections;
 3
 4namespace Trailblazer.Pathing;
 5
 6/// <summary>
 7/// Builds generated chart-to-volume transitions from chart cell metadata.
 8/// </summary>
 9internal static class GeneratedTraversalTransitionBuilder
 10{
 11    private const int DefaultGeneratedClimbPathCost = 1;
 12
 113    private static readonly (int Dx, int Dy, int Dz)[] PerpendicularNeighborOffsets =
 114    {
 115        (1, 0, 0),
 116        (-1, 0, 0),
 117        (0, 1, 0),
 118        (0, -1, 0),
 119        (0, 0, 1),
 120        (0, 0, -1)
 121    };
 22
 23    internal static TraversalTransition[] BuildTransitions(
 24        NavigationChart chart,
 25        string transitionIdPrefix)
 26    {
 93027        SwiftList<TraversalTransition> transitions = new();
 93028        int[] generatedIndices = chart.GetGeneratedTransitionIndices();
 197629        for (int i = 0; i < generatedIndices.Length; i++)
 30        {
 5831            chart.DecodeIndex(generatedIndices[i], out int x, out int y, out int z);
 81232            for (int neighborOffsetIndex = 0; neighborOffsetIndex < PerpendicularNeighborOffsets.Length; neighborOffsetI
 33            {
 34834                (int dx, int dy, int dz) = PerpendicularNeighborOffsets[neighborOffsetIndex];
 34835                int neighborX = x + dx;
 34836                int neighborY = y + dy;
 34837                int neighborZ = z + dz;
 34838                if (!chart.IsInBounds(neighborX, neighborY, neighborZ))
 39                    continue;
 40
 10041                NavigationChartCell neighborCell = chart.GetCell(neighborX, neighborY, neighborZ);
 10042                if (!ShouldBuildCandidatePair(
 10043                    x,
 10044                    y,
 10045                    z,
 10046                    neighborX,
 10047                    neighborY,
 10048                    neighborZ,
 10049                    neighborCell))
 50                {
 51                    continue;
 52                }
 53
 7154                TraversalTransition[] pairTransitions = BuildTransitionsForPair(
 7155                    chart,
 7156                    transitionIdPrefix,
 7157                    x,
 7158                    y,
 7159                    z,
 7160                    neighborX,
 7161                    neighborY,
 7162                    neighborZ);
 29063                for (int pairTransitionIndex = 0; pairTransitionIndex < pairTransitions.Length; pairTransitionIndex++)
 7464                    transitions.Add(pairTransitions[pairTransitionIndex]);
 65            }
 66        }
 67
 93068        return transitions.ToArray();
 69    }
 70
 71    internal static TraversalTransition[] BuildTransitionsForPair(
 72        NavigationChart chart,
 73        string transitionIdPrefix,
 74        int firstX,
 75        int firstY,
 76        int firstZ,
 77        int secondX,
 78        int secondY,
 79        int secondZ)
 80    {
 19781        if (!chart.IsInBounds(firstX, firstY, firstZ)
 19782            || !chart.IsInBounds(secondX, secondY, secondZ))
 83        {
 184            return System.Array.Empty<TraversalTransition>();
 85        }
 86
 19687        NavigationChartCell firstCell = chart.GetCell(firstX, firstY, firstZ);
 19688        NavigationChartCell secondCell = chart.GetCell(secondX, secondY, secondZ);
 19689        SwiftList<TraversalTransition> transitions = new(4);
 90
 19691        if (TryBuildTransitionsForPair(
 19692            chart,
 19693            transitionIdPrefix,
 19694            firstX,
 19695            firstY,
 19696            firstZ,
 19697            firstCell,
 19698            secondX,
 19699            secondY,
 196100            secondZ,
 196101            secondCell,
 196102            out TraversalTransition chartToVolumeTransition,
 196103            out TraversalTransition volumeToChartTransition))
 104        {
 39105            transitions.Add(chartToVolumeTransition);
 39106            transitions.Add(volumeToChartTransition);
 107        }
 108
 196109        AddGeneratedClimbTransitionsForPair(
 196110            transitions,
 196111            chart,
 196112            transitionIdPrefix,
 196113            firstX,
 196114            firstY,
 196115            firstZ,
 196116            firstCell,
 196117            secondX,
 196118            secondY,
 196119            secondZ,
 196120            secondCell);
 121
 196122        return transitions.Count == 0
 196123            ? System.Array.Empty<TraversalTransition>()
 196124            : transitions.ToArray();
 125    }
 126
 127    internal static string[] GetPotentialTransitionIdsForPair(
 128        string transitionIdPrefix,
 129        int firstX,
 130        int firstY,
 131        int firstZ,
 132        int secondX,
 133        int secondY,
 134        int secondZ)
 135    {
 75136        return new[]
 75137        {
 75138            CreateGeneratedTransitionId(transitionIdPrefix, TraversalTransitionType.Takeoff, firstX, firstY, firstZ, sec
 75139            CreateGeneratedTransitionId(transitionIdPrefix, TraversalTransitionType.Takeoff, secondX, secondY, secondZ, 
 75140            CreateGeneratedTransitionId(transitionIdPrefix, TraversalTransitionType.Landing, firstX, firstY, firstZ, sec
 75141            CreateGeneratedTransitionId(transitionIdPrefix, TraversalTransitionType.Landing, secondX, secondY, secondZ, 
 75142            CreateGeneratedTransitionId(transitionIdPrefix, TraversalTransitionType.SwimEntry, firstX, firstY, firstZ, s
 75143            CreateGeneratedTransitionId(transitionIdPrefix, TraversalTransitionType.SwimEntry, secondX, secondY, secondZ
 75144            CreateGeneratedTransitionId(transitionIdPrefix, TraversalTransitionType.SwimExit, firstX, firstY, firstZ, se
 75145            CreateGeneratedTransitionId(transitionIdPrefix, TraversalTransitionType.SwimExit, secondX, secondY, secondZ,
 75146            CreateGeneratedTransitionId(transitionIdPrefix, TraversalTransitionType.Climb, firstX, firstY, firstZ, secon
 75147            CreateGeneratedTransitionId(transitionIdPrefix, TraversalTransitionType.Climb, secondX, secondY, secondZ, fi
 75148        };
 149    }
 150
 151    internal static bool CanBuildTransitionsForPairFromChartData(
 152        NavigationChart chart,
 153        int firstX,
 154        int firstY,
 155        int firstZ,
 156        int secondX,
 157        int secondY,
 158        int secondZ)
 159    {
 19160        if (!chart.IsInBounds(firstX, firstY, firstZ)
 19161            || !chart.IsInBounds(secondX, secondY, secondZ))
 162        {
 1163            return false;
 164        }
 165
 18166        NavigationChartCell firstCell = chart.GetCell(firstX, firstY, firstZ);
 18167        NavigationChartCell secondCell = chart.GetCell(secondX, secondY, secondZ);
 18168        return HasSingleBoundaryCandidate(firstCell.GeneratedTransitionMedia, secondCell.GeneratedTransitionMedia)
 18169            || HasGeneratedClimbTransitionsForPair(firstCell, secondCell);
 170    }
 171
 172    private static void AddGeneratedClimbTransitionsForPair(
 173        SwiftList<TraversalTransition> transitions,
 174        NavigationChart chart,
 175        string transitionIdPrefix,
 176        int firstX,
 177        int firstY,
 178        int firstZ,
 179        NavigationChartCell firstCell,
 180        int secondX,
 181        int secondY,
 182        int secondZ,
 183        NavigationChartCell secondCell)
 184    {
 196185        bool firstIsClimbSurface = IsClimbSurface(firstCell);
 196186        bool secondIsClimbSurface = IsClimbSurface(secondCell);
 196187        if (!firstIsClimbSurface && !secondIsClimbSurface)
 107188            return;
 189
 89190        Vector3d firstPosition = chart.GetWorldPosition(firstX, firstY, firstZ);
 89191        Vector3d secondPosition = chart.GetWorldPosition(secondX, secondY, secondZ);
 192
 89193        if (firstIsClimbSurface && secondIsClimbSurface)
 194        {
 20195            transitions.Add(CreateClimbTransition(
 20196                transitionIdPrefix,
 20197                firstX,
 20198                firstY,
 20199                firstZ,
 20200                secondX,
 20201                secondY,
 20202                secondZ,
 20203                firstPosition,
 20204                secondPosition,
 20205                requestsClimbIntent: true));
 20206            transitions.Add(CreateClimbTransition(
 20207                transitionIdPrefix,
 20208                secondX,
 20209                secondY,
 20210                secondZ,
 20211                firstX,
 20212                firstY,
 20213                firstZ,
 20214                secondPosition,
 20215                firstPosition,
 20216                requestsClimbIntent: true));
 20217            return;
 218        }
 219
 69220        if (firstIsClimbSurface
 69221            && IsClimbTransitionSeam(firstCell)
 69222            && secondCell.HasSolid)
 223        {
 16224            transitions.Add(CreateClimbTransition(
 16225                transitionIdPrefix,
 16226                secondX,
 16227                secondY,
 16228                secondZ,
 16229                firstX,
 16230                firstY,
 16231                firstZ,
 16232                secondPosition,
 16233                firstPosition,
 16234                requestsClimbIntent: true));
 16235            transitions.Add(CreateClimbTransition(
 16236                transitionIdPrefix,
 16237                firstX,
 16238                firstY,
 16239                firstZ,
 16240                secondX,
 16241                secondY,
 16242                secondZ,
 16243                firstPosition,
 16244                secondPosition,
 16245                requestsClimbIntent: false));
 16246            return;
 247        }
 248
 53249        if (secondIsClimbSurface
 53250            && IsClimbTransitionSeam(secondCell)
 53251            && firstCell.HasSolid)
 252        {
 1253            transitions.Add(CreateClimbTransition(
 1254                transitionIdPrefix,
 1255                firstX,
 1256                firstY,
 1257                firstZ,
 1258                secondX,
 1259                secondY,
 1260                secondZ,
 1261                firstPosition,
 1262                secondPosition,
 1263                requestsClimbIntent: true));
 1264            transitions.Add(CreateClimbTransition(
 1265                transitionIdPrefix,
 1266                secondX,
 1267                secondY,
 1268                secondZ,
 1269                firstX,
 1270                firstY,
 1271                firstZ,
 1272                secondPosition,
 1273                firstPosition,
 1274                requestsClimbIntent: false));
 275        }
 53276    }
 277
 278    private static bool IsClimbSurface(NavigationChartCell cell) =>
 554279        (cell.Flags & NavigationChartCellFlags.ClimbSurfaceHint) != 0;
 280
 281    private static bool IsClimbTransitionSeam(NavigationChartCell cell) =>
 70282        (cell.Flags & NavigationChartCellFlags.ClimbTransitionHint) != 0;
 283
 284    private static bool IsGeneratedTransitionCandidate(NavigationChartCell cell) =>
 100285        cell.CanGenerateTransition || IsClimbSurface(cell);
 286
 287    private static bool HasGeneratedClimbTransitionsForPair(
 288        NavigationChartCell firstCell,
 289        NavigationChartCell secondCell)
 290    {
 13291        bool firstIsClimbSurface = IsClimbSurface(firstCell);
 13292        bool secondIsClimbSurface = IsClimbSurface(secondCell);
 13293        if (!firstIsClimbSurface && !secondIsClimbSurface)
 12294            return false;
 295
 1296        return (firstIsClimbSurface && secondIsClimbSurface)
 1297            || (firstIsClimbSurface && IsClimbTransitionSeam(firstCell) && secondCell.HasSolid)
 1298            || (secondIsClimbSurface && IsClimbTransitionSeam(secondCell) && firstCell.HasSolid);
 299    }
 300
 301    private static bool ShouldBuildCandidatePair(
 302        int firstX,
 303        int firstY,
 304        int firstZ,
 305        int secondX,
 306        int secondY,
 307        int secondZ,
 308        NavigationChartCell secondCell)
 309    {
 100310        if (!IsGeneratedTransitionCandidate(secondCell))
 42311            return true;
 312
 58313        return IsLexicographicallyBefore(
 58314            firstX,
 58315            firstY,
 58316            firstZ,
 58317            secondX,
 58318            secondY,
 58319            secondZ);
 320    }
 321
 322    private static bool IsLexicographicallyBefore(
 323        int firstX,
 324        int firstY,
 325        int firstZ,
 326        int secondX,
 327        int secondY,
 328        int secondZ)
 329    {
 58330        return firstX < secondX
 58331            || (firstX == secondX && firstY < secondY)
 58332            || (firstX == secondX && firstY == secondY && firstZ < secondZ);
 333    }
 334
 335    private static TraversalTransition CreateClimbTransition(
 336        string transitionIdPrefix,
 337        int sourceX,
 338        int sourceY,
 339        int sourceZ,
 340        int destinationX,
 341        int destinationY,
 342        int destinationZ,
 343        Vector3d sourcePosition,
 344        Vector3d destinationPosition,
 345        bool requestsClimbIntent)
 346    {
 74347        return new TraversalTransition(
 74348            CreateGeneratedTransitionId(
 74349                transitionIdPrefix,
 74350                TraversalTransitionType.Climb,
 74351                sourceX,
 74352                sourceY,
 74353                sourceZ,
 74354                destinationX,
 74355                destinationY,
 74356                destinationZ),
 74357            TraversalTransitionType.Climb,
 74358            TraversalTransitionAnchor.Solid(sourcePosition),
 74359            TraversalTransitionAnchor.Solid(destinationPosition),
 74360            DefaultGeneratedClimbPathCost,
 74361            false,
 74362            requestsClimbIntent);
 363    }
 364
 365    private static bool TryBuildTransitionsForPair(
 366        NavigationChart chart,
 367        string transitionIdPrefix,
 368        int firstX,
 369        int firstY,
 370        int firstZ,
 371        NavigationChartCell firstCell,
 372        int secondX,
 373        int secondY,
 374        int secondZ,
 375        NavigationChartCell secondCell,
 376        out TraversalTransition chartToVolumeTransition,
 377        out TraversalTransition volumeToChartTransition)
 378    {
 196379        chartToVolumeTransition = default;
 196380        volumeToChartTransition = default;
 381
 196382        if (!TryResolveSingleBoundaryCandidate(
 196383            firstCell.GeneratedTransitionMedia,
 196384            secondCell.GeneratedTransitionMedia,
 196385            chart.GetWorldPosition(firstX, firstY, firstZ),
 196386            chart.GetWorldPosition(secondX, secondY, secondZ),
 196387            out Vector3d chartPosition,
 196388            out Vector3d volumePosition,
 196389            out TraversalMedium volumeMedium))
 390        {
 157391            return false;
 392        }
 393
 39394        NavigationChartCell chartCell = chartPosition == chart.GetWorldPosition(firstX, firstY, firstZ)
 39395            ? firstCell
 39396            : secondCell;
 397
 39398        return TryBuildChartVolumeTransitionPair(
 39399            chart,
 39400            transitionIdPrefix,
 39401            chartPosition,
 39402            volumePosition,
 39403            volumeMedium,
 39404            chartCell,
 39405            out chartToVolumeTransition,
 39406            out volumeToChartTransition);
 407    }
 408
 409    private static bool TryResolveSingleBoundaryCandidate(
 410        TraversalMedia firstTransitionMedia,
 411        TraversalMedia secondTransitionMedia,
 412        Vector3d firstPosition,
 413        Vector3d secondPosition,
 414        out Vector3d chartPosition,
 415        out Vector3d volumePosition,
 416        out TraversalMedium volumeMedium)
 417    {
 196418        chartPosition = default;
 196419        volumePosition = default;
 196420        volumeMedium = TraversalMedium.Unknown;
 421
 196422        int candidateCount = 0;
 423
 196424        TryAddChartVolumeCandidate(
 196425            firstTransitionMedia,
 196426            secondTransitionMedia,
 196427            TraversalMedia.Gas,
 196428            TraversalMedium.Gas,
 196429            firstPosition,
 196430            secondPosition,
 196431            ref candidateCount,
 196432            ref chartPosition,
 196433            ref volumePosition,
 196434            ref volumeMedium);
 196435        TryAddChartVolumeCandidate(
 196436            firstTransitionMedia,
 196437            secondTransitionMedia,
 196438            TraversalMedia.Liquid,
 196439            TraversalMedium.Liquid,
 196440            firstPosition,
 196441            secondPosition,
 196442            ref candidateCount,
 196443            ref chartPosition,
 196444            ref volumePosition,
 196445            ref volumeMedium);
 446
 196447        return candidateCount == 1;
 448    }
 449
 450    private static bool HasSingleBoundaryCandidate(
 451        TraversalMedia firstTransitionMedia,
 452        TraversalMedia secondTransitionMedia)
 453    {
 18454        int candidateCount = 0;
 18455        if (((firstTransitionMedia & TraversalMedia.Solid) != 0)
 18456            && ((secondTransitionMedia & TraversalMedia.Gas) != 0))
 457        {
 1458            candidateCount++;
 459        }
 460
 18461        if (((secondTransitionMedia & TraversalMedia.Solid) != 0)
 18462            && ((firstTransitionMedia & TraversalMedia.Gas) != 0))
 463        {
 1464            candidateCount++;
 465        }
 466
 18467        if (((firstTransitionMedia & TraversalMedia.Solid) != 0)
 18468            && ((secondTransitionMedia & TraversalMedia.Liquid) != 0))
 469        {
 2470            candidateCount++;
 471        }
 472
 18473        if (((secondTransitionMedia & TraversalMedia.Solid) != 0)
 18474            && ((firstTransitionMedia & TraversalMedia.Liquid) != 0))
 475        {
 1476            candidateCount++;
 477        }
 478
 18479        return candidateCount == 1;
 480    }
 481
 482    private static void TryAddChartVolumeCandidate(
 483        TraversalMedia firstTransitionMedia,
 484        TraversalMedia secondTransitionMedia,
 485        TraversalMedia candidateVolumeKind,
 486        TraversalMedium candidateVolumeMedium,
 487        Vector3d firstPosition,
 488        Vector3d secondPosition,
 489        ref int candidateCount,
 490        ref Vector3d chartPosition,
 491        ref Vector3d volumePosition,
 492        ref TraversalMedium volumeMedium)
 493    {
 392494        bool firstCanBeChart = (firstTransitionMedia & TraversalMedia.Solid) != 0;
 392495        bool secondCanBeChart = (secondTransitionMedia & TraversalMedia.Solid) != 0;
 392496        bool firstCanBeVolume = (firstTransitionMedia & candidateVolumeKind) != 0;
 392497        bool secondCanBeVolume = (secondTransitionMedia & candidateVolumeKind) != 0;
 498
 392499        if (firstCanBeChart && secondCanBeVolume)
 500        {
 37501            candidateCount++;
 37502            chartPosition = firstPosition;
 37503            volumePosition = secondPosition;
 37504            volumeMedium = candidateVolumeMedium;
 505        }
 506
 392507        if (secondCanBeChart && firstCanBeVolume)
 508        {
 6509            candidateCount++;
 6510            chartPosition = secondPosition;
 6511            volumePosition = firstPosition;
 6512            volumeMedium = candidateVolumeMedium;
 513        }
 392514    }
 515
 516    private static bool TryBuildChartVolumeTransitionPair(
 517        NavigationChart chart,
 518        string transitionIdPrefix,
 519        Vector3d chartPosition,
 520        Vector3d volumePosition,
 521        TraversalMedium volumeMedium,
 522        NavigationChartCell chartCell,
 523        out TraversalTransition chartToVolumeTransition,
 524        out TraversalTransition volumeToChartTransition)
 525    {
 39526        chartToVolumeTransition = default;
 39527        volumeToChartTransition = default;
 528
 529        TraversalTransitionType entryType;
 530        TraversalTransitionType exitType;
 531        TraversalTransitionAnchor volumeAnchor;
 532
 533        switch (volumeMedium)
 534        {
 535            case TraversalMedium.Gas:
 2536                entryType = TraversalTransitionType.Takeoff;
 2537                exitType = TraversalTransitionType.Landing;
 2538                volumeAnchor = TraversalTransitionAnchor.Gas(volumePosition);
 2539                break;
 540            case TraversalMedium.Liquid:
 37541                entryType = TraversalTransitionType.SwimEntry;
 37542                exitType = TraversalTransitionType.SwimExit;
 37543                volumeAnchor = TraversalTransitionAnchor.Liquid(volumePosition);
 37544                break;
 545            default:
 0546                return false;
 547        }
 548
 39549        chart.TryWorldToIndex(chartPosition, out int chartX, out int chartY, out int chartZ);
 39550        chart.TryWorldToIndex(volumePosition, out int volumeX, out int volumeY, out int volumeZ);
 551
 39552        TraversalTransitionAnchor chartAnchor = TraversalTransitionAnchor.Solid(chartPosition);
 39553        chartToVolumeTransition = new TraversalTransition(
 39554            CreateGeneratedTransitionId(
 39555                transitionIdPrefix,
 39556                entryType,
 39557                chartX,
 39558                chartY,
 39559                chartZ,
 39560                volumeX,
 39561                volumeY,
 39562                volumeZ),
 39563            entryType,
 39564            chartAnchor,
 39565            volumeAnchor);
 39566        volumeToChartTransition = new TraversalTransition(
 39567            CreateGeneratedTransitionId(
 39568                transitionIdPrefix,
 39569                exitType,
 39570                volumeX,
 39571                volumeY,
 39572                volumeZ,
 39573                chartX,
 39574                chartY,
 39575                chartZ),
 39576            exitType,
 39577            volumeAnchor,
 39578            chartAnchor,
 39579            requestsClimbIntent: ShouldRequestClimbIntentOnLiquidExit(volumeMedium, chartCell),
 39580            preserveClimbIntentOnFollowup: ShouldRequestClimbIntentOnLiquidExit(volumeMedium, chartCell));
 39581        return true;
 582    }
 583
 584    private static bool ShouldRequestClimbIntentOnLiquidExit(
 585        TraversalMedium volumeMedium,
 586        NavigationChartCell chartCell)
 587    {
 78588        return volumeMedium == TraversalMedium.Liquid
 78589            && IsClimbSurface(chartCell)
 78590            && chartCell.SupportsMedium(TraversalMedium.Liquid);
 591    }
 592
 593    private static string CreateGeneratedTransitionId(
 594        string transitionIdPrefix,
 595        TraversalTransitionType transitionType,
 596        int sourceX,
 597        int sourceY,
 598        int sourceZ,
 599        int destinationX,
 600        int destinationY,
 601        int destinationZ)
 602    {
 902603        return
 902604            $"{transitionIdPrefix}:{transitionType}:{sourceY}_{sourceX}_{sourceZ}->{destinationY}_{destinationX}_{destin
 605    }
 606}

Methods/Properties

.cctor()
BuildTransitions(Trailblazer.Pathing.NavigationChart,System.String)
BuildTransitionsForPair(Trailblazer.Pathing.NavigationChart,System.String,System.Int32,System.Int32,System.Int32,System.Int32,System.Int32,System.Int32)
GetPotentialTransitionIdsForPair(System.String,System.Int32,System.Int32,System.Int32,System.Int32,System.Int32,System.Int32)
CanBuildTransitionsForPairFromChartData(Trailblazer.Pathing.NavigationChart,System.Int32,System.Int32,System.Int32,System.Int32,System.Int32,System.Int32)
AddGeneratedClimbTransitionsForPair(SwiftCollections.SwiftList`1<Trailblazer.Pathing.TraversalTransition>,Trailblazer.Pathing.NavigationChart,System.String,System.Int32,System.Int32,System.Int32,Trailblazer.Pathing.NavigationChartCell,System.Int32,System.Int32,System.Int32,Trailblazer.Pathing.NavigationChartCell)
IsClimbSurface(Trailblazer.Pathing.NavigationChartCell)
IsClimbTransitionSeam(Trailblazer.Pathing.NavigationChartCell)
IsGeneratedTransitionCandidate(Trailblazer.Pathing.NavigationChartCell)
HasGeneratedClimbTransitionsForPair(Trailblazer.Pathing.NavigationChartCell,Trailblazer.Pathing.NavigationChartCell)
ShouldBuildCandidatePair(System.Int32,System.Int32,System.Int32,System.Int32,System.Int32,System.Int32,Trailblazer.Pathing.NavigationChartCell)
IsLexicographicallyBefore(System.Int32,System.Int32,System.Int32,System.Int32,System.Int32,System.Int32)
CreateClimbTransition(System.String,System.Int32,System.Int32,System.Int32,System.Int32,System.Int32,System.Int32,FixedMathSharp.Vector3d,FixedMathSharp.Vector3d,System.Boolean)
TryBuildTransitionsForPair(Trailblazer.Pathing.NavigationChart,System.String,System.Int32,System.Int32,System.Int32,Trailblazer.Pathing.NavigationChartCell,System.Int32,System.Int32,System.Int32,Trailblazer.Pathing.NavigationChartCell,Trailblazer.Pathing.TraversalTransition&,Trailblazer.Pathing.TraversalTransition&)
TryResolveSingleBoundaryCandidate(Trailblazer.Pathing.TraversalMedia,Trailblazer.Pathing.TraversalMedia,FixedMathSharp.Vector3d,FixedMathSharp.Vector3d,FixedMathSharp.Vector3d&,FixedMathSharp.Vector3d&,Trailblazer.TraversalMedium&)
HasSingleBoundaryCandidate(Trailblazer.Pathing.TraversalMedia,Trailblazer.Pathing.TraversalMedia)
TryAddChartVolumeCandidate(Trailblazer.Pathing.TraversalMedia,Trailblazer.Pathing.TraversalMedia,Trailblazer.Pathing.TraversalMedia,Trailblazer.TraversalMedium,FixedMathSharp.Vector3d,FixedMathSharp.Vector3d,System.Int32&,FixedMathSharp.Vector3d&,FixedMathSharp.Vector3d&,Trailblazer.TraversalMedium&)
TryBuildChartVolumeTransitionPair(Trailblazer.Pathing.NavigationChart,System.String,FixedMathSharp.Vector3d,FixedMathSharp.Vector3d,Trailblazer.TraversalMedium,Trailblazer.Pathing.NavigationChartCell,Trailblazer.Pathing.TraversalTransition&,Trailblazer.Pathing.TraversalTransition&)
ShouldRequestClimbIntentOnLiquidExit(Trailblazer.TraversalMedium,Trailblazer.Pathing.NavigationChartCell)
CreateGeneratedTransitionId(System.String,Trailblazer.Pathing.TraversalTransitionType,System.Int32,System.Int32,System.Int32,System.Int32,System.Int32,System.Int32)