Skip to content

Commit daa4af6

Browse files
committed
Updated readme, and removed some deprecated function aliases
1 parent 4cab021 commit daa4af6

File tree

3 files changed

+290
-267
lines changed

3 files changed

+290
-267
lines changed

LibTalentTree-1.0.lua

Lines changed: 65 additions & 119 deletions
Original file line numberDiff line numberDiff line change
@@ -367,29 +367,27 @@ end
367367

368368
--- @public
369369
--- @param nodeID number # TraitNodeID
370-
--- @return ( number | nil ) # TraitTreeID
370+
--- @return number|nil treeID # TraitTreeID
371371
function 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];
376376
end
377-
LibTalentTree.GetTreeIdForNode = LibTalentTree.GetTreeIDForNode;
378377

379378
--- @public
380379
--- @param entryID number # TraitEntryID
381-
--- @return ( number | nil ) # TraitTreeID
380+
--- @return number|nil treeID # TraitTreeID
382381
function 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];
387386
end
388-
LibTalentTree.GetTreeIdForEntry = LibTalentTree.GetTreeIDForEntry;
389387

390388
--- @public
391389
--- @param entryID number # TraitEntryID
392-
--- @return ( number | nil ) # TraitNodeID
390+
--- @return number|nil nodeID # TraitNodeID
393391
function 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)
398396
end
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;
421412
end
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)
451437
end
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)
477456
end
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
482461
function 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;
492471
end
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
498476
function 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];
511489
end
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
518495
function 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

@@ -535,7 +511,7 @@ end
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
539515
function 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];
554529
end
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;
574542
end
@@ -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)
673635
end
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;
693647
end
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;
713659
end
@@ -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
720666
function 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);
@@ -783,7 +730,7 @@ end
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.
787734
function 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
797744
function 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 {};
802749
end
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
808754
function 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 {};
813759
end
814-
LibTalentTree.GetSubTreeIdsForSpecId = LibTalentTree.GetSubTreeIDsForSpecID;
815760

816761
--- @public
817762
--- @param subTreeID number # TraitSubTreeID
818-
--- @return ( subTreeInfo | nil )
763+
--- @return subTreeInfo|nil subTreeInfo
819764
function LibTalentTree:GetSubTreeInfo(subTreeID)
820765
assert(type(subTreeID) == 'number', 'subTreeID must be a number');
821766
if forceBuildCache then forceBuildCache(); end;
@@ -826,7 +771,8 @@ 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
830776
function 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

Comments
 (0)