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

skillTreeCont.py (8549B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\control\skillTreeCont.py
      2 import eveicon
      3 import localization
      4 from carbonui import const as uiconst
      5 from carbonui.primitives.container import Container
      6 from carbonui.primitives.containerAutoSize import ContainerAutoSize
      7 from carbonui.primitives.fill import Fill
      8 from carbonui.primitives.sprite import Sprite
      9 from carbonui.uicore import uicore
     10 from eve.client.script.ui.control.eveLabel import Label
     11 from eve.client.script.ui.control.skillBar.skillBar import SkillBar
     12 from eve.client.script.ui.shared.neocom.skillConst import COLOR_SKILL_1, COLOR_TRAINED
     13 from eve.common.lib import appConst as const
     14 from skills.client.skillController import SkillController
     15 COLOR_GRAY = (1.0, 1.0, 1.0, 0.5)
     16 
     17 class SkillStateIcon(Sprite):
     18     default_width = 16
     19     default_height = 16
     20 
     21     def __init__(self, skill_controller, required_level = None, **kw):
     22         super(SkillStateIcon, self).__init__(**kw)
     23         self.skill_controller = skill_controller
     24         self.required_level = required_level
     25         self.update()
     26 
     27     def update(self):
     28         self.texturePath = self.get_texture_path()
     29         self.rgba = self.get_rgba()
     30 
     31     def GetHint(self):
     32         if self.required_level is None:
     33             return
     34         if not self.skill_controller.IsInjected():
     35             if self.skill_controller.IsSkillAvailableForPurchase():
     36                 return localization.GetByLabel('UI/SkillQueue/SkillBookMissing')
     37             else:
     38                 return localization.GetByLabel('UI/SkillQueue/RareSkillBookMissing')
     39         else:
     40             if self.skill_controller.GetMyLevel() >= self.required_level:
     41                 return localization.GetByLabel('UI/InfoWindow/SkillTrainedToRequiredLevel')
     42             return localization.GetByLabel('UI/InfoWindow/SkillNotTrainedToRequiredLevel')
     43 
     44     def get_texture_path(self):
     45         if self.required_level is None:
     46             return 'res:/ui/Texture/classes/Skills/SkillRequirementNotMet.png'
     47         if not self.skill_controller.IsInjected():
     48             if self.skill_controller.IsSkillAvailableForPurchase():
     49                 return 'res:/ui/Texture/classes/Skills/SkillBookNotInjected.png'
     50             else:
     51                 return 'res:/ui/Texture/classes/Skills/RareSkillBookNotInjected.png'
     52         else:
     53             if self.skill_controller.GetMyLevel() >= self.required_level:
     54                 return eveicon.checkmark
     55             return 'res:/ui/Texture/classes/Skills/SkillRequirementNotMet.png'
     56 
     57     def get_rgba(self):
     58         if self.required_level is None:
     59             return COLOR_GRAY
     60         elif not self.skill_controller.IsInjected():
     61             return COLOR_SKILL_1
     62         elif self.skill_controller.GetMyLevel() >= self.required_level:
     63             return COLOR_TRAINED
     64         else:
     65             return COLOR_SKILL_1
     66 
     67 
     68 class SkillTreeCont(Container):
     69     default_name = 'SkillTreeCont'
     70     isDragObject = True
     71     default_align = uiconst.TOTOP
     72     default_state = uiconst.UI_NORMAL
     73     default_height = 18
     74     __notifyevents__ = ['OnSkillsChanged',
     75      'OnSkillQueueChanged',
     76      'OnClientEvent_SkillAddedToQueue',
     77      'OnClientEvent_SkillsRemovedFromQueue']
     78 
     79     def __init__(self, **kw):
     80         self.icon = None
     81         self.skillBar = None
     82         self.skillAndLevelLabel = None
     83         self.skillAndLevelLabelParent = None
     84         self.backgroundFill = None
     85         self.timeToTrainLabel = None
     86         super(SkillTreeCont, self).__init__(**kw)
     87 
     88     def ApplyAttributes(self, attributes):
     89         super(SkillTreeCont, self).ApplyAttributes(attributes)
     90         typeID = attributes.typeID
     91         self.requiredLevel = attributes.requiredLevel
     92         indent = attributes.get('indent', 0)
     93         self.tooltipPointerDirection = attributes.get('tooltipPointerDirection', None)
     94         self.skillController = SkillController(typeID)
     95         self.ConstructLayout(indent=indent)
     96         self.UpdateTextAndIcon()
     97         sm.RegisterNotify(self)
     98 
     99     def _IsLayoutConstructed(self):
    100         try:
    101             if self.skillBar is None or self.icon is None:
    102                 return False
    103         except AttributeError:
    104             return False
    105 
    106         return True
    107 
    108     def ConstructLayout(self, indent):
    109         iconCont = Container(parent=self, align=uiconst.TOLEFT, width=16, left=indent)
    110         self.icon = SkillStateIcon(parent=iconCont, align=uiconst.CENTER, skill_controller=self.skillController, required_level=self.requiredLevel)
    111         skillBarCont = Container(name='SkillBarCont', parent=self, align=uiconst.TORIGHT, width=70)
    112         self.timeToTrainLabel = Label(name='Time to train label', parent=ContainerAutoSize(parent=self, align=uiconst.TORIGHT, left=8), align=uiconst.CENTERRIGHT, opacity=0.5)
    113         self.skillAndLevelLabelParent = Container(name='labelContainer', parent=self, align=uiconst.TOALL, left=5)
    114         self.skillAndLevelLabel = Label(name='SkillNameAndLevelLabel', parent=self.skillAndLevelLabelParent, align=uiconst.CENTERLEFT)
    115         self.skillBar = SkillBar(name='SkillBar', parent=skillBarCont, align=uiconst.CENTERLEFT, state=uiconst.UI_DISABLED)
    116         self.backgroundFill = None
    117 
    118     def UpdateTextAndIcon(self):
    119         if self._IsLayoutConstructed():
    120             self.UpdateIcon()
    121             self.UpdateTimeToTrainLabel()
    122             self.UpdateSkillAndLevelLabel()
    123             self.skillBar.SetSkillID(self.skillController.GetTypeID())
    124             self.skillBar.SetRequiredLevel(self.requiredLevel)
    125             self.UpdateBackground()
    126 
    127     def UpdateSkillAndLevelLabel(self):
    128         if self.requiredLevel is not None:
    129             if self.skillController.GetMyLevel() >= self.requiredLevel:
    130                 self.skillAndLevelLabel.opacity = 0.5
    131             text = self.skillController.GetRequiredSkillNameAndLevelComparedToTrainedLevel(self.requiredLevel)
    132         else:
    133             text = self.skillController.GetName()
    134         self.skillAndLevelLabel.SetText(text)
    135 
    136     def UpdateTimeToTrainLabel(self):
    137         if self.requiredLevel is not None:
    138             text = self.skillController.GetTimeToTrainToLevelText(self.requiredLevel)
    139         else:
    140             text = ''
    141         self.timeToTrainLabel.SetText(text)
    142 
    143     def UpdateIcon(self):
    144         self.icon.update()
    145 
    146     def UpdateBackground(self):
    147         if self.requiredLevel is None or self.skillController.GetMyLevel() >= self.requiredLevel:
    148             self.HideBackground()
    149         else:
    150             self.ShowBackground()
    151 
    152     def ShowBackground(self):
    153         if self.backgroundFill is None:
    154             self.backgroundFill = Fill(bgParent=self, color=COLOR_SKILL_1, opacity=0.05, padding=(0, 1, 0, 1))
    155 
    156     def HideBackground(self):
    157         if self.backgroundFill is not None:
    158             self.backgroundFill.Close()
    159             self.backgroundFill = None
    160 
    161     def UpdateAlignment(self, *args, **kwargs):
    162         alignment = super(SkillTreeCont, self).UpdateAlignment(*args, **kwargs)
    163         self.UpdateLabelFade()
    164         return alignment
    165 
    166     def UpdateLabelFade(self):
    167         if self._IsLayoutConstructed():
    168             availableWidth = self.skillAndLevelLabelParent.displayWidth - const.defaultPadding
    169             self.skillAndLevelLabel.SetRightAlphaFade(fadeEnd=availableWidth, maxFadeWidth=20)
    170 
    171     def OnDblClick(self, *args):
    172         sm.GetService('info').ShowInfo(self.skillController.GetTypeID())
    173 
    174     def GetMenu(self):
    175         return self.skillController.GetMenu()
    176 
    177     def GetDragData(self, *args):
    178         return self.skillController.GetDragData()
    179 
    180     def LoadTooltipPanel(self, tooltipPanel, *args):
    181         if uicore.uilib.tooltipHandler.IsUnderTooltip(self):
    182             return
    183         from eve.client.script.ui.shared.tooltip.skill import LoadSkillEntryTooltip
    184         LoadSkillEntryTooltip(tooltipPanel, self.skillController.GetTypeID(), self.requiredLevel)
    185 
    186     def GetTooltipPointer(self):
    187         return self.tooltipPointerDirection
    188 
    189     def OnSkillsChanged(self, *args):
    190         self._Update()
    191 
    192     def OnSkillQueueChanged(self):
    193         self._Update()
    194 
    195     def OnClientEvent_SkillAddedToQueue(self, typeID, level):
    196         if typeID == self.skillController.GetTypeID():
    197             self._Update()
    198 
    199     def OnClientEvent_SkillsRemovedFromQueue(self, skillRequirements):
    200         for typeID, level in skillRequirements:
    201             if typeID == self.skillController.GetTypeID():
    202                 self._Update()
    203                 return
    204 
    205     def _Update(self):
    206         if self._IsLayoutConstructed():
    207             self.UpdateTextAndIcon()
    208             self.skillBar.Update()