skillTreeNode.py (2683B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\skillTree\skillTreeNode.py 2 from __future__ import print_function 3 import itertools 4 from collections import defaultdict 5 import evetypes 6 from skills.client.skillController import SkillController 7 8 class SkillTreeController(SkillController): 9 10 def __init__(self, typeID): 11 super(SkillTreeController, self).__init__(typeID) 12 self.parentsByLevel = defaultdict(list) 13 self.childrenByLevel = defaultdict(list) 14 15 def AddParent(self, parent, level): 16 parent.AddChild(self, level) 17 18 def AddChild(self, child, level): 19 self.childrenByLevel[level].append(child) 20 child.parentsByLevel[level].append(self) 21 22 def PrintChildren(self, depth = 0): 23 print('-' * depth + evetypes.GetName(self.GetTypeID())) 24 for level, children in self.childrenByLevel.iteritems(): 25 print('\n' + '-' * depth + 'LEVEL %s:' % level) 26 for child in children: 27 child.PrintChildren(depth + 1) 28 29 def GetCategoryAndGroupName(self): 30 return evetypes.GetGroupName(self.GetTypeID()) 31 32 def IsRoot(self): 33 return not self.GetParentsByLevel() 34 35 def IsRootOfGroup(self): 36 parents = [ node for node in self.GetParents() if node.GetGroupID() == self.GetGroupID() ] 37 return not parents 38 39 def GetParents(self): 40 return list(itertools.chain(*self.parentsByLevel.values())) 41 42 def GetParentsByLevel(self): 43 return self.parentsByLevel 44 45 def GetChildren(self): 46 return list(itertools.chain(*self.childrenByLevel.values())) 47 48 def GetDecendants(self): 49 ret = [] 50 self._GetDecendants(self, ret) 51 return ret 52 53 def GetDecendantsTypeIDs(self): 54 ret = [ node.GetTypeID() for node in self.GetDecendants() ] 55 ret.append(self.GetTypeID()) 56 return ret 57 58 def _GetDecendants(self, node, ret): 59 children = node.GetChildren() 60 ret.extend(children) 61 for child in children: 62 self._GetDecendants(child, ret) 63 64 def GetAncestors(self): 65 ret = [] 66 self._GetAncestors(self, ret) 67 return ret 68 69 def _GetAncestors(self, node, ret): 70 parents = node.GetParents() 71 ret.extend(parents) 72 for child in parents: 73 self._GetAncestors(child, ret) 74 75 def GetSubtree(self): 76 return self.GetAncestors() + [self] + self.GetChildren() 77 78 def GetChildrenByLevel(self): 79 return self.childrenByLevel 80 81 def GetDepth(self): 82 if not self.parentsByLevel: 83 return 0 84 return max([ parent.GetDepth() + 1 for parent in self.GetParents() ])