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)