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

rewardPreviewCont.py (14372B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\shared\loginRewards\rewardPreviewCont.py
      2 import gametime
      3 from carbon.common.script.util.format import FmtDate
      4 from carbon.common.script.util.timerstuff import AutoTimer
      5 from carbonui import uiconst
      6 from carbonui.primitives.container import Container
      7 from carbonui.primitives.fill import Fill
      8 from carbonui.uianimations import animations
      9 from carbonui.util.color import Color
     10 from eve.client.script.ui.control.eveLabel import EveLabelMedium, EveLabelLargeBold
     11 from eve.client.script.ui.control.infoIcon import MoreInfoIcon
     12 from eve.client.script.ui.eveColor import WHITE
     13 from eve.client.script.ui.shared.loginRewards.congratsCont import TwoTrackCongratsScreen
     14 from eve.client.script.ui.shared.loginRewards.rewardPreviewItemEntry import PreviewItemEntry, TwoTrackPreviewItemEntryAlpha, TwoTrackPreviewItemEntryOmega
     15 from eve.client.script.ui.shared.loginRewards.rewardUiConst import TODAYS_SIDE_PADDING, BLUE_TEXT_COLOR, ONLY_ALPHA_GIFT_REWARDED, ONLY_OMEGA_GIFT_REWARDED
     16 from localization import GetByLabel
     17 from loginrewards.client.tooltips import TooltipButtonTooltip
     18 from loginrewards.common.rewardUtils import GetAnimationTime
     19 
     20 class OneTrackRewardPreviewCont(Container):
     21 
     22     def ApplyAttributes(self, attributes):
     23         Container.ApplyAttributes(self, attributes)
     24         self.panelController = attributes.panelController
     25         pConst = self.panelController.GetPanelConstants()
     26         self.rewardInfo = None
     27         self.nextRewardTime = None
     28         self.todaysItem = Container(name='todaysItem', parent=self, align=uiconst.TOALL)
     29         self.ConstructCountdownCont()
     30         todaysItemMain = Container(name='todaysItemMain', parent=self.todaysItem, align=uiconst.TOALL, clipChildren=True)
     31         todaysItemMainWidth = todaysItemMain.absoluteRight - todaysItemMain.absoluteLeft
     32         self.rewardItemCont = PreviewItemEntry(parent=todaysItemMain, align=uiconst.CENTER, panelController=self.panelController, width=todaysItemMainWidth, top=-20)
     33         self.countdownThread = AutoTimer(500, self.UpdateCountDown_thread)
     34         redeemOffset = pConst.VERTICAL_OFFSET + pConst.TODAY_HEIGHT / 2 + 35
     35         redeemMaxWidth = todaysItemMainWidth - 2 * TODAYS_SIDE_PADDING
     36         self.redeemingLabel = EveLabelMedium(name='redeemingLabel', parent=todaysItemMain, align=uiconst.CENTER, opacity=0.75, state=uiconst.UI_NORMAL, top=redeemOffset, maxWidth=redeemMaxWidth)
     37         self.redeemingLabel.display = False
     38         self.fullOpacity = 0.75
     39 
     40     def ConstructCountdownCont(self):
     41         pConst = self.panelController.GetPanelConstants()
     42         if pConst.SHOW_NEXT_GIFT:
     43             self.countdownCont = Container(name='countdownCont', parent=self.todaysItem, align=uiconst.TOTOP_NOPUSH, height=20)
     44             self.countdownLabel = EveLabelMedium(parent=self.countdownCont, align=uiconst.TOTOP, top=6, padLeft=TODAYS_SIDE_PADDING + 4, padRight=TODAYS_SIDE_PADDING + 4)
     45         else:
     46             self.countdownCont = Container(name='countdownCont', parent=self.todaysItem, align=uiconst.TOTOP_NOPUSH, height=20)
     47             self.countdownLabel = EveLabelMedium(parent=self.countdownCont, align=uiconst.CENTERTOP, top=6, padLeft=TODAYS_SIDE_PADDING + 4, padRight=TODAYS_SIDE_PADDING + 4)
     48 
     49     def UpdateCountDown_thread(self):
     50         if not self or self.destroyed:
     51             self.countdownThread = None
     52             return
     53         self._UpdateCountDown()
     54 
     55     def _UpdateCountDown(self):
     56         now = gametime.GetWallclockTime()
     57         if not self.nextRewardTime:
     58             return
     59         pConst = self.panelController.GetPanelConstants()
     60         if pConst.SHOW_NEXT_GIFT:
     61             text = FmtDate(self.nextRewardTime - now, 'ss') if now < self.nextRewardTime else ''
     62             text = '<center>%s</center>' % text
     63         else:
     64             endTime = max(0, self.nextRewardTime - now)
     65             text = GetByLabel('UI/LoginRewards/NextGiftWithTimer', endTime=endTime, formattingStart='', formattingEnd='')
     66         self.countdownLabel.text = text
     67         self.countdownCont.display = bool(now < self.nextRewardTime)
     68 
     69     def LoadRewardInfo(self, rewardInfo, next_reward_time, withTransition = False):
     70         if withTransition:
     71             currentTier = self.rewardInfo.tier if self.rewardInfo else None
     72             sleepTimeSec = GetAnimationTime(currentTier)
     73             self.FadeElements(fadeIn=False)
     74             self.rewardItemCont.LoadNewReward(rewardInfo, sleepTimeSec=sleepTimeSec)
     75             self.FadeElements(fadeIn=True)
     76         else:
     77             self.rewardItemCont.LoadRewardInfo(rewardInfo)
     78         self.rewardInfo = rewardInfo
     79         self.nextRewardTime = next_reward_time
     80         self._UpdateCountDown()
     81         self.UpdateReemLabel()
     82 
     83     def OnClaimBtnClicked(self, *args):
     84         self.panelController.ClaimReward()
     85 
     86     def Close(self):
     87         self.countdownThread = None
     88         Container.Close(self)
     89 
     90     def FadeElements(self, fadeIn = True):
     91         elementsToFade = [self.redeemingLabel, self.countdownCont]
     92         for eachElement in elementsToFade:
     93             if fadeIn:
     94                 endValue = getattr(eachElement, 'fullOpacity', 1.0)
     95             else:
     96                 endValue = 0
     97             animations.FadeTo(eachElement, eachElement.opacity, endValue, duration=0.3)
     98 
     99     def UpdateReemLabel(self):
    100         posInGrid = self.panelController.GetPositionInGridTrack()
    101         claimedReward = self.panelController.GetClaimedRewardForDay(posInGrid)
    102         if claimedReward:
    103             pConst = self.panelController.GetPanelConstants()
    104             if session.charid:
    105                 linkStart = '<url=localsvc:method=ShowRedeemUI>'
    106                 linkEnd = '</url>'
    107             else:
    108                 hexColor = Color.RGBtoHex(*BLUE_TEXT_COLOR)
    109                 linkStart = '<color=%s><b>' % hexColor
    110                 linkEnd = '</b></color>'
    111             text = GetByLabel('UI/LoginRewards/ClaimExplanationText', linkStart=linkStart, linkEnd=linkEnd)
    112             self.redeemingLabel.text = '<center>%s</center>' % text
    113             self.redeemingLabel.display = True
    114             textOffset = self.rewardItemCont.typeText.height + 6 + self.redeemingLabel.height / 2
    115             redeemOffset = pConst.VERTICAL_OFFSET + pConst.TODAY_HEIGHT / 2 + textOffset + 4
    116             self.redeemingLabel.top = redeemOffset
    117         else:
    118             self.redeemingLabel.display = False
    119 
    120 
    121 class TwoTrackRewardPreviewCont(Container):
    122 
    123     def ApplyAttributes(self, attributes):
    124         self.panelController = attributes.panelController
    125         self.rewardInfo = None
    126         self.nextRewardTime = None
    127         Container.ApplyAttributes(self, attributes)
    128         self.cloneCont = Container(name='cloneCont', parent=self)
    129         self.congratsCont = TwoTrackCongratsScreen(name='congratsCont', parent=self, panelController=self.panelController, opacity=0.0)
    130         alphaTrackPar = Container(name='alphaTrackPar', parent=self.cloneCont, align=uiconst.TOTOP_PROP, height=0.5, padding=(0, 4, 0, 4))
    131         omegaTrackPar = Container(name='omegaTrackPar', parent=self.cloneCont, align=uiconst.TOTOP_PROP, height=0.5, padding=(0, 4, 0, 4))
    132         self.alphaRewardItemCont = TwoTrackPreviewItemEntryAlpha(parent=alphaTrackPar, align=uiconst.TOALL, rewardInfo=self.rewardInfo, panelController=self.panelController)
    133         self.omegaRewardItemCont = TwoTrackPreviewItemEntryOmega(parent=omegaTrackPar, align=uiconst.TOALL, rewardInfo=self.rewardInfo, panelController=self.panelController)
    134 
    135     def LoadRewardInfo(self, alphaRewardInfo, omegaRewardInfo, next_reward_time = None, withTransition = False, giftsReceivedConst = None):
    136         if alphaRewardInfo is None:
    137             return
    138         self.nextRewardTime = next_reward_time
    139         if withTransition:
    140             if giftsReceivedConst == ONLY_ALPHA_GIFT_REWARDED:
    141                 self.alphaRewardItemCont.LoadNewReward(alphaRewardInfo)
    142                 self.omegaRewardItemCont.LoadNewReward(omegaRewardInfo, playVideo=False)
    143             elif giftsReceivedConst == ONLY_OMEGA_GIFT_REWARDED:
    144                 self.alphaRewardItemCont.LoadNewReward(alphaRewardInfo, sleepTimeSec=0, playVideo=False)
    145                 self.omegaRewardItemCont.LoadNewReward(omegaRewardInfo)
    146             else:
    147                 self.alphaRewardItemCont.LoadNewReward(alphaRewardInfo, sleepTimeSec=1, delayedEndSec=1)
    148                 self.omegaRewardItemCont.LoadNewReward(omegaRewardInfo)
    149         else:
    150             self.alphaRewardItemCont.LoadRewardInfo(alphaRewardInfo)
    151             self.omegaRewardItemCont.LoadRewardInfo(omegaRewardInfo)
    152 
    153     def PlayVideosAndFadeOut(self, next_reward_time, withTransition, giftsReceivedConst):
    154         self.nextRewardTime = next_reward_time
    155         if withTransition:
    156             if giftsReceivedConst == ONLY_ALPHA_GIFT_REWARDED:
    157                 self.alphaRewardItemCont.FadeOutAndPlayVideo()
    158                 self.omegaRewardItemCont.FadeOutAndPlayVideo(playVideo=False)
    159             elif giftsReceivedConst == ONLY_OMEGA_GIFT_REWARDED:
    160                 self.alphaRewardItemCont.FadeOutAndPlayVideo(playVideo=False)
    161                 self.omegaRewardItemCont.FadeOutAndPlayVideo()
    162             else:
    163                 self.alphaRewardItemCont.FadeOutAndPlayVideo(sleepTimeSec=1)
    164                 self.omegaRewardItemCont.FadeOutAndPlayVideo()
    165         else:
    166             self.cloneCont.display = False
    167 
    168     def LoadCompletedScreen(self, withTransition = False):
    169         if withTransition:
    170             animations.FadeOut(self.cloneCont, duration=0.2, callback=lambda *args: self.cloneCont.Hide())
    171         else:
    172             self.cloneCont.Hide()
    173         self.congratsCont.opacity = 1.0
    174         self.congratsCont.LoadCongratsScreen()
    175 
    176 
    177 class TodaysItemTop(Container):
    178     default_align = uiconst.TOTOP
    179 
    180     def ApplyAttributes(self, attributes):
    181         Container.ApplyAttributes(self, attributes)
    182         self.normalHeight = self.height
    183         self.panelController = attributes.panelController
    184         self.topDayLabel = EveLabelLargeBold(parent=self, align=uiconst.CENTER, color=WHITE)
    185         self.helpIcon = MoreInfoIcon(parent=self, align=uiconst.CENTERRIGHT, left=4)
    186         self.SetupHelpIcon()
    187         self.next_reward_time = None
    188 
    189     def SetupHelpIcon(self):
    190         self.helpIcon.hint = GetByLabel('UI/LoginRewards/ItemHelpIcon')
    191 
    192     def UpdateTextAndHelpIcon(self, next_reward_time):
    193         self.next_reward_time = next_reward_time
    194         if next_reward_time is None:
    195             text = GetByLabel('UI/LoginRewards/CampaignCompletedHeader')
    196             helpIconDisplayState = False
    197         else:
    198             helpIconDisplayState = True
    199             pConst = self.panelController.GetPanelConstants()
    200             now = gametime.GetWallclockTime()
    201             if not pConst.SHOW_NEXT_GIFT or now > next_reward_time:
    202                 text = GetByLabel('UI/LoginRewards/TodaysGift')
    203             else:
    204                 text = GetByLabel('UI/LoginRewards/NextGift')
    205         self.helpIcon.display = helpIconDisplayState
    206         self.SetTopDayLabel(text)
    207 
    208     def SetTopDayLabel(self, text):
    209         if '<br>' in text:
    210             self.topDayLabel.align = uiconst.TOTOP
    211             self.topDayLabel.text = '<center>%s</center>' % text
    212             self.topDayLabel.padTop = 2
    213             self.height = max(self.height, self.topDayLabel.textheight + 2 * self.topDayLabel.padTop)
    214         else:
    215             self.topDayLabel.aign = uiconst.CENTER
    216             self.topDayLabel.padTop = 0
    217             self.topDayLabel.text = text
    218             self.height = self.normalHeight
    219 
    220 
    221 class TwoTrackTodaysItemTop(TodaysItemTop):
    222 
    223     def ApplyAttributes(self, attributes):
    224         TodaysItemTop.ApplyAttributes(self, attributes)
    225         self.countdownThread = None
    226 
    227     def SetupHelpIcon(self):
    228         self.helpIcon.GetTooltipHeader = lambda *args: GetByLabel('UI/LoginRewards/Tooltips/TooltipButtonTooltipHeader')
    229         self.helpIcon.GetTooltipDesc = lambda *args: GetByLabel('UI/LoginRewards/Tooltips/TooltipButtonTooltipBody')
    230         self.helpIcon.GetTooltipTexturePath = lambda *args: 'res:/UI/Texture/WindowIcons/gift.png'
    231         self.helpIcon.tooltipPanelClassInfo = TooltipButtonTooltip()
    232 
    233     def UpdateTextAndHelpIcon(self, nextRewardTime):
    234         now = gametime.GetWallclockTime()
    235         isCampaignEnding = self.panelController.IsCampaignEndingBeforeNextReward()
    236         isCampaignCompleted = self.panelController.HasActiveCampaignBeenCompleted()
    237         if isCampaignCompleted:
    238             self.SetTopDayLabel(GetByLabel('UI/LoginRewards/CampaignCompletedHeader'))
    239             self.helpIcon.display = False
    240         elif isCampaignEnding:
    241             self.helpIcon.display = False
    242             self.StartCountDown('UI/LoginRewards/CampaignEndsHeader', nextRewardTime)
    243         else:
    244             if nextRewardTime is None or now > nextRewardTime:
    245                 return TodaysItemTop.UpdateTextAndHelpIcon(self, nextRewardTime)
    246             self.StartCountDown('UI/LoginRewards/NextGiftWithTimer', nextRewardTime)
    247             self.helpIcon.display = True
    248 
    249     def StartCountDown(self, labelPath, nextRewardTime):
    250         text = self.GetCountdownTextToDisplay(labelPath, nextRewardTime)
    251         self.SetTopDayLabel(text)
    252         self.countdownThread = AutoTimer(500, self.UpdateCountDown_thread, labelPath, nextRewardTime)
    253 
    254     def UpdateCountDown_thread(self, labelPath, nextRewardTime):
    255         if not self or self.destroyed:
    256             self.countdownThread = None
    257             return
    258         self._UpdateCountDown(labelPath, nextRewardTime)
    259 
    260     def _UpdateCountDown(self, labelPath, nextRewardTime):
    261         text = self.GetCountdownTextToDisplay(labelPath, nextRewardTime)
    262         self.SetTopDayLabel(text)
    263 
    264     def GetCountdownTextToDisplay(self, labelPath, nextRewardTime):
    265         if nextRewardTime is None:
    266             return ''
    267         endTime = max(0, nextRewardTime - gametime.GetWallclockTime())
    268         text = GetByLabel(labelPath, endTime=endTime, formattingStart='<color=white>', formattingEnd='</color>')
    269         w, h = self.topDayLabel.MeasureTextSize(text, maxlines=1)
    270         if w > self.absoluteRight - self.absoluteLeft:
    271             text = GetByLabel(labelPath, endTime=endTime, formattingStart='<color=white>', formattingEnd='</color>', optionalLinebreak='<br>')
    272         return text
    273 
    274     def Close(self):
    275         self.countdownThread = None
    276         Container.Close(self)