@@ -367,29 +367,27 @@ end
367367
368368--- @public
369369--- @param nodeID number # TraitNodeID
370- --- @return ( number | nil ) # TraitTreeID
370+ --- @return number | nil treeID # TraitTreeID
371371function LibTalentTree :GetTreeIDForNode (nodeID )
372372 assert (type (nodeID ) == ' number' , ' nodeID must be a number' );
373373 if forceBuildCache then forceBuildCache (); end ;
374374
375375 return self .cache .nodeTreeMap [nodeID ];
376376end
377- LibTalentTree .GetTreeIdForNode = LibTalentTree .GetTreeIDForNode ;
378377
379378--- @public
380379--- @param entryID number # TraitEntryID
381- --- @return ( number | nil ) # TraitTreeID
380+ --- @return number | nil treeID # TraitTreeID
382381function LibTalentTree :GetTreeIDForEntry (entryID )
383382 assert (type (entryID ) == ' number' , ' entryID must be a number' );
384383 if forceBuildCache then forceBuildCache (); end ;
385384
386385 return self .cache .entryTreeMap [entryID ];
387386end
388- LibTalentTree .GetTreeIdForEntry = LibTalentTree .GetTreeIDForEntry ;
389387
390388--- @public
391389--- @param entryID number # TraitEntryID
392- --- @return ( number | nil ) # TraitNodeID
390+ --- @return number | nil nodeID # TraitNodeID
393391function LibTalentTree :GetNodeIDForEntry (entryID )
394392 assert (type (entryID ) == ' number' , ' entryID must be a number' );
395393 if forceBuildCache then forceBuildCache (); end ;
@@ -398,50 +396,38 @@ function LibTalentTree:GetNodeIDForEntry(entryID)
398396end
399397
400398--- @public
401- --- @param treeID number # TraitTreeID, or TraitNodeID, if leaving the 2nd argument nil
402- --- @param nodeID number # TraitNodeID, can be omitted, by passing the nodeID as the first argument, the treeID is automatically determined
403- --- @return ( libNodeInfo | nil )
404- --- @overload fun ( self : LibTalentTree-1.0 , nodeID : number ): libNodeInfo | nil
405- function LibTalentTree :GetLibNodeInfo (treeID , nodeID )
406- assert (type (treeID ) == ' number' , ' treeID must be a number' );
407- if not nodeID then
408- nodeID = treeID ;
409- --- @type number
410- treeID = self :GetTreeIDForNode (nodeID ); --- @diagnostic disable-line : assign-type-mismatch
411- end
399+ --- @param nodeID number # TraitNodeID
400+ --- @return libNodeInfo | nil nodeInfo
401+ function LibTalentTree :GetLibNodeInfo (nodeID )
412402 assert (type (nodeID ) == ' number' , ' nodeID must be a number' );
413403 if forceBuildCache then forceBuildCache (); end ;
414404
405+ local treeID = self :GetTreeIDForNode (nodeID );
415406 local nodeData = self .cache .nodeData ;
416407
417408 local nodeInfo = nodeData [treeID ] and nodeData [treeID ][nodeID ] and deepCopy (nodeData [treeID ][nodeID ]) or nil ;
418- if ( nodeInfo ) then nodeInfo .ID = nodeID ; end
409+ if nodeInfo then nodeInfo .ID = nodeID ; end
419410
420411 return nodeInfo ;
421412end
422413
423414--- @public
424- --- @param treeID number # TraitTreeID, or TraitEntryID, if leaving the 2nd argument nil
425- --- @param nodeID number # TraitNodeID, can be omitted, by passing the nodeID as the first argument, the treeID is automatically determined
426- --- @return ( libNodeInfo ) # libNodeInfo is enriched and overwritten by C_Traits information if possible
427- --- @overload fun ( self : LibTalentTree-1.0 , nodeID : number ): libNodeInfo
428- function LibTalentTree :GetNodeInfo (treeID , nodeID )
429- assert (type (treeID ) == ' number' , ' treeID must be a number' );
430- if not nodeID then
431- nodeID = treeID ;
432- --- @type number
433- treeID = self :GetTreeIDForNode (nodeID ); --- @diagnostic disable-line : assign-type-mismatch
434- end
415+ --- @param nodeID number # TraitNodeID
416+ --- @return libNodeInfo | TraitNodeInfo nodeInfo # libNodeInfo is enriched and overwritten by C_Traits information if possible
417+ function LibTalentTree :GetNodeInfo (nodeID )
435418 assert (type (nodeID ) == ' number' , ' nodeID must be a number' );
436419 if forceBuildCache then forceBuildCache (); end ;
437420
438- local cNodeInfo = C_ClassTalents .GetActiveConfigID ()
439- and C_Traits .GetNodeInfo (C_ClassTalents .GetActiveConfigID (), nodeID )
440- or C_Traits .GetNodeInfo (Constants .TraitConsts .VIEW_TRAIT_CONFIG_ID or - 3 , nodeID );
441- local libNodeInfo = treeID and self :GetLibNodeInfo (treeID , nodeID );
421+ local cNodeInfo = C_Traits .GetNodeInfo (
422+ C_ClassTalents .GetActiveConfigID () or Constants .TraitConsts .VIEW_TRAIT_CONFIG_ID or - 3 ,
423+ nodeID
424+ )
425+ local libNodeInfo = self :GetLibNodeInfo (nodeID );
442426
443- if (not libNodeInfo ) then return cNodeInfo ; end
444- if (not cNodeInfo ) then cNodeInfo = {}; end
427+ if not libNodeInfo then return cNodeInfo ; end
428+
429+ --- @diagnostic disable-next-line : missing-fields
430+ if not cNodeInfo then cNodeInfo = {}; end
445431
446432 if cNodeInfo .ID == nodeID then
447433 return Mixin (libNodeInfo , cNodeInfo );
@@ -451,20 +437,13 @@ function LibTalentTree:GetNodeInfo(treeID, nodeID)
451437end
452438
453439--- @public
454- --- @param treeID number # TraitTreeID, or TraitEntryID, if leaving the 2nd argument nil
455- --- @param entryID number # TraitEntryID, can be omitted, by passing the entryID as the first argument, the treeID is automatically determined
456- --- @return ( entryInfo | nil )
457- --- @overload fun ( self : LibTalentTree-1.0 , entryID : number ): entryInfo | nil
458- function LibTalentTree :GetEntryInfo (treeID , entryID )
459- assert (type (treeID ) == ' number' , ' treeID must be a number' );
460- if not entryID then
461- entryID = treeID ;
462- --- @type number
463- treeID = self :GetTreeIDForEntry (entryID ); --- @diagnostic disable-line : assign-type-mismatch
464- end
440+ --- @param entryID number # TraitEntryID
441+ --- @return entryInfo | nil entryInfo
442+ function LibTalentTree :GetEntryInfo (entryID )
465443 assert (type (entryID ) == ' number' , ' entryID must be a number' );
466444 if forceBuildCache then forceBuildCache (); end ;
467445
446+ local treeID = self :GetTreeIDForEntry (entryID );
468447 local entryData = self .cache .entryData ;
469448
470449 local entryInfo = entryData [treeID ] and entryData [treeID ][entryID ] and deepCopy (entryData [treeID ][entryID ]) or nil ;
@@ -477,8 +456,8 @@ function LibTalentTree:GetEntryInfo(treeID, entryID)
477456end
478457
479458--- @public
480- --- @param class ( string | number ) # ClassID or ClassFilename - e.g. "DEATHKNIGHT" or 6 - See https://warcraft.wiki.gg/wiki/ClassID
481- --- @return ( number | nil ) # TraitTreeID
459+ --- @param class string | number # ClassID or ClassFilename - e.g. "DEATHKNIGHT" or 6 - See https://warcraft.wiki.gg/wiki/ClassID
460+ --- @return number | nil treeID # TraitTreeID
482461function LibTalentTree :GetClassTreeID (class )
483462 assert (type (class ) == ' string' or type (class ) == ' number' , ' class must be a string or number' );
484463 if forceBuildCache then forceBuildCache (); end ;
@@ -490,11 +469,10 @@ function LibTalentTree:GetClassTreeID(class)
490469
491470 return classTreeMap [classID ] or nil ;
492471end
493- LibTalentTree .GetClassTreeId = LibTalentTree .GetClassTreeID ;
494472
495473--- @public
496- --- @param treeID ( number ) # a class' TraitTreeID
497- --- @return ( number | nil ) # ClassID or nil - See https://warcraft.wiki.gg/wiki/ClassID
474+ --- @param treeID number # a class' TraitTreeID
475+ --- @return number | nil classID # ClassID or nil - See https://warcraft.wiki.gg/wiki/ClassID
498476function LibTalentTree :GetClassIDByTreeID (treeID )
499477 treeID = tonumber (treeID ); --- @diagnostic disable-line : cast-local-type
500478 if forceBuildCache then forceBuildCache (); end ;
@@ -509,12 +487,11 @@ function LibTalentTree:GetClassIDByTreeID(treeID)
509487
510488 return self .inverseClassMap [treeID ];
511489end
512- LibTalentTree .GetClassIdByTreeId = LibTalentTree .GetClassIDByTreeID ;
513490
514491--- @public
515492--- @param specID number # See https://warcraft.wiki.gg/wiki/SpecializationID
516493--- @param nodeID number # TraitNodeID
517- --- @return boolean # whether the node is visible for the given spec
494+ --- @return boolean isVisible # whether the node is visible for the given spec
518495function LibTalentTree :IsNodeVisibleForSpec (specID , nodeID )
519496 assert (type (specID ) == ' number' , ' specID must be a number' );
520497 assert (type (nodeID ) == ' number' , ' nodeID must be a number' );
@@ -524,8 +501,7 @@ function LibTalentTree:IsNodeVisibleForSpec(specID, nodeID)
524501 local class = specMap [specID ];
525502 assert (class , ' Unknown specID: ' .. specID );
526503
527- local treeID = self :GetClassTreeID (class );
528- local nodeInfo = self :GetLibNodeInfo (treeID , nodeID );
504+ local nodeInfo = self :GetLibNodeInfo (nodeID );
529505
530506 if not nodeInfo then return false ; end
531507
535511--- @public
536512--- @param specID number # See https://warcraft.wiki.gg/wiki/SpecializationID
537513--- @param nodeID number # TraitNodeID
538- --- @return boolean # whether the node is granted by default for the given spec
514+ --- @return boolean isGranted # whether the node is granted by default for the given spec
539515function LibTalentTree :IsNodeGrantedForSpec (specID , nodeID )
540516 assert (type (specID ) == ' number' , ' specID must be a number' );
541517 assert (type (nodeID ) == ' number' , ' nodeID must be a number' );
@@ -545,30 +521,22 @@ function LibTalentTree:IsNodeGrantedForSpec(specID, nodeID)
545521 local class = specMap [specID ];
546522 assert (class , ' Unknown specID: ' .. specID );
547523
548- local treeID = self :GetClassTreeID (class );
549- local nodeInfo = self :GetLibNodeInfo (treeID --[[ @as number]] , nodeID );
524+ local nodeInfo = self :GetLibNodeInfo (nodeID );
550525
551526 if not nodeInfo then return false ; end
552527
553528 return nodeInfo .grantedForSpecs [specID ];
554529end
555530
556531--- @public
557- --- @param treeID number # TraitTreeID, or TraitNodeID, if leaving the 2nd parameter nil
558- --- @param nodeID number # TraitNodeID, can be omitted, by passing the nodeID as the first argument, the treeID is automatically determined
559- --- @return ( number | nil , number | nil ) # posX, posY - some trees have a global offset
560- --- @overload fun ( self : LibTalentTree-1.0 , nodeID : number ): ( number | nil , number | nil )
561- function LibTalentTree :GetNodePosition (treeID , nodeID )
562- assert (type (treeID ) == ' number' , ' treeID must be a number' );
563- if not nodeID then
564- nodeID = treeID ;
565- --- @type number
566- treeID = self :GetTreeIDForNode (nodeID ); --- @diagnostic disable-line : assign-type-mismatch
567- end
532+ --- @param nodeID number # TraitNodeID
533+ --- @return number | nil posX # some trees have a global offset
534+ --- @return number | nil posY # some trees have a global offset
535+ function LibTalentTree :GetNodePosition (nodeID )
568536 assert (type (nodeID ) == ' number' , ' nodeID must be a number' );
569537
570- local nodeInfo = self :GetLibNodeInfo (treeID , nodeID );
571- if ( not nodeInfo ) then return nil , nil ; end
538+ local nodeInfo = self :GetLibNodeInfo (nodeID );
539+ if not nodeInfo then return nil , nil ; end
572540
573541 return nodeInfo .posX , nodeInfo .posY ;
574542end
@@ -588,21 +556,15 @@ local gridPositionCache = {};
588556---
589557--- The Hero talent selection node, is hardcoded to row 5.5 and column 10. Making it sit right underneath the sub trees themselves.
590558---
591- --- @param treeID number # TraitTreeID, or TraitNodeID, if leaving the 2nd parameter nil
592- --- @param nodeID number # TraitNodeID, can be omitted, by passing the nodeID as the first argument, the treeID is automatically determined
593- --- @return ( number | nil , number | nil ) # column, row
594- --- @overload fun ( self : LibTalentTree-1.0 , nodeID : number ): ( number | nil , number | nil )
595- function LibTalentTree :GetNodeGridPosition (treeID , nodeID )
596- assert (type (treeID ) == ' number' , ' treeID must be a number' );
597- if not nodeID then
598- nodeID = treeID ;
599- --- @type number
600- treeID = self :GetTreeIDForNode (nodeID ); --- @diagnostic disable-line : assign-type-mismatch
601- end
559+ --- @param nodeID number # TraitNodeID
560+ --- @return number | nil column # some nodes sit between 2 columns, these columns end in ".5"
561+ --- @return number | nil row
562+ function LibTalentTree :GetNodeGridPosition (nodeID )
602563 assert (type (nodeID ) == ' number' , ' nodeID must be a number' );
603564
604- local classID = self :GetClassIDByTreeID (treeID );
605- if not classID then return nil , nil end
565+ local treeID = self :GetTreeIDForNode (nodeID );
566+ local classID = treeID and self :GetClassIDByTreeID (treeID );
567+ if not classID or not treeID then return nil , nil end
606568
607569 gridPositionCache [treeID ] = gridPositionCache [treeID ] or {};
608570 if gridPositionCache [treeID ][nodeID ] then
@@ -622,7 +584,7 @@ function LibTalentTree:GetNodeGridPosition(treeID, nodeID)
622584 local colSpacing = 60 ;
623585
624586 local row , col ;
625- local nodeInfo = self :GetLibNodeInfo (treeID , nodeID );
587+ local nodeInfo = self :GetLibNodeInfo (nodeID );
626588 local subTreeID = nodeInfo and nodeInfo .subTreeID ;
627589
628590 if subTreeID then
@@ -673,41 +635,25 @@ function LibTalentTree:GetNodeGridPosition(treeID, nodeID)
673635end
674636
675637--- @public
676- --- @param treeID number # TraitTreeID, or TraitNodeID, if leaving the 2nd parameter nil
677- --- @param nodeID number # TraitNodeID, can be omitted, by passing the nodeID as the first argument, the treeID is automatically determined
678- --- @return ( nil | visibleEdge[] ) # The order might not match C_Traits
679- --- @overload fun ( self : LibTalentTree-1.0 , nodeID : number ): nil | visibleEdge[]
680- function LibTalentTree :GetNodeEdges (treeID , nodeID )
681- assert (type (treeID ) == ' number' , ' treeID must be a number' );
682- if not nodeID then
683- nodeID = treeID ;
684- --- @type number
685- treeID = self :GetTreeIDForNode (nodeID ); --- @diagnostic disable-line : assign-type-mismatch
686- end
638+ --- @param nodeID number # TraitNodeID
639+ --- @return nil | visibleEdge[] edges
640+ function LibTalentTree :GetNodeEdges (nodeID )
687641 assert (type (nodeID ) == ' number' , ' nodeID must be a number' );
688642
689- local nodeInfo = self :GetLibNodeInfo (treeID , nodeID );
690- if ( not nodeInfo ) then return nil ; end
643+ local nodeInfo = self :GetLibNodeInfo (nodeID );
644+ if not nodeInfo then return nil ; end
691645
692646 return nodeInfo .visibleEdges ;
693647end
694648
695649--- @public
696- --- @param treeID number # TraitTreeID, or TraitNodeID, if leaving the 2nd parameter nil
697- --- @param nodeID number # TraitNodeID, can be omitted, by passing the nodeID as the first argument, the treeID is automatically determined
698- --- @return ( boolean | nil ) # true if the node is a class node, false for spec nodes, nil if unknown
699- --- @overload fun ( self : LibTalentTree-1.0 , nodeID : number ): boolean | nil
700- function LibTalentTree :IsClassNode (treeID , nodeID )
701- assert (type (treeID ) == ' number' , ' treeID must be a number' );
702- if not nodeID then
703- nodeID = treeID ;
704- --- @type number
705- treeID = self :GetTreeIDForNode (nodeID ); --- @diagnostic disable-line : assign-type-mismatch
706- end
650+ --- @param nodeID number # TraitNodeID
651+ --- @return boolean | nil isClassNode # true if the node is a class node, false otherwise; nil if the node isn't found
652+ function LibTalentTree :IsClassNode (nodeID )
707653 assert (type (nodeID ) == ' number' , ' nodeID must be a number' );
708654
709- local nodeInfo = self :GetLibNodeInfo (treeID , nodeID );
710- if ( not nodeInfo ) then return nil ; end
655+ local nodeInfo = self :GetLibNodeInfo (nodeID );
656+ if not nodeInfo then return nil ; end
711657
712658 return nodeInfo .isClassNode ;
713659end
@@ -716,13 +662,14 @@ local gateCache = {}
716662
717663--- @public
718664--- @param specID number # See https://warcraft.wiki.gg/wiki/SpecializationID
719- --- @return ( gateInfo[] ) # list of gates for the given spec, sorted by spending required
665+ --- @return gateInfo[] gates # list of gates for the given spec, sorted by spending required
720666function LibTalentTree :GetGates (specID )
721667 -- an optimization step is likely trivial in 10.1.0, but well.. effort, and this also works fine still :)
668+ -- 1 expansion later, and now I wish I wrote down what the trivial optimization was :D
722669 assert (type (specID ) == ' number' , ' specID must be a number' );
723670 if forceBuildCache then forceBuildCache (); end ;
724671
725- if ( gateCache [specID ]) then return deepCopy (gateCache [specID ]); end
672+ if gateCache [specID ] then return deepCopy (gateCache [specID ]); end
726673 local specMap = self .cache .specMap ;
727674 local class = specMap [specID ];
728675 assert (class , ' Unknown specID: ' .. specID );
783730
784731--- @public
785732--- @param treeID number # TraitTreeID
786- --- @return treeCurrencyInfo[] # list of currencies for the given tree, first entry is class currency, second is spec currency, the rest are sub tree currencies. The list is additionally indexed by the traitCurrencyID.
733+ --- @return treeCurrencyInfo[] treeCurrencies # list of currencies for the given tree, first entry is class currency, second is spec currency, the rest are sub tree currencies. The list is additionally indexed by the traitCurrencyID.
787734function LibTalentTree :GetTreeCurrencies (treeID )
788735 assert (type (treeID ) == ' number' , ' treeID must be a number' );
789736 if forceBuildCache then forceBuildCache (); end ;
@@ -793,29 +740,27 @@ end
793740
794741--- @public
795742--- @param subTreeID number # TraitSubTreeID
796- --- @return number[] # list of TraitNodeIDs that belong to the given sub tree
743+ --- @return number[] subTreeNodes # list of TraitNodeIDs that belong to the given sub tree
797744function LibTalentTree :GetSubTreeNodeIDs (subTreeID )
798745 assert (type (subTreeID ) == ' number' , ' subTreeID must be a number' );
799746 if forceBuildCache then forceBuildCache (); end ;
800747
801748 return deepCopy (self .cache .subTreeNodesMap [subTreeID ]) or {};
802749end
803- LibTalentTree .GetSubTreeNodeIds = LibTalentTree .GetSubTreeNodeIDs ;
804750
805751--- @public
806752--- @param specID number # See https://warcraft.wiki.gg/wiki/SpecializationID
807- --- @return number[] # list of TraitSubTreeIDs that belong to the given spec
753+ --- @return number[] subTrees # list of TraitSubTreeIDs that belong to the given spec
808754function LibTalentTree :GetSubTreeIDsForSpecID (specID )
809755 assert (type (specID ) == ' number' , ' specID must be a number' );
810756 if forceBuildCache then forceBuildCache (); end ;
811757
812758 return deepCopy (self .cache .specSubTreeMap [specID ]) or {};
813759end
814- LibTalentTree .GetSubTreeIdsForSpecId = LibTalentTree .GetSubTreeIDsForSpecID ;
815760
816761--- @public
817762--- @param subTreeID number # TraitSubTreeID
818- --- @return ( subTreeInfo | nil )
763+ --- @return subTreeInfo | nil subTreeInfo
819764function LibTalentTree :GetSubTreeInfo (subTreeID )
820765 assert (type (subTreeID ) == ' number' , ' subTreeID must be a number' );
821766 if forceBuildCache then forceBuildCache (); end ;
826771--- @public
827772--- @param specID number # See https://warcraft.wiki.gg/wiki/SpecializationID
828773--- @param subTreeID number # TraitSubTreeID
829- --- @return number ?, number ? # TraitNodeID, TraitEntryID; or nil if not found
774+ --- @return number ? nodeID # TraitNodeID; or nil if not found
775+ --- @return number ? entryID # TraitEntryID; or nil if not found
830776function LibTalentTree :GetSubTreeSelectionNodeIDAndEntryIDBySpecID (specID , subTreeID )
831777 assert (type (specID ) == ' number' , ' specID must be a number' );
832778 assert (type (subTreeID ) == ' number' , ' subTreeID must be a number' );
0 commit comments