itemDamage.py (3957B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\shared\tooltip\itemDamage.py 2 from eve.client.script.ui import eveColor 3 from localization.formatters.timeIntervalFormatters import GetByLabel 4 import dogma.const as dogmaConst 5 from dogma.data import get_type_attribute_or_default 6 import uthread2 7 from carbonui import Align, TextColor 8 from eve.client.script.ui.control.eveLoadingWheel import LoadingWheel 9 from inventorycommon.util import MAX_NUM_CRYSTAL_DAMAGE 10 CRYSTAL_LOADING_DELAY_SECONDS = 1.0 11 12 def AddItemDamage(tooltipPanel, item): 13 if _ShouldShowCrystalDamage(item): 14 _AddCrystalDamage(tooltipPanel, item) 15 16 17 def _AddCrystalDamage(tooltipPanel, item): 18 tracker = sm.GetService('inv').crystalDamageTracker 19 cachedDamage = tracker.GetCachedCrystalDamage(item.itemID) 20 damageLabel = tooltipPanel.AddTextDetailsLabel(color=TextColor.SECONDARY, colSpan=tooltipPanel.columns) 21 tooltipPanel.FillRow() 22 if cachedDamage == tracker.NOT_CACHED: 23 damageLabel.text = GetByLabel('UI/Inventory/LoadingCrystalDamage') 24 damageLabel.left = 20 25 loadingWheel = LoadingWheel(parent=damageLabel.parent, align=Align.CENTERLEFT, pos=(0, 0, 16, 16)) 26 uthread2.call_after_wallclocktime_delay(ShowDamage, CRYSTAL_LOADING_DELAY_SECONDS, damageLabel, loadingWheel, item) 27 else: 28 text, color = _GetDamageTextAndColor(cachedDamage) 29 damageLabel.text = text 30 damageLabel.SetRGBA(*color) 31 32 33 def _ShouldShowCrystalDamage(item): 34 if item.ownerID != session.charid: 35 return False 36 if not _DoesTakeCrystalDamage(item.typeID): 37 return False 38 if item.quantity > 0: 39 return False 40 return True 41 42 43 def _DoesTakeCrystalDamage(typeID): 44 if get_type_attribute_or_default(typeID, dogmaConst.attributeCrystalsGetDamaged): 45 return True 46 return False 47 48 49 def _GetDamageTextAndColor(damage): 50 if not damage: 51 return (GetByLabel('UI/Inventory/UndamagedCrystal'), eveColor.SUCCESS_GREEN) 52 percentDamage = int(round(damage * 100)) 53 text = GetByLabel('UI/Inventory/EstimatedCrystalDamage', damage=percentDamage) 54 if percentDamage < 40: 55 color = eveColor.SAND_YELLOW 56 else: 57 color = eveColor.CHERRY_RED 58 return (text, color) 59 60 61 def ShowDamage(damageLabel, loadingWheel, item): 62 if damageLabel.destroyed: 63 return 64 dmgTracker = sm.GetService('inv').crystalDamageTracker 65 cachedDamage = dmgTracker.GetCachedCrystalDamage(item.itemID) 66 if cachedDamage != dmgTracker.NOT_CACHED: 67 text, color = _GetDamageTextAndColor(cachedDamage) 68 damageLabel.text = (text,) 69 damageLabel.SetRGBA(*color) 70 return 71 _PrimeCrystalsInLocation(item, dmgTracker) 72 loadingWheel.Hide() 73 damageLabel.left = 0 74 cachedDamage = dmgTracker.GetCachedCrystalDamage(item.itemID) 75 if cachedDamage == dmgTracker.NOT_CACHED: 76 damageLabel.text = GetByLabel('UI/Inventory/CrystalDamageUnknown') 77 else: 78 text, color = _GetDamageTextAndColor(cachedDamage) 79 damageLabel.text = text 80 damageLabel.SetRGBA(*color) 81 82 83 def _PrimeCrystalsInLocation(item, crystalDamageTracker): 84 maxNum = MAX_NUM_CRYSTAL_DAMAGE 85 invCacheSvc = sm.GetService('invCache') 86 if item.flagID == const.flagHangar: 87 inv = invCacheSvc.GetInventory(const.containerHangar) 88 else: 89 inv = invCacheSvc.GetInventoryFromId(item.locationID, True) 90 if inv is None: 91 return 92 crystalsToPrime = {item.itemID} 93 for eachItem in inv.List(flag=item.flagID): 94 if len(crystalsToPrime) >= maxNum: 95 break 96 if not _ShouldShowCrystalDamage(eachItem): 97 continue 98 cachedDamage = crystalDamageTracker.GetCachedCrystalDamage(eachItem.itemID) 99 if cachedDamage == crystalDamageTracker.NOT_CACHED: 100 crystalsToPrime.add(eachItem.itemID) 101 102 crystalDamageTracker.PrimeCrystals(crystalsToPrime) 103 return crystalsToPrime