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

buffBarContainer.py (5920B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\inflight\shipHud\buffBarContainer.py
      2 from carbonui import uiconst
      3 from carbonui.primitives.containerAutoSize import ContainerAutoSize
      4 from eve.client.script.ui.inflight.shipHud.buffButtons import BuffSlotParent
      5 from eve.client.script.ui.inflight.shipHud.systemWideEffectsContainer import SystemWideEffectsContainer
      6 from eve.common.script.mgt import buffBarConst
      7 from eve.common.script.mgt.buffBarConst import ADD_GENERIC_BUFFBAR_BUTTON_SIGNAL, REMOVE_GENERIC_BUFFBAR_BUTTON_SIGNAL
      8 from eve.common.script.sys.eveCfg import IsControllingStructure
      9 import eve.client.script.ui.shared.pointerTool.pointerToolConst as pConst
     10 import uthread2
     11 from uihider import UiHiderMixin
     12 
     13 class BuffBarContainer(UiHiderMixin, ContainerAutoSize):
     14     __guid__ = 'uicls.BuffBarContainer'
     15     default_width = 500
     16     default_height = 5
     17     default_name = 'buffBarContainer'
     18     default_state = uiconst.UI_PICKCHILDREN
     19     uniqueUiName = pConst.UNIQUE_NAME_EFFECTS_BAR
     20     __notifyevents__ = ['OnEwarStartFromTactical',
     21      'OnEwarEndFromTactical',
     22      'OnAddFX',
     23      'OnRemoveFX',
     24      'OnRefreshBuffBar']
     25 
     26     def ApplyAttributes(self, attributes):
     27         setattr(self, pConst.ALLOWS_POINTER_CLIPPING, True)
     28         self.pending = False
     29         self.busyRefreshing = False
     30         super(BuffBarContainer, self).ApplyAttributes(attributes)
     31         self.genericBuffBarButtons = set()
     32         ADD_GENERIC_BUFFBAR_BUTTON_SIGNAL.connect(self.OnAddGenericBuffBarButton)
     33         REMOVE_GENERIC_BUFFBAR_BUTTON_SIGNAL.connect(self.OnRemoveGenericBuffBarButton)
     34         self.btnParByEffectType = {}
     35         self.CreateAllButtons()
     36         self.RefreshAllButtonDisplay(doAnimate=False)
     37         incomingDbuffTracker = sm.GetService('dbuffClient').incomingDbuffTracker
     38         incomingDbuffTracker.signalOnDbuffStateUpdate.connect(self.OnDbuffStateUpdate)
     39         incomingDotWeaponTracker = sm.GetService('dotWeaponSvc').incomingDotTracker
     40         incomingDotWeaponTracker.signalOnDotWeaponUpdate.connect(self.OnDotWeaponUpdate)
     41         sm.RegisterNotify(self)
     42 
     43     def Close(self):
     44         incomingDbuffTracker = sm.GetService('dbuffClient').incomingDbuffTracker
     45         incomingDbuffTracker.signalOnDbuffStateUpdate.disconnect(self.OnDbuffStateUpdate)
     46         incomingDotWeaponTracker = sm.GetService('dotWeaponSvc').incomingDotTracker
     47         incomingDotWeaponTracker.signalOnDotWeaponUpdate.disconnect(self.OnDotWeaponUpdate)
     48         sm.UnregisterNotify(self)
     49         super(BuffBarContainer, self).Close()
     50 
     51     def CreateAllButtons(self):
     52         self.Flush()
     53         self.systemEffectsCont = SystemWideEffectsContainer(parent=self, idx=0, align=uiconst.TOLEFT, height=40)
     54         for jammingType, graphicID in buffBarConst.BUFF_SLOT_ICONS.iteritems():
     55             self.btnParByEffectType[jammingType] = BuffSlotParent(name=jammingType, parent=self, effectType=jammingType, graphicID=graphicID)
     56 
     57     def OnAddGenericBuffBarButton(self, effectName):
     58         if effectName not in self.genericBuffBarButtons:
     59             self.genericBuffBarButtons.add(effectName)
     60             self.RefreshAllButtonDisplay()
     61 
     62     def OnRemoveGenericBuffBarButton(self, effectName):
     63         if effectName in self.genericBuffBarButtons:
     64             self.genericBuffBarButtons.remove(effectName)
     65             self.RefreshAllButtonDisplay()
     66 
     67     def OnAddFX(self, effectGuid, ballID):
     68         if ballID == session.shipid and effectGuid in buffBarConst.FX_GUIDS_THAT_UPDATE_BUFF_BAR:
     69             self.RefreshAllButtonDisplay()
     70 
     71     def OnRemoveFX(self, effectGuid, ballID):
     72         if ballID == session.shipid and effectGuid in buffBarConst.FX_GUIDS_THAT_UPDATE_BUFF_BAR:
     73             self.RefreshAllButtonDisplay()
     74 
     75     def OnEwarStartFromTactical(self):
     76         self.RefreshAllButtonDisplay()
     77 
     78     def OnEwarEndFromTactical(self, jammingType = None, ewarId = None):
     79         self.RefreshAllButtonDisplay()
     80         if jammingType and ewarId:
     81             self.RemoveTimer(jammingType, ewarId)
     82 
     83     def OnRefreshBuffBar(self):
     84         self.RefreshAllButtonDisplay(False)
     85 
     86     def StartTimer(self, jammingType, _id, duration, *args):
     87         btnPar = self.btnParByEffectType.get(jammingType, None)
     88         if btnPar and btnPar.btn:
     89             timer = btnPar.btn.GetTimer(_id)
     90             timer.StartTimer(duration)
     91 
     92     def RemoveTimer(self, jammingType, _id):
     93         btnPar = self.btnParByEffectType.get(jammingType, None)
     94         if btnPar and btnPar.btn:
     95             btnPar.btn.RemoveTimer(_id)
     96 
     97     def RefreshAllButtonDisplay(self, doAnimate = True):
     98         if self.busyRefreshing:
     99             self.pending = True
    100             return
    101         self.pending = False
    102         self.busyRefreshing = True
    103         try:
    104             jammersByType = sm.GetService('tactical').jammersByJammingType
    105             myShipEffectGuids = sm.GetService('FxSequencer').GetAllBallActivationNames(session.shipid)
    106             if IsControllingStructure():
    107                 myShipEffectGuids.discard(buffBarConst.FX_GUIDS_BY_SLOT[buffBarConst.Slot_Tethering])
    108             incomingDbuffTracker = sm.GetService('dbuffClient').incomingDbuffTracker
    109             incomingDotTracker = sm.GetService('dotWeaponSvc').incomingDotTracker
    110             for effectType, btnPar in self.btnParByEffectType.iteritems():
    111                 btnPar.UpdateVisibility(jammersByType, myShipEffectGuids, incomingDbuffTracker, incomingDotTracker, self.genericBuffBarButtons, doAnimate)
    112                 btnPar.UpdateDbuffTimer(incomingDbuffTracker)
    113                 btnPar.UpdateDotTimer(incomingDotTracker)
    114 
    115         finally:
    116             self.busyRefreshing = False
    117 
    118         if self.pending:
    119             self.RefreshAllButtonDisplay(doAnimate)
    120 
    121     def OnDbuffStateUpdate(self):
    122         uthread2.StartTasklet(self.RefreshAllButtonDisplay)
    123 
    124     def OnDotWeaponUpdate(self):
    125         uthread2.StartTasklet(self.RefreshAllButtonDisplay)