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

droneTooltip.py (5114B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\shared\fittingScreen\droneTooltip.py
      2 import dogma.attributes.format as attributeFormat
      3 import eveformat
      4 import evetypes
      5 import log
      6 from carbon.common.script.util.timerstuff import AutoTimer
      7 from dogma.data import get_attribute_display_name, get_attribute
      8 from eve.client.script.ui import eveColor
      9 from eve.client.script.ui.inflight.shipModuleButton.moduleButtonTooltip import ModuleButtonTooltip
     10 from eve.client.script.ui.tooltips.tooltipsWrappers import TooltipBaseWrapper
     11 from eve.common.lib import appConst
     12 from fsdBuiltData.common.iconIDs import GetIconFile
     13 from localization import GetByLabel
     14 from utillib import KeyVal
     15 
     16 class DroneTooltipWrapper(TooltipBaseWrapper):
     17 
     18     def CreateTooltip(self, parent, owner, idx):
     19         self.tooltipPanel = DroneTooltip(parent=parent, owner=owner, idx=idx)
     20         return self.tooltipPanel
     21 
     22 
     23 class DroneFittingTooltipWrapper(TooltipBaseWrapper):
     24 
     25     def CreateTooltip(self, parent, owner, idx):
     26         self.tooltipPanel = DroneFittingTooltip(parent=parent, owner=owner, idx=idx)
     27         return self.tooltipPanel
     28 
     29 
     30 class DroneTooltip(ModuleButtonTooltip):
     31     infoFunctionNames = {appConst.groupMiningDrone: 'AddMiningDroneInfo'}
     32 
     33     def LoadTooltip(self):
     34         if not self.owner:
     35             return
     36         itemIDs = self.owner.sr.node.itemIDs
     37         if not itemIDs:
     38             return
     39         self.moduleItemID = list(itemIDs)[0]
     40         self.ownerGuid = 'Drones'
     41         if not self.moduleItemID:
     42             return
     43         self.dogmaLocation = self.GetDogmaLocation()
     44         self.moduleInfoItem = self.dogmaLocation.GetDogmaItem(self.moduleItemID)
     45         self.moduleGroupID = evetypes.GetGroupID(self.moduleInfoItem.typeID)
     46         self.moduleCategoryID = evetypes.GetCategoryID(self.moduleInfoItem.typeID)
     47         self.numSlaves = 0
     48         if self.stateManager.GetDefaultEffect(self.moduleInfoItem.typeID):
     49             self.moduleShortcut = self.GetModuleShortcut(self.moduleInfoItem)
     50         else:
     51             self.moduleShortcut = None
     52         self.typeName = evetypes.GetName(self.moduleInfoItem.typeID)
     53         self.onHUDModuleButton = False
     54         self.UpdateToolTips()
     55         self._toolTooltipUpdateTimer = AutoTimer(1000, self.UpdateToolTips)
     56 
     57     def GetDogmaLocation(self):
     58         return sm.GetService('clientDogmaIM').GetDogmaLocation()
     59 
     60     def GetNumberOfSlaves(self, *args):
     61         return 1
     62 
     63     def ShouldAddDps(self, *args):
     64         return True
     65 
     66     def GetDpsDamageTypeInfo(self, itemID, typeID, groupID, charge, numSlaves):
     67         shipID = self.dogmaLocation.GetCurrentShipID()
     68         drones = {itemID: 1}
     69         damage, _ = self.dogmaLocation.GetOptimalDroneDamage2(shipID, drones)
     70         return KeyVal(totalDpsDamage=damage, totalDpsDamageWithReload=damage, texturePath='res:/UI/Texture/Icons/drones.png', iconID=None, damageMultiplier=1, totalMaxDpsDamage=None, totalMaxDpsDamageWithReload=None)
     71 
     72     def AddActivityStatus(self):
     73         pass
     74 
     75     def AddCountDownTimes(self, itemID):
     76         pass
     77 
     78     def GetModuleDamage(self, ownerGuid, moduleItemID):
     79         return KeyVal(moduleDamage=None, repairingModuleDamage=None, repairTimeLeft=None)
     80 
     81     def AddMiningDroneInfo(self, itemID, chargeInfoItem):
     82         durationText = self.GetDuration(itemID)
     83         amount = self.GetEffectiveAttributeValue(itemID, appConst.attributeMiningAmount)
     84         durationInSec = self.GetEffectiveAttributeValue(itemID, appConst.attributeDuration) / 1000.0
     85         amountPerSec = amount / durationInSec
     86         text = GetByLabel('UI/Inflight/ModuleRacks/Tooltips/MiningAmountPerTime2', duration=durationText, amount=amount, amountPerSec=amountPerSec)
     87         self.AddRowWithIconAndText(text=text, texturePath='res:/ui/texture/icons/23_64_5.png')
     88 
     89     def UpdateToolTips(self):
     90         try:
     91             super(DroneTooltip, self).UpdateToolTips()
     92             self.AddDroneBandwidthUsed()
     93         except KeyError as e:
     94             log.LogWarn('Failed to display drone tooltip, keyError e = ', e)
     95 
     96     def GetTypeText(self):
     97         text = super(DroneTooltip, self).GetTypeText()
     98         activity = self.owner.GetDroneActivityDescription()
     99         if activity:
    100             text += u'<br>{}'.format(eveformat.color(activity, eveColor.SUCCESS_GREEN))
    101         state = self.owner.GetDroneStateDescription()
    102         if state:
    103             text += u'<br>{}'.format(state)
    104         return text
    105 
    106     def AddDroneBandwidthUsed(self):
    107         value = self.GetEffectiveAttributeValue(self.moduleItemID, appConst.attributeDroneBandwidthUsed)
    108         displayName = get_attribute_display_name(appConst.attributeDroneBandwidthUsed)
    109         text = '%s %s' % (displayName, attributeFormat.GetFormatAndValue(get_attribute(appConst.attributeDroneBandwidthUsed), value))
    110         texturePath = GetIconFile(attributeFormat.GetIconID(appConst.attributeDroneBandwidthUsed))
    111         self.AddRowWithIconAndText(text, texturePath)
    112 
    113 
    114 class DroneFittingTooltip(DroneTooltip):
    115 
    116     def GetDogmaLocation(self):
    117         return sm.GetService('clientDogmaIM').GetFittingDogmaLocation()