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

damageGaugeContainers.py (5791B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\control\damageGaugeContainers.py
      2 import dogma.attributes.groups as dogma_attr_groups
      3 import eveformat
      4 import dogma.const as dogma_const
      5 from carbonui import uiconst
      6 from carbonui.primitives.container import Container
      7 from eve.client.script.ui import eveColor
      8 from eve.client.script.ui.control.entries.generic import Generic
      9 from eve.client.script.ui.control.gauge import Gauge
     10 from eve.client.script.ui.control.eveIcon import Icon
     11 from eve.client.script.ui.shared.info.infoUtil import PrepareInfoTextForAttributeHint, GetColoredTextWithCustomColors
     12 
     13 class DamageGaugeContainer(Container):
     14     iconSize = 24
     15     containerPadding = 4
     16     showIcon = True
     17     gaugeHeight = 16
     18     gaugeTopOffset = 7
     19     damageTypesAndColors = [('em', (0.1, 0.37, 0.55, 1.0)),
     20      ('thermal', (0.55, 0.1, 0.1, 1.0)),
     21      ('kinetic', (0.45, 0.45, 0.45, 1.0)),
     22      ('explosive', (0.55, 0.37, 0.1, 1.0))]
     23 
     24     def ApplyAttributes(self, attributes):
     25         Container.ApplyAttributes(self, attributes)
     26         self.innerContainers = {}
     27         for damageType, color in self.damageTypesAndColors:
     28             container = Container(parent=self, name='container_%s' % damageType, width=0.25, align=uiconst.TOLEFT_PROP, padding=(self.containerPadding,
     29              0,
     30              self.containerPadding,
     31              0), state=uiconst.UI_NORMAL)
     32             self.innerContainers[damageType] = container
     33             self.AddGaugeAndIconToContainer(container, damageType, color=color)
     34             if damageType == 'explosive':
     35                 container.SetAlign(uiconst.TOALL)
     36                 container.width = 0
     37 
     38     def AddGaugeAndIconToContainer(self, container, damageType, color):
     39         iconCont = Container(parent=container, name='iconCont', width=self.iconSize, align=uiconst.TOLEFT, state=uiconst.UI_DISABLED)
     40         icon = Icon(parent=iconCont, pos=(0,
     41          0,
     42          self.iconSize,
     43          self.iconSize), align=uiconst.CENTERLEFT, idx=0, ignoreSize=True, state=uiconst.UI_DISABLED)
     44         if not self.showIcon:
     45             iconCont.display = False
     46         gauge = Gauge(parent=container, name='gauge_%s' % damageType, value=0.0, color=color, gaugeHeight=self.gaugeHeight, align=uiconst.TOALL, pos=(0,
     47          self.gaugeTopOffset,
     48          0,
     49          0), state=uiconst.UI_DISABLED, gradientBrightnessFactor=1.5)
     50         container.gauge = gauge
     51         container.icon = icon
     52         setattr(self, 'gauge_%s' % damageType, gauge)
     53 
     54     def LoadInfo(self, damageInfo, onClickFunc):
     55         for attributeInfo in damageInfo:
     56             self.UpdateGauge(attributeInfo, False, onClickFunc)
     57 
     58     def GetContainerForDamageType(self, attribute_id):
     59         if attribute_id in dogma_attr_groups.em_damage_type_attribute_ids:
     60             dmgType = 'em'
     61         elif attribute_id in dogma_attr_groups.kinetic_damage_type_attribute_ids:
     62             dmgType = 'kinetic'
     63         elif attribute_id in dogma_attr_groups.explosive_damage_type_attribute_ids:
     64             dmgType = 'explosive'
     65         elif attribute_id in dogma_attr_groups.thermal_damage_type_attribute_ids:
     66             dmgType = 'thermal'
     67         else:
     68             return None
     69         return self.innerContainers[dmgType]
     70 
     71     def UpdateGauge(self, info, animate = False, onClickFunc = None):
     72         if info is None:
     73             return
     74         attribute_id = info.get('attributeID', None)
     75         container = self.GetContainerForDamageType(attribute_id)
     76         if container is None:
     77             return
     78         if onClickFunc:
     79             container.OnClick = (onClickFunc, attribute_id)
     80         gauge = container.gauge
     81         gauge.SetValue(info['value'], animate=animate)
     82         valueText = info['valueText']
     83         modifiedAttribute = info.get('modifiedAttribute', None)
     84         if modifiedAttribute:
     85             coloredValueText = GetColoredTextWithCustomColors(attribute=modifiedAttribute, text=valueText, positiveChange=eveColor.SUCCESS_GREEN, negativeChange=eveColor.DANGER_RED, unknown=eveColor.SAND_YELLOW)
     86             coloredValueText = eveformat.bold(coloredValueText)
     87         else:
     88             coloredValueText = valueText
     89         gauge.SetValueText(text=coloredValueText)
     90         if modifiedAttribute:
     91             gaugeCont = getattr(gauge, 'gaugeCont', None)
     92             for element in (gauge, gaugeCont):
     93                 if element and element.state == uiconst.UI_DISABLED:
     94                     element.state = uiconst.UI_PICKCHILDREN
     95 
     96             gaugeLabel = getattr(gauge, 'valueText', None)
     97             if gaugeLabel:
     98                 itemID = info.get('itemID', None)
     99                 PrepareInfoTextForAttributeHint(gaugeLabel, modifiedAttribute, itemID)
    100         iconID = info.get('iconID')
    101         if iconID is not None:
    102             container.icon.LoadIcon(iconID, ignoreSize=True)
    103         text = info.get('text')
    104         if text is not None:
    105             container.hint = text
    106 
    107 
    108 class DamageGaugeContainerFitting(DamageGaugeContainer):
    109     containerPadding = 3
    110     showIcon = False
    111     gaugeHeight = 16
    112     gaugeTopOffset = 8
    113 
    114 
    115 class DamageEntry(Generic):
    116 
    117     def Startup(self, *args):
    118         Generic.Startup(self, *args)
    119         self.height = 30
    120         self.damageContainer = DamageGaugeContainer(parent=self)
    121 
    122     def Load(self, node):
    123         node.selectable = False
    124         self.damageContainer.LoadInfo(node.attributeInfoList, node.OnClick)
    125 
    126     def GetHeight(self, *args):
    127         node, width = args
    128         node.height = 30
    129         return node.height
    130 
    131     @classmethod
    132     def GetCopyData(cls, node):
    133         damageTextList = []
    134         for info in node.attributeInfoList:
    135             text = '%s\t%s' % (info['text'], info['valueText'])
    136             damageTextList.append(text)
    137 
    138         return '\n'.join(damageTextList)