NovaBryan/EVE_Dump
Log | Files | 📦 下载最新源码 (.zip) | Refs | README

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() ])