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

incursionJournal.py (8818B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\shared\incursionJournal.py
      2 import localization
      3 from carbon.common.script.util.format import FmtAmt
      4 from carbonui import uiconst
      5 from carbonui.control.scrollentries import SE_BaseClassCore
      6 from carbonui.primitives.container import Container
      7 from eve.client.script.ui.control import eveIcon, eveLabel
      8 from carbonui.control.button import Button
      9 from eve.client.script.ui.control.themeColored import LineThemeColored
     10 from eve.client.script.ui.shared.mapView.mapViewUtil import OpenMap
     11 from eve.client.script.ui.shared.infoPanels.infoPanelIncursions import IncursionFinalEncounterIcon, SystemInfluenceBar
     12 from eve.client.script.ui.shared.maps.mapcommon import STARMODE_INCURSION, STARMODE_FRIENDS_CORP
     13 from talecommon.influence import CalculateDecayedInfluence
     14 MIDDLECONTAINER_WIDTH = 200
     15 MARGIN = 8
     16 
     17 class IncursionTab:
     18     GlobalReport, Encounters, LPLog = range(3)
     19 
     20 
     21 class GlobalIncursionReportEntry(SE_BaseClassCore):
     22     __guid__ = 'listentry.GlobalIncursionReportEntry'
     23     MARGIN = 8
     24     TEXT_OFFSET = 84
     25     BUTTON_OFFSET = 295
     26 
     27     def ApplyAttributes(self, attributes):
     28         SE_BaseClassCore.ApplyAttributes(self, attributes)
     29         self.iconsize = iconsize = 44
     30         LineThemeColored(parent=self, align=uiconst.TOBOTTOM)
     31         self.factionParent = Container(name='factionParent', parent=self, align=uiconst.TOLEFT, pos=(0, 0, 64, 64), padding=MARGIN)
     32         middleCont = Container(parent=self, name='middleContainer', width=MIDDLECONTAINER_WIDTH, align=uiconst.TOLEFT, padTop=MARGIN, clipChildren=True)
     33         self.constellationLabel = BigReportLabel(name='constellationName', parent=middleCont, fontsize=20, align=uiconst.TOTOP, state=uiconst.UI_NORMAL)
     34         self.statusText = SmallReportLabel(parent=middleCont, align=uiconst.TOTOP, uppercase=True)
     35         SmallReportLabel(name='systemInfluence', parent=middleCont, align=uiconst.TOTOP, text=localization.GetByLabel('UI/Incursion/Common/HUDInfluenceTitle'))
     36         self.statusBar = SystemInfluenceBar(parent=middleCont, pos=(0, 0, 200, 10), align=uiconst.TOTOP, padding=(0, 4, 0, 4))
     37         self.stagingText = SmallReportLabel(parent=middleCont, align=uiconst.TOTOP, state=uiconst.UI_NORMAL)
     38         self.finalEncounterIcon = IncursionFinalEncounterIcon(parent=middleCont, left=3, top=3, align=uiconst.TOPRIGHT, idx=0)
     39         self.corpMapButton = Button(parent=self, texturePath='res:/ui/Texture/WindowIcons/corpmap.png', left=self.BUTTON_OFFSET, top=MARGIN, iconSize=iconsize, align=uiconst.BOTTOMLEFT, hint=localization.GetByLabel('UI/Incursion/Journal/ShowActiveCorpMembersInMap'))
     40         self.mapButton = Button(parent=self, texturePath='res:/ui/Texture/WindowIcons/map.png', left=self.BUTTON_OFFSET + 50, top=MARGIN, iconSize=iconsize, align=uiconst.BOTTOMLEFT, hint=localization.GetByLabel('UI/Incursion/Journal/ShowOnStarMap'))
     41         self.autopilotButton = Button(parent=self, texturePath='res:/ui/Texture/WindowIcons/ships.png', left=self.BUTTON_OFFSET + 100, top=MARGIN, iconSize=iconsize, align=uiconst.BOTTOMLEFT, hint=localization.GetByLabel('UI/Incursion/Journal/StagingAsAutopilotDestination'))
     42         self.lpButton = Button(parent=self, texturePath='res:/ui/Texture/WindowIcons/lpstore.png', left=self.BUTTON_OFFSET, top=MARGIN, iconSize=iconsize, align=uiconst.TOPLEFT, hint=localization.GetByLabel('UI/Incursion/Journal/ViewLoyaltyPointLog'))
     43         self.loyaltyPoints = ReportNumber(name='loyaltyPoints', parent=self, pos=(self.BUTTON_OFFSET + 50,
     44          MARGIN,
     45          105,
     46          iconsize), number=0, hint=localization.GetByLabel('UI/Incursion/Journal/LoyaltyPointsWin'), padding=(4, 4, 4, 4))
     47 
     48     def Load(self, data):
     49         iconsize = 48
     50         self.factionParent.Flush()
     51         if hasattr(data, 'aggressorFactionID') and data.aggressorFactionID:
     52             factionID = data.aggressorFactionID
     53             owner = cfg.eveowners.Get(factionID)
     54             eveIcon.GetLogoIcon(parent=self.factionParent, align=uiconst.RELATIVE, size=64, itemID=factionID, ignoreSize=True, hint=localization.GetByLabel('UI/Incursion/Journal/FactionStagingRuler', faction=owner.ownerName))
     55         rowHeader = localization.GetByLabel('UI/Incursion/Journal/ReportRowHeader', constellation=data.constellationID, constellationInfo=('showinfo', const.typeConstellation, data.constellationID))
     56         self.constellationLabel.SetText(rowHeader)
     57         incursionStateMessages = [localization.GetByLabel('UI/Incursion/Journal/Withdrawing'), localization.GetByLabel('UI/Incursion/Journal/Mobilizing'), localization.GetByLabel('UI/Incursion/Journal/Established')]
     58         self.statusText.SetText(incursionStateMessages[data.state])
     59         if data.jumps is not None:
     60             distanceAwayText = localization.GetByLabel('UI/Incursion/Journal/ReportRowNumJumps', jumps=data.jumps)
     61         else:
     62             distanceAwayText = localization.GetByLabel('UI/Incursion/Journal/ReportRowSystemUnreachable')
     63         bodyText = localization.GetByLabel('UI/Incursion/Journal/ReportRowBody', color='<color=' + sm.GetService('map').GetSystemColorString(data.stagingSolarSystemID) + '>', security=data.security, securityColor=sm.GetService('map').GetSystemColorString(data.stagingSolarSystemID), system=data.stagingSolarSystemID, systemInfo=('showinfo', const.typeSolarSystem, data.stagingSolarSystemID), distanceAway=distanceAwayText)
     64         self.stagingText.SetText(bodyText)
     65         self.statusBar.SetInfluence(CalculateDecayedInfluence(data.influenceData), None, animate=False)
     66         self.finalEncounterIcon.SetFinalEncounterSpawned(data.hasFinalEncounter)
     67         self.corpMapButton.func = lambda *args: OpenMap(interestID=data.constellationID, starColorMode=STARMODE_FRIENDS_CORP)
     68         self.mapButton.func = lambda *args: OpenMap(interestID=data.constellationID, starColorMode=STARMODE_INCURSION)
     69         self.autopilotButton.func = lambda *args: sm.GetService('starmap').SetWaypoint(data.stagingSolarSystemID, clearOtherWaypoints=True)
     70         self.lpButton.func = lambda *args: sm.GetService('journal').ShowIncursionTab(flag=IncursionTab.LPLog, taleID=data.taleID, constellationID=data.constellationID)
     71         self.loyaltyPoints.number.SetText(localization.GetByLabel('UI/Incursion/Journal/NumberLoyaltyPointsAcronym', points=FmtAmt(data.loyaltyPoints)))
     72 
     73     def GetDynamicHeight(node, width):
     74         rowHeader = localization.GetByLabel('UI/Incursion/Journal/ReportRowHeader', constellation=node.constellationID, constellationInfo=('showinfo', const.typeConstellation, node.constellationID))
     75         headerWidth, headerHeight = BigReportLabel.MeasureTextSize(rowHeader, fontsize=20, width=MIDDLECONTAINER_WIDTH)
     76         incursionStateMessages = [localization.GetByLabel('UI/Incursion/Journal/Withdrawing'), localization.GetByLabel('UI/Incursion/Journal/Mobilizing'), localization.GetByLabel('UI/Incursion/Journal/Established')]
     77         statusWidth, statusHeight = SmallReportLabel.MeasureTextSize(incursionStateMessages[node.state], width=MIDDLECONTAINER_WIDTH)
     78         influenceWidth, influenceHeight = SmallReportLabel.MeasureTextSize(localization.GetByLabel('UI/Incursion/Common/HUDInfluenceTitle'), width=MIDDLECONTAINER_WIDTH)
     79         statusBar = 18
     80         if node.jumps is not None:
     81             distanceAwayText = localization.GetByLabel('UI/Incursion/Journal/ReportRowNumJumps', jumps=node.jumps)
     82         else:
     83             distanceAwayText = localization.GetByLabel('UI/Incursion/Journal/ReportRowSystemUnreachable')
     84         bodyText = localization.GetByLabel('UI/Incursion/Journal/ReportRowBody', color='<color=' + sm.GetService('map').GetSystemColorString(node.stagingSolarSystemID) + '>', security=node.security, securityColor=sm.GetService('map').GetSystemColorString(node.stagingSolarSystemID), system=node.stagingSolarSystemID, systemInfo=('showinfo', const.typeSolarSystem, node.stagingSolarSystemID), distanceAway=distanceAwayText)
     85         bodyWidth, bodyHeight = SmallReportLabel.MeasureTextSize(bodyText, width=MIDDLECONTAINER_WIDTH)
     86         return max(114, headerHeight + statusHeight + influenceHeight + statusBar + bodyHeight + MARGIN * 2)
     87 
     88 
     89 class ReportNumber(Container):
     90     default_align = uiconst.RELATIVE
     91     default_clipChildren = True
     92 
     93     def ApplyAttributes(self, attributes):
     94         Container.ApplyAttributes(self, attributes)
     95         number = attributes.Get('number', 0)
     96         self.number = BigReportLabel(name='bignumber', parent=self, align=uiconst.CENTERRIGHT, text=str(number), fontsize=18, hint=attributes.Get('hint', None))
     97 
     98 
     99 class SmallReportLabel(eveLabel.Label):
    100     default_align = uiconst.RELATIVE
    101     default_fontsize = 13
    102 
    103 
    104 class BigReportLabel(eveLabel.Label):
    105     default_fontsize = 20
    106     default_letterspace = 0
    107     default_align = uiconst.RELATIVE
    108     default_maxLines = None