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)