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

rewardPreviewItemEntry.py (16218B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\shared\loginRewards\rewardPreviewItemEntry.py
      2 import evetypes
      3 import trinity
      4 import uthread2
      5 from carbon.common.script.sys.serviceConst import ROLE_GML, ROLE_WORLDMOD, ROLE_LEGIONEER
      6 from carbon.common.script.util.format import FmtAmt
      7 from carbonui import uiconst, fontconst
      8 from carbonui.primitives.container import Container
      9 from carbonui.primitives.containerAutoSize import ContainerAutoSize
     10 from carbonui.primitives.sprite import Sprite, StreamingVideoSprite
     11 from carbonui.primitives.stretchspritehorizontal import StretchSpriteHorizontal
     12 from carbonui.uianimations import animations
     13 from clonegrade import COLOR_OMEGA_GOLD
     14 from crates import CratesStaticData
     15 from eve.client.script.ui.control.eveIcon import Icon
     16 from eve.client.script.ui.control.eveLabel import Label, EveLabelMedium, EveLabelSmall
     17 from eve.client.script.ui.shared.loginRewards.congratsCont import CongratsScreenInEntry
     18 from eve.client.script.ui.shared.loginRewards.rewardTooltip import LoadTooltipPanelForReward
     19 from eve.client.script.ui.shared.loginRewards.rewardUiConst import TODAYS_SIDE_PADDING, GREEN_CHECKMARK
     20 from eve.client.script.ui.shared.loginRewards.rewardsCrosshair import RewardCrosshair
     21 from eve.client.script.ui.eveColor import WHITE
     22 from eveexceptions import ExceptionEater
     23 from eveservices.menu import GetMenuService
     24 from inventorycommon.const import categoryBlueprint
     25 from localization import GetByLabel
     26 from loginrewards.client.tooltips import OmegaIconToolTip
     27 from loginrewards.common.const import CLAIM_STATE_CLAIMED
     28 from loginrewards.common.rewardUtils import GetTierName, GetTierColor, GetTierFanfareVideoPath, GetCloneStateVideoPath, ShouldShowQty
     29 import blue
     30 from utillib import KeyVal
     31 OVERLAY_ICON_SIZE = 96
     32 
     33 class PreviewItemEntry(Container):
     34     default_name = 'previewItemEntry'
     35     default_bgColor = (0.1, 0.1, 0.1, 1.0)
     36     default_align = uiconst.CENTER
     37     default_state = uiconst.UI_NORMAL
     38     todayBracketOpacity = 0.1
     39 
     40     def ApplyAttributes(self, attributes):
     41         self.panelController = attributes.panelController
     42         pConst = self.panelController.GetPanelConstants()
     43         self.default_height = pConst.TODAY_HEIGHT
     44         self.currentRewardInfo = None
     45         Container.ApplyAttributes(self, attributes)
     46         self.congratsCont = CongratsScreenInEntry(name='congratsCont', parent=self, panelController=self.panelController)
     47         self.rewardCont = Container(name='rewardCont', parent=self)
     48         self.ConstructRewardCont()
     49         self.crosshair = RewardCrosshair(parent=self)
     50         if session.charid:
     51             self.GetMenu = self.GetMenuFunc
     52 
     53     def ConstructRewardCont(self):
     54         pConst = self.panelController.GetPanelConstants()
     55         self.videoCont = Container(name='videoCont', parent=self.rewardCont, padTop=-2, padBottom=-2, clipChildren=True)
     56         lineTexture = 'res:/UI/Texture/classes/LoginCampaign/todaysRewardBracket.png'
     57         self.todayBracket = StretchSpriteHorizontal(parent=self.rewardCont, align=uiconst.TOBOTTOM_NOPUSH, texturePath=lineTexture, height=12, rightEdgeSize=80, leftEdgeSize=80, opacity=self.todayBracketOpacity)
     58         self.fadeCont = Container(name='fadeCont', parent=self, align=uiconst.CENTER, pos=(0,
     59          0,
     60          pConst.ICON_SIZE,
     61          pConst.ICON_SIZE), state=uiconst.UI_DISABLED)
     62         self.fadeItem = Icon(name='fadeItem', parent=self.fadeCont, align=uiconst.CENTER, pos=(0,
     63          0,
     64          pConst.ICON_SIZE,
     65          pConst.ICON_SIZE), state=uiconst.UI_DISABLED)
     66         self.fanfareVideo = StreamingVideoSprite(parent=self.videoCont, name='fanfareVideo', videoPath='res:/UI/Texture/classes/LoginCampaign/hexagons_09d_greyscale_03.webm', videoLoop=False, align=uiconst.CENTER, state=uiconst.UI_DISABLED, blendMode=trinity.TR2_SBM_ADD, spriteEffect=trinity.TR2_SFX_COPY, opacity=0.0, disableAudio=True, pos=(0, 0, 315, 200))
     67         self.fanfareVideo.Pause()
     68         self.itemCont = Container(name='itemCont', parent=self.rewardCont, pos=(0,
     69          0,
     70          pConst.ICON_SIZE,
     71          pConst.ICON_SIZE), align=uiconst.CENTER)
     72         self.overlaySprite = Sprite(name='overlaySprite', parent=self.itemCont, align=uiconst.CENTER, pos=(0,
     73          0,
     74          OVERLAY_ICON_SIZE,
     75          OVERLAY_ICON_SIZE))
     76         self.qtypar = ContainerAutoSize(parent=self.itemCont, name='qtypar', align=uiconst.BOTTOMRIGHT, bgColor=(0, 0, 0, 0.9))
     77         self.quantityLabel = Label(parent=self.qtypar, maxLines=1, bold=True, fontsize=fontconst.EVE_SMALL_FONTSIZE, opacity=1.0, padding=(4, 1, 4, 0))
     78         self.itemIcon = Icon(parent=self.itemCont, align=uiconst.CENTER, pos=(0,
     79          0,
     80          pConst.ICON_SIZE,
     81          pConst.ICON_SIZE), state=uiconst.UI_DISABLED)
     82         self.typeText = EveLabelMedium(name='typeText', parent=self.rewardCont, align=uiconst.TOTOP_NOPUSH, top=self.height + 6, padLeft=TODAYS_SIDE_PADDING + 4, padRight=TODAYS_SIDE_PADDING + 4, color=WHITE)
     83 
     84     def LoadRewardInfo(self, rewardInfo, fullOpacity = True):
     85         self._LoadRewardInfo(rewardInfo, fullOpacity)
     86         self.SetVideoPath(rewardInfo)
     87 
     88     def _LoadRewardInfo(self, rewardInfo, fullOpacity = True):
     89         pConst = self.panelController.GetPanelConstants()
     90         self.currentRewardInfo = rewardInfo
     91         if not rewardInfo:
     92             self.LoadCompletedScreen(fullOpacity)
     93             return
     94         qty = rewardInfo.qty
     95         typeID = rewardInfo.typeID
     96         texturePath = rewardInfo.texturePath
     97         overlayTexturePath = rewardInfo.overlayTexturePath
     98         iconSize = rewardInfo.iconSize or pConst.ICON_SIZE
     99         self.SetTypeText(rewardInfo)
    100         if texturePath:
    101             self.itemIcon.LoadIcon(texturePath)
    102         else:
    103             self.itemIcon.LoadIconByTypeID(typeID=typeID, isCopy=True)
    104         self.itemIcon.SetSize(iconSize, iconSize)
    105         if overlayTexturePath:
    106             self.overlaySprite.LoadTexture(overlayTexturePath)
    107             self.overlaySprite.display = True
    108         else:
    109             self.overlaySprite.display = False
    110         self.qtypar.display = False
    111         if ShouldShowQty(rewardInfo):
    112             self.qtypar.display = True
    113             self.quantityLabel.text = FmtAmt(qty)
    114 
    115     def _GetTierNamePath(self, tier):
    116         tierNamePath = GetTierName(tier) if tier else None
    117         return tierNamePath
    118 
    119     def SetTierCont(self, tier, fullOpacity = True):
    120         color = GetTierColor(tier)
    121         if color:
    122             self.tierLineCont.display = True
    123             self.tierLineCont.SetColor(color)
    124             if fullOpacity:
    125                 self.tierLineCont.opacity = 1.0
    126             else:
    127                 self.tierLineCont.opacity = 0.0
    128         else:
    129             self.tierLineCont.display = False
    130 
    131     def SetVideoPath(self, rewardInfo):
    132         with ExceptionEater('SetVideoPath'):
    133             if rewardInfo:
    134                 videoPath = self.GetVideoPath(rewardInfo.tier)
    135                 self.fanfareVideo.SetVideoPath(videoPath)
    136                 self.fanfareVideo.Pause()
    137 
    138     def GetVideoPath(self, tier):
    139         return GetTierFanfareVideoPath(tier)
    140 
    141     def LoadNewReward(self, rewardInfo, sleepTimeSec = 2, delayedEndSec = 0, playVideo = True):
    142         self.FadeOutAndPlayVideo(sleepTimeSec, playVideo)
    143         if delayedEndSec:
    144             uthread2.call_after_wallclocktime_delay(self._EndLoadNewReward, delayedEndSec, rewardInfo)
    145         else:
    146             self._EndLoadNewReward(rewardInfo)
    147 
    148     def FadeOutAndPlayVideo(self, sleepTimeSec = 2, playVideo = True):
    149         self.fadeItem.LoadIcon(self.itemIcon.texturePath)
    150         fadeTimeInSec = 0.3
    151         elementsToFade = self.GetElementsToFade()
    152         for eachElement in elementsToFade:
    153             animations.FadeOut(eachElement, duration=fadeTimeInSec)
    154 
    155         blue.pyos.synchro.SleepWallclock(fadeTimeInSec * 1000)
    156         timeOffset = 0.6 * sleepTimeSec
    157         if playVideo:
    158             self.fanfareVideo.Play()
    159             animations.FadeIn(self.fanfareVideo, duration=0.1)
    160             animations.FadeOut(self.fadeCont, duration=fadeTimeInSec, timeOffset=timeOffset)
    161             blue.pyos.synchro.SleepWallclock(sleepTimeSec * 1000)
    162         else:
    163             animations.FadeOut(self.fadeCont, duration=fadeTimeInSec)
    164 
    165     def _EndLoadNewReward(self, rewardInfo):
    166         if not self or self.destroyed:
    167             return
    168         fadeTimeInSec = 0.3
    169         self._LoadRewardInfo(rewardInfo, False)
    170         elementsToFade = self.GetElementsToFade()
    171         for eachElement in elementsToFade:
    172             endValue = getattr(eachElement, 'fullOpacity', 1.0)
    173             animations.FadeTo(eachElement, eachElement.opacity, endValue, duration=fadeTimeInSec)
    174 
    175         uthread2.call_after_wallclocktime_delay(self.SetVideoPath, 2, rewardInfo)
    176 
    177     def GetElementsToFade(self):
    178         elementsToFade = [self.typeText, self.itemCont, self.crosshair]
    179         return elementsToFade
    180 
    181     def SetTypeText(self, rewardInfo):
    182         text = self.GetTypeText(rewardInfo)
    183         self.typeText.text = text
    184 
    185     def GetTypeText(self, rewardInfo):
    186         rewardName = rewardInfo.GetRewardName()
    187         qty = rewardInfo.qty
    188         if ShouldShowQty(rewardInfo):
    189             text = '<center><b>%s</b></center>' % GetByLabel('UI/LoginRewards/NumType', qty=qty, typeName=rewardName)
    190         else:
    191             text = '<center><b>%s</b></center>' % rewardName
    192         return text
    193 
    194     def GetMenuFunc(self, *args):
    195         typeID = self.currentRewardInfo.typeID
    196         pConst = self.panelController.GetPanelConstants()
    197         if not pConst.CRATES_HAVE_INFO and CratesStaticData().is_crate(typeID):
    198             if session.role & (ROLE_GML | ROLE_WORLDMOD | ROLE_LEGIONEER):
    199                 return [('GM / WM Extras', ('isDynamic', GetMenuService().GetGMMenu, (None,
    200                     None,
    201                     None,
    202                     None,
    203                     None,
    204                     typeID)))]
    205             return []
    206         if evetypes.GetCategoryID(typeID) == categoryBlueprint:
    207             bpData = sm.GetService('blueprintSvc').GetBlueprintTypeCopy(typeID=typeID, runsRemaining=self.currentRewardInfo.qty, original=False)
    208             abstractInfo = KeyVal(fullBlueprintData=bpData)
    209         else:
    210             abstractInfo = None
    211         return GetMenuService().GetMenuFromItemIDTypeID(None, typeID, includeMarketDetails=True, abstractInfo=abstractInfo)
    212 
    213     def LoadCompletedScreen(self, fullOpacity = True):
    214         if fullOpacity:
    215             self.rewardCont.Hide()
    216         else:
    217             animations.FadeOut(self.rewardCont, duration=0.2, callback=lambda *args: self.rewardCont.Hide())
    218         self.crosshair.SetSideSpriteDisplay(False)
    219         self.congratsCont.LoadCongratsScreen()
    220 
    221     def LoadTooltipPanel(self, tooltipPanel, *args):
    222         if not self.currentRewardInfo:
    223             return
    224         LoadTooltipPanelForReward(tooltipPanel, self.currentRewardInfo)
    225 
    226 
    227 class CompactPreviewItemEntry(PreviewItemEntry):
    228     cloneTexture = ''
    229     default_padTop = 4
    230     default_padBottom = 4
    231     cloneSpriteColor = (1, 1, 1, 0)
    232     cloneText = ''
    233     todayBracketOpacity = 0.4
    234 
    235     def ApplyAttributes(self, attributes):
    236         PreviewItemEntry.ApplyAttributes(self, attributes)
    237         wOffest = 60
    238         hOffset = 10
    239         w = self.absoluteRight - self.absoluteLeft
    240         wCenter = w / 2
    241         wLeft = wCenter + wOffest
    242         h = self.absoluteBottom - self.absoluteTop
    243         hCenter = h / 2
    244         hTop = hCenter + hOffset
    245         self.cloneSprite = Sprite(name='cloneSprite', parent=self.rewardCont, opacity=1.0, align=uiconst.BOTTOMRIGHT, state=uiconst.UI_DISABLED, texturePath=self.cloneTexture, pos=(wLeft,
    246          hTop,
    247          30,
    248          30), color=self.cloneSpriteColor)
    249         textColor = self.cloneSpriteColor[:3] + (0.8,)
    250         self.cloneLabel = EveLabelMedium(parent=self.rewardCont, align=uiconst.TOPRIGHT, pos=(wLeft,
    251          hTop,
    252          0,
    253          0), text=self.cloneText, color=textColor)
    254         self.typeText.Close()
    255         maxWidth = w - wLeft
    256         maxHeight = h - hTop
    257         self.typeText = EveLabelSmall(parent=self.rewardCont, align=uiconst.TOPLEFT, text='', color=textColor, pos=(wLeft,
    258          hTop,
    259          maxWidth,
    260          0))
    261         self.typeText.SetBottomAlphaFade(maxHeight - 10, 10)
    262         self.claimedIcon = Sprite(parent=self.rewardCont, align=uiconst.CENTER, pos=(0, 0, 64, 64), texturePath='res:/ui/Texture/classes/LoginCampaign/claimedCheck.png', hint=GetByLabel('UI/LoginRewards/HasBeenClaimed'), color=GREEN_CHECKMARK, idx=0)
    263         self.claimedIcon.display = False
    264 
    265     def _LoadRewardInfo(self, rewardInfo, fullOpacity = True):
    266         PreviewItemEntry._LoadRewardInfo(self, rewardInfo, fullOpacity)
    267         if not rewardInfo:
    268             return
    269         rewardName = rewardInfo.GetRewardName()
    270         self.typeText.text = rewardName
    271 
    272     def GetElementsToFade(self):
    273         elements = PreviewItemEntry.GetElementsToFade(self)
    274         elements += [self.cloneSprite, self.cloneLabel]
    275         return elements
    276 
    277 
    278 class TwoTrackPreviewItemEntryAlpha(CompactPreviewItemEntry):
    279     cloneTexture = 'res:/UI/Texture/classes/LoginCampaign/alpha_Icon.png'
    280     cloneText = GetByLabel('UI/LoginRewards/CloneAlpha')
    281     cloneSpriteColor = (1, 1, 1, 1)
    282 
    283     def _LoadRewardInfo(self, rewardInfo, fullOpacity = True):
    284         if rewardInfo and rewardInfo.claimState == CLAIM_STATE_CLAIMED:
    285             self.claimedIcon.display = True
    286             self.itemIcon.opacity = 0.5
    287         else:
    288             self.claimedIcon.display = False
    289         CompactPreviewItemEntry._LoadRewardInfo(self, rewardInfo, fullOpacity)
    290         if not rewardInfo:
    291             return
    292 
    293     def GetVideoPath(self, *args):
    294         return GetCloneStateVideoPath(isOmegaEntry=False)
    295 
    296 
    297 class TwoTrackPreviewItemEntryOmega(CompactPreviewItemEntry):
    298     cloneTexture = 'res:/UI/Texture/classes/LoginCampaign/omega_Icon.png'
    299     cloneSpriteColor = COLOR_OMEGA_GOLD
    300     cloneText = GetByLabel('UI/LoginRewards/CloneOmega')
    301 
    302     def ApplyAttributes(self, attributes):
    303         CompactPreviewItemEntry.ApplyAttributes(self, attributes)
    304         self.omegaLockSprite = Sprite(name='omegaLockSprite', parent=self.rewardCont, texturePath='res:/UI/Texture/classes/LoginCampaign/rewardTrack_omegaLocked.png', pos=(0, -8, 24, 24), align=uiconst.CENTERBOTTOM, state=uiconst.UI_NORMAL, idx=0, color=COLOR_OMEGA_GOLD)
    305         self.omegaLockSprite.tooltipPanelClassInfo = OmegaIconToolTip(sm.GetService('loginCampaignService').open_vgs_to_buy_omega_time_from_DLI)
    306         self.SetOmegaState()
    307 
    308     def ConstructHatchPattern(self):
    309         if getattr(self, 'hatchCont', None) is None:
    310             self.hatchCont = Container(name='hatchCont', parent=self.rewardCont, align=uiconst.TOALL, clipChildren=True, idx=1, bgColor=(0, 0, 0, 0.55))
    311             color = COLOR_OMEGA_GOLD[:3] + (0.2,)
    312             hatchPattern = Sprite(name='hatchPattern', parent=self.hatchCont, texturePath='res:/UI/Texture/Classes/LoginCampaign/itemContainer_negation.png', align=uiconst.CENTERBOTTOM, pos=(0, 0, 372, 198), state=uiconst.UI_DISABLED, color=color)
    313 
    314     def LoadRewardInfo(self, rewardInfo, fullOpacity = True):
    315         CompactPreviewItemEntry.LoadRewardInfo(self, rewardInfo, fullOpacity)
    316         if not rewardInfo:
    317             return
    318         newCrosshairColor = COLOR_OMEGA_GOLD[:3] + (RewardCrosshair.LINE_OPACITY,)
    319         self.crosshair.SetRGBA(newCrosshairColor)
    320         newTodayBracketColor = COLOR_OMEGA_GOLD[:3] + (self.todayBracket.opacity,)
    321         self.todayBracket.SetRGBA(*newTodayBracketColor)
    322         self.SetOmegaState()
    323 
    324     def SetOmegaState(self):
    325         if self.panelController.IsOmega():
    326             self.omegaLockSprite.display = False
    327             if getattr(self, 'hatchCont', None):
    328                 self.hatchCont.display = False
    329         else:
    330             self.omegaLockSprite.display = True
    331             self.ConstructHatchPattern()
    332             self.hatchCont.display = True
    333 
    334     def GetVideoPath(self, *args):
    335         return GetCloneStateVideoPath(isOmegaEntry=True)
    336 
    337 
    338 class ReminderPreviewItemEntry(CompactPreviewItemEntry):
    339     cloneSpriteColor = (1, 1, 1, 0)
    340 
    341     def ApplyAttributes(self, attributes):
    342         CompactPreviewItemEntry.ApplyAttributes(self, attributes)