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)