< Summary

Information
Class: Trailblazer.Pathing.NavigationChartCell
Assembly: Trailblazer
File(s): /home/runner/work/Trailblazer/Trailblazer/src/Trailblazer/Pathing/Chart/NavigationChartCell.cs
Line coverage
100%
Covered lines: 35
Uncovered lines: 0
Coverable lines: 35
Total lines: 140
Line coverage: 100%
Branch coverage
100%
Covered branches: 10
Total branches: 10
Branch coverage: 100%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.cctor()100%11100%
get_HasTraversalData()100%11100%
get_HasSolid()100%11100%
get_HasVolume()100%11100%
get_CanGenerateTransition()100%11100%
.ctor(...)100%66100%
SupportsMedium(...)100%44100%

File(s)

/home/runner/work/Trailblazer/Trailblazer/src/Trailblazer/Pathing/Chart/NavigationChartCell.cs

#LineLine coverage
 1using System;
 2
 3namespace Trailblazer.Pathing;
 4
 5/// <summary>
 6/// Represents one authored traversal cell inside a dense <see cref="NavigationChart"/>.
 7/// </summary>
 8[Serializable]
 9public readonly struct NavigationChartCell
 10{
 11    #region Static Presets
 12
 13    /// <summary>
 14    /// A reusable empty authored cell with no traversal data.
 15    /// </summary>
 116    public static readonly NavigationChartCell Empty = new(TraversalMedia.None);
 17
 18    /// <summary>
 19    /// A reusable solid traversal cell with no additional authored metadata.
 20    /// </summary>
 121    public static readonly NavigationChartCell Solid = new(TraversalMedia.Solid);
 22
 23    /// <summary>
 24    /// A reusable gas traversal cell with no additional authored metadata.
 25    /// </summary>
 126    public static readonly NavigationChartCell Gas = new(TraversalMedia.Gas);
 27
 28    /// <summary>
 29    /// A reusable solid-plus-gas traversal cell with no additional authored metadata.
 30    /// </summary>
 131    public static readonly NavigationChartCell SolidGas = new(TraversalMedia.Solid | TraversalMedia.Gas);
 32
 33    /// <summary>
 34    /// A reusable liquid traversal cell with no additional authored metadata.
 35    /// </summary>
 136    public static readonly NavigationChartCell Liquid = new(TraversalMedia.Liquid);
 37
 38    /// <summary>
 39    /// A reusable solid-plus-liquid traversal cell with no additional authored metadata.
 40    /// </summary>
 141    public static readonly NavigationChartCell SolidLiquid = new(TraversalMedia.Solid | TraversalMedia.Liquid);
 42
 43    #endregion
 44
 45    #region Properties
 46
 47    /// <summary>
 48    /// Describes which authored traversal media this cell contributes to.
 49    /// </summary>
 50    public TraversalMedia TraversalKinds { get; }
 51
 52    /// <summary>
 53    /// Returns true when this cell contributes any authored traversal data.
 54    /// </summary>
 1885755    public bool HasTraversalData => TraversalKinds != TraversalMedia.None;
 56
 57    /// <summary>
 58    /// Returns true when this cell contributes chart-backed solid traversal.
 59    /// </summary>
 3632860    public bool HasSolid => (TraversalKinds & TraversalMedia.Solid) != 0;
 61
 62    /// <summary>
 63    /// Returns true when this cell contributes any authored raw-volume traversal data.
 64    /// </summary>
 912965    public bool HasVolume => (TraversalKinds & TraversalMedia.AnyVolume) != 0;
 66
 67    /// <summary>
 68    /// An authored path cost adjustment applied when this cell initializes a live partition.
 69    /// </summary>
 70    public int PathCostModifier { get; }
 71
 72    /// <summary>
 73    /// Optional authored hints currently applied to surface partitions.
 74    /// </summary>
 75    public NavigationChartCellFlags Flags { get; }
 76
 77    /// <summary>
 78    /// Indicates which authored media on this cell participate in generated transition pairing.
 79    /// </summary>
 80    public TraversalMedia GeneratedTransitionMedia { get; }
 81
 82    /// <summary>
 83    /// Returns true when this cell may participate in generated transition pairing.
 84    /// </summary>
 1883985    public bool CanGenerateTransition => GeneratedTransitionMedia != TraversalMedia.None;
 86
 87    #endregion
 88
 89    #region Constructors
 90
 91    /// <summary>
 92    /// Creates a new chart cell payload.
 93    /// </summary>
 94    public NavigationChartCell(
 95        TraversalMedia traversalKinds,
 96        int pathCostModifier = 0,
 97        NavigationChartCellFlags flags = NavigationChartCellFlags.None,
 98        TraversalMedia generatedTransitionMedia = TraversalMedia.None)
 99    {
 606100        bool hasGas = (traversalKinds & TraversalMedia.Gas) != 0;
 606101        bool hasLiquid = (traversalKinds & TraversalMedia.Liquid) != 0;
 606102        bool hasSolid = (traversalKinds & TraversalMedia.Solid) != 0;
 606103        if (hasGas && hasLiquid)
 104        {
 2105            throw new ArgumentException(
 2106                hasSolid
 2107                    ? "A single authored cell cannot currently declare solid, gas, and liquid traversal together."
 2108                    : "A single authored cell cannot currently declare both gas and liquid traversal.",
 2109                nameof(traversalKinds));
 110        }
 111
 604112        if ((generatedTransitionMedia & ~traversalKinds) != 0)
 113        {
 1114            throw new ArgumentException(
 1115                "Generated transition media must be a subset of the authored traversal media.",
 1116                nameof(generatedTransitionMedia));
 117        }
 118
 603119        TraversalKinds = traversalKinds;
 603120        PathCostModifier = pathCostModifier;
 603121        Flags = flags;
 603122        GeneratedTransitionMedia = generatedTransitionMedia;
 603123    }
 124
 125    #endregion
 126
 127    /// <summary>
 128    /// Returns true when this cell contributes the requested traversal medium.
 129    /// </summary>
 130    public bool SupportsMedium(TraversalMedium medium)
 131    {
 19497132        return medium switch
 19497133        {
 8134            TraversalMedium.Solid => (TraversalKinds & TraversalMedia.Solid) != 0,
 9738135            TraversalMedium.Gas => (TraversalKinds & TraversalMedia.Gas) != 0,
 9750136            TraversalMedium.Liquid => (TraversalKinds & TraversalMedia.Liquid) != 0,
 1137            _ => false
 19497138        };
 139    }
 140}