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

systemWideEffectButton.py (5349B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\inflight\shipHud\systemWideEffectButton.py
      2 import evetypes
      3 import infobubbles
      4 import localization
      5 import trinity
      6 from carbon.common.script.util.timerstuff import AutoTimer
      7 from carbonui import uiconst
      8 from carbonui.primitives.container import Container
      9 from carbonui.primitives.sprite import Sprite
     10 from carbonui.uicore import uicore
     11 from carbonui.util.color import Color
     12 from dogma import units
     13 from eve.client.script.ui.control.eveIcon import Icon
     14 from eve.client.script.ui.inflight.shipHud.buffButtons import SLOT_WIDTH, ICON_SIZE
     15 COLOR_TEXT_HILITE = (1.0, 1.0, 1.0, 1.0)
     16 COLOR_GREEN = (0.0, 0.8, 0.0, 1.0)
     17 COLOR_RED = (0.875, 0.102, 0.137, 1.0)
     18 COLOR_TEXT_HILITE_HEX = Color.RGBtoHex(*COLOR_TEXT_HILITE)
     19 COLOR_GREEN_HEX = Color.RGBtoHex(*COLOR_GREEN)
     20 COLOR_RED_HEX = Color.RGBtoHex(*COLOR_RED)
     21 
     22 class SystemWideEffectSlotParent(Container):
     23     default_align = uiconst.TOLEFT
     24     default_width = SLOT_WIDTH
     25     default_height = ICON_SIZE
     26 
     27     def ApplyAttributes(self, attributes):
     28         Container.ApplyAttributes(self, attributes)
     29         self.btn = SystemWideEffectButton(parent=self, align=uiconst.CENTER, width=ICON_SIZE, height=ICON_SIZE, sourceTypeID=attributes.sourceTypeID)
     30         self.FadeButtonIn()
     31 
     32     def FadeButtonIn(self):
     33         uicore.animations.FadeIn(self, duration=0.25)
     34         uicore.animations.MorphScalar(self, 'width', startVal=0, endVal=SLOT_WIDTH, duration=0.25)
     35 
     36 
     37 class SystemWideEffectButton(Container):
     38     __guid__ = 'BuffButton'
     39     default_state = uiconst.UI_NORMAL
     40     default_align = uiconst.RELATIVE
     41     default_pickRadius = -1
     42     ICON_BASE_ALPHA = 1.0
     43     ICON_HIGHLIGHTED_ALPHA = 1.5
     44     ICON_COLOR = (1.0,
     45      1.0,
     46      1.0,
     47      ICON_BASE_ALPHA)
     48     SLOT_COLOR = (1.0, 1.0, 1.0, 1)
     49     SLOT_TEXTURE_PATH = 'res:/UI/Texture/classes/ShipUI/EwarBar/ewarBarUnderlayClean.png'
     50     SLOT_GRADIENT_TEXTURE_PATH = 'res:/UI/Texture/classes/ShipUI/EwarBar/ewarBarUnderlayGrad.png'
     51     SLOT_BASE_ALPHA = 0.2
     52     SLOT_GRADIENT_ALPHA = 0.25
     53     SHADOW_COLOR = (1.0, 1.0, 1.0, 0.25)
     54     SHADOW_TEXTURE_PATH = 'res:/UI/Texture/classes/ShipUI/EwarBar/ewarBarShadow.png'
     55 
     56     def ApplyAttributes(self, attributes):
     57         Container.ApplyAttributes(self, attributes)
     58         self.sourceTypeID = attributes.sourceTypeID
     59         iconSize = self.height
     60         self.icon = Icon(parent=self, name='SystemEffecticon', pos=(0,
     61          0,
     62          iconSize,
     63          iconSize), align=uiconst.CENTER, state=uiconst.UI_DISABLED, ignoreSize=1, color=self.ICON_COLOR)
     64         Sprite(parent=self, name='effect_slot_gradient', align=uiconst.TOALL, state=uiconst.UI_DISABLED, color=self.SLOT_COLOR, blendMode=trinity.TR2_SBM_ADD, texturePath=self.SLOT_GRADIENT_TEXTURE_PATH, opacity=self.SLOT_GRADIENT_ALPHA)
     65         Sprite(parent=self, name='effect_slot_base', align=uiconst.TOALL, state=uiconst.UI_DISABLED, color=self.SLOT_COLOR, blendMode=trinity.TR2_SBM_ADD, texturePath=self.SLOT_TEXTURE_PATH, opacity=self.SLOT_BASE_ALPHA)
     66         Sprite(parent=self, name='effect_shadow', align=uiconst.TOALL, state=uiconst.UI_DISABLED, color=self.SHADOW_COLOR, texturePath=self.SHADOW_TEXTURE_PATH)
     67         self.LoadIcon(infobubbles.get_icon_id(self.sourceTypeID))
     68 
     69     def LoadIcon(self, graphicID):
     70         self.icon.LoadIconByIconID(graphicID)
     71 
     72     def GetHint(self):
     73         return ''
     74 
     75     def LoadTooltipPanel(self, tooltipPanel, *args, **kwds):
     76         tooltipPanel.LoadGeneric1ColumnTemplate()
     77         tooltipPanel.cellSpacing = (10, 4)
     78         self._LoadTooltipPanel(tooltipPanel)
     79         self._tooltipUpdateTimer = AutoTimer(250, self._LoadTooltipPanel, tooltipPanel)
     80 
     81     def _LoadTooltipPanel(self, tooltipPanel):
     82         if tooltipPanel.destroyed:
     83             self._tooltipUpdateTimer = None
     84             return
     85         tooltipPanel.Flush()
     86         misc_bonus = infobubbles.get_misc_bonus(self.sourceTypeID)
     87         if misc_bonus:
     88             tooltipPanel.AddLabelLarge(text=evetypes.GetName(self.sourceTypeID), align=uiconst.CENTERLEFT, color=COLOR_TEXT_HILITE)
     89             for bonus in sorted(misc_bonus, key=lambda x: x['importance']):
     90                 text = self._GetBonusText(bonus)
     91                 tooltipPanel.AddLabelMedium(text=text, align=uiconst.CENTERLEFT)
     92 
     93     def OnMouseEnter(self, *args):
     94         self.icon.SetAlpha(self.ICON_HIGHLIGHTED_ALPHA)
     95 
     96     def OnMouseExit(self, *args):
     97         self.icon.SetAlpha(self.ICON_BASE_ALPHA)
     98 
     99     def _GetBonusText(self, data):
    100         color = COLOR_TEXT_HILITE_HEX
    101         if 'bonus' in data:
    102             bonus = float(data['bonus'])
    103             value = round(bonus, 1)
    104             if int(bonus) == bonus:
    105                 value = int(bonus)
    106             if 'isPositive' in data:
    107                 isPositive = data['isPositive']
    108                 if isPositive:
    109                     color = COLOR_GREEN_HEX
    110                 else:
    111                     color = COLOR_RED_HEX
    112             text = localization.GetByLabel('UI/SystemWideEffects/BonusWithNumber', color=color, value=value, unit=units.get_display_name(int(data['unitID'])), bonusText=localization.GetByMessageID(int(data['nameID'])))
    113         else:
    114             text = localization.GetByLabel('UI/SystemWideEffects/BonusWithoutNumber', color=color, bonusText=localization.GetByMessageID(int(data['nameID'])))
    115         return text