/**
 * Bungie.Net API
 * These endpoints constitute the functionality exposed by Bungie.net, both for more traditional website functionality and for connectivity to Bungie video games and their related functionality.
 *
 * Contact: support@bungie.com
 *
 * NOTE: This class is auto generated by the bungie-net-core code generator program
 * Repository: {@link https://github.com/owens1127/bungie-net-core}
 * Do not edit these files manually.
 */
import { DestinyNodeActivationRequirement } from './DestinyNodeActivationRequirement';
import { DestinyNodeStepDefinition } from './DestinyNodeStepDefinition';
/**
 * Talent Grids on items have Nodes. These nodes have positions in the talent grid'
 * s UI, and contain "Steps" (DestinyTalentNodeStepDefinition), one of whom will be
 * the "Current" step.
 *
 * The Current Step determines the visual properties of the node, as well as what
 * the node grants when it is activated.
 *
 * See DestinyTalentGridDefinition for a more complete overview of how Talent Grids
 * work, and how they are used in Destiny 2 (and how they were used in Destiny 1).
 * @see {@link https://bungie-net.github.io/#/components/schemas/Destiny.Definitions.DestinyTalentNodeDefinition}
 */
export interface DestinyTalentNodeDefinition {
    /**
     * The index into the DestinyTalentGridDefinition's "nodes" property where this
     * node is located. Used to uniquely identify the node within the Talent Grid. Note
     * that this is content version dependent: make sure you have the latest version of
     * content before trying to use these properties.
     */
    readonly nodeIndex: number;
    /**
     * The hash identifier for the node, which unfortunately is also content version
     * dependent but can be (and ideally, should be) used instead of the nodeIndex to
     * uniquely identify the node.
     *
     * The two exist side-by-side for backcompat reasons due to the Great Talent Node
     * Restructuring of Destiny 1, and I ran out of time to remove one of them and
     * standardize on the other. Sorry!
     */
    readonly nodeHash: number;
    /**
     * The visual "row" where the node should be shown in the UI. If negative, then the
     * node is hidden.
     */
    readonly row: number;
    /**
     * The visual "column" where the node should be shown in the UI. If negative, the
     * node is hidden.
     */
    readonly column: number;
    /**
     * Indexes into the DestinyTalentGridDefinition.nodes property for any nodes that
     * must be activated before this one is allowed to be activated.
     *
     * I would have liked to change this to hashes for Destiny 2, but we have run out
     * of time.
     */
    readonly prerequisiteNodeIndexes: number[];
    /**
     * At one point, Talent Nodes supported the idea of "Binary Pairs": nodes that
     * overlapped each other visually, and where activating one deactivated the other.
     * They ended up not being used, mostly because Exclusive Sets are *almost* a
     * superset of this concept, but the potential for it to be used still exists in
     * theory.
     *
     * If this is ever used, this will be the index into the
     * DestinyTalentGridDefinition.nodes property for the node that is the binary pair
     * match to this node. Activating one deactivates the other.
     */
    readonly binaryPairNodeIndex: number;
    /**
     * If true, this node will automatically unlock when the Talent Grid's level
     * reaches the required level of the current step of this node.
     */
    readonly autoUnlocks: boolean;
    /**
     * At one point, Nodes were going to be able to be activated multiple times,
     * changing the current step and potentially piling on multiple effects from the
     * previously activated steps. This property would indicate if the last step could
     * be activated multiple times.
     *
     * This is not currently used, but it isn't out of the question that this could end
     * up being used again in a theoretical future.
     */
    readonly lastStepRepeats: boolean;
    /**
     * If this is true, the node's step is determined randomly rather than the first
     * step being chosen.
     */
    readonly isRandom: boolean;
    /**
     * At one point, you were going to be able to repurchase talent nodes that had
     * random steps, to "re-roll" the current step of the node (and thus change the
     * properties of your item). This was to be the activation requirement for
     * performing that re-roll.
     *
     * The system still exists to do this, as far as I know, so it may yet come back
     * around!
     */
    readonly randomActivationRequirement: DestinyNodeActivationRequirement;
    /**
     * If this is true, the node can be "re-rolled" to acquire a different random
     * current step. This is not used, but still exists for a theoretical future of
     * talent grids.
     */
    readonly isRandomRepurchasable: boolean;
    /**
     * At this point, "steps" have been obfuscated into conceptual entities,
     * aggregating the underlying notions of "properties" and "true steps".
     *
     * If you need to know a step as it truly exists - such as when recreating Node
     * logic when processing Vendor data - you'll have to use the "realSteps" property
     * below.
     */
    readonly steps: DestinyNodeStepDefinition[];
    /**
     * The nodeHash values for nodes that are in an Exclusive Set with this node.
     *
     * See DestinyTalentGridDefinition.exclusiveSets for more info about exclusive sets.
     *
     * Again, note that these are nodeHashes and *not* nodeIndexes.
     */
    readonly exclusiveWithNodeHashes: number[];
    /**
     * If the node's step is randomly selected, this is the amount of the Talent Grid's
     * progression experience at which the progression bar for the node should be shown.
     */
    readonly randomStartProgressionBarAtProgression: number;
    /**
     * A string identifier for a custom visual layout to apply to this talent node.
     * Unfortunately, we do not have any data for rendering these custom layouts. It
     * will be up to you to interpret these strings and change your UI if you want to
     * have custom UI matching these layouts.
     */
    readonly layoutIdentifier: string;
    /**
     * As of Destiny 2, nodes can exist as part of "Exclusive Groups". These differ
     * from exclusive sets in that, within the group, many nodes can be activated. But
     * the act of activating any node in the group will cause "opposing" nodes (nodes
     * in groups that are not allowed to be activated at the same time as this group)
     * to deactivate.
     *
     * See DestinyTalentExclusiveGroup for more information on the details. This is an
     * identifier for this node's group, if it is part of one.
     */
    readonly groupHash?: number;
    /**
     * Talent nodes can be associated with a piece of Lore, generally rendered in a
     * tooltip. This is the hash identifier of the lore element to show, if there is
     * one to be show. Mapped to DestinyLoreDefinition in the manifest.
     */
    readonly loreHash?: number;
    /**
     * Comes from the talent grid node style: this identifier should be used to
     * determine how to render the node in the UI.
     */
    readonly nodeStyleIdentifier: string;
    /**
     * Comes from the talent grid node style: if true, then this node should be ignored
     * for determining whether the grid is complete.
     */
    readonly ignoreForCompletion: boolean;
}
