oneTrackRewardPanel.py (9216B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\shared\loginRewards\oneTrackRewardPanel.py 2 import copy 3 from carbonui.primitives.container import Container 4 from carbonui import uiconst 5 from carbonui.primitives.fill import Fill 6 from carbonui.util.color import Color 7 from crates import CratesStaticData 8 from eve.client.script.ui.control.eveLabel import EveLabelMedium 9 import eve.client.script.ui.shared.loginRewards.rewardUiConst as rewardUiConst 10 from eve.client.script.ui.shared.loginRewards.bottomCont import OneTrackRewardBottomCont 11 from eve.client.script.ui.shared.loginRewards.browseControls import BrowseControls 12 from eve.client.script.ui.shared.loginRewards.rewardItemsGrid import RewardItemsGrid, RewardItemsGridCycle 13 from eve.client.script.ui.shared.loginRewards.rewardEntry import RewardEntryWithDay, RewardEntryWithTodayAndNextText 14 from eve.client.script.ui.shared.loginRewards.rewardInfo import RewardInfo 15 from eve.client.script.ui.shared.loginRewards.rewardPreviewCont import OneTrackRewardPreviewCont, TodaysItemTop 16 from eve.client.script.ui.shared.loginRewards.twoTrackRewardPanel import trackBgColor 17 from eve.client.script.ui.eveColor import WHITE 18 from localization import GetByLabel 19 from loginrewards.common.const import CLAIM_STATE_CLAIMED 20 from loginrewards.common.rewardUtils import GetClaimState 21 from utillib import KeyVal 22 23 class BaseOneTrackRewardPanel(Container): 24 25 def ApplyAttributes(self, attributes): 26 self.panelController = self.GetPanelController() 27 pConst = self.panelController.GetPanelConstants() 28 self.isScrolling = False 29 self.currentFirstVisibleDay = 0 30 Container.ApplyAttributes(self, attributes) 31 leftPad = 12 32 centerCont = Container(name='centerCont', parent=self, align=uiconst.TOALL, bgColor=(0, 0, 0, 0.75), padding=(leftPad, 33 5, 34 leftPad, 35 0)) 36 self.claimAndBucketCont = OneTrackRewardBottomCont(parent=centerCont, panelController=self.panelController) 37 leftContWidth = pConst.LEFT_WIDTH 38 bracketPadding = 16 39 contTop = Container(name='contTop', parent=centerCont, align=uiconst.TOTOP, height=pConst.CENTER_TOP_HEIGHT) 40 Fill(bgParent=contTop, color=trackBgColor) 41 self.leftCont = Container(name='leftCont', parent=centerCont, align=uiconst.TOLEFT, width=leftContWidth) 42 itemsPar = Container(name='itemsPar', parent=self.leftCont, align=uiconst.TOALL) 43 itemsParInner = Container(name='itemsParInner', parent=itemsPar, align=uiconst.TOALL, padding=(0, 44 bracketPadding + 6, 45 0, 46 bracketPadding + 6), clipChildren=True) 47 itemsContPos = (leftPad, 48 0, 49 pConst.ALL_VISIBLE_DAYS_WIDTH, 50 pConst.ENTRY_HEIGHT) 51 self.itemsCont = Container(name='itemsCont', parent=itemsParInner, align=uiconst.TOLEFT, pos=itemsContPos, clipChildren=True) 52 sideContPadding = (pConst.SECTION_DIVIDER, 53 0, 54 4, 55 0) 56 self.sideCont = OneTrackRewardPreviewCont(name='sideCont', parent=centerCont, align=uiconst.TOALL, padding=sideContPadding, panelController=self.panelController) 57 self.campaignProgressLabel = EveLabelMedium(parent=contTop, align=uiconst.CENTER, left=pConst.SIDE_PADDING, color=WHITE) 58 self.todaysItemTop = TodaysItemTop(name='oneTrackTodaysItemTop', parent=contTop, align=uiconst.TORIGHT, height=pConst.CENTER_TOP_HEIGHT, panelController=self.panelController, padRight=4, width=290) 59 if pConst.SHOW_BROWSE_CONTROLS: 60 BrowseControls(parent=contTop, browseFunc=self.OnBrowse, resetFunc=self.GoToToday, padLeft=3) 61 self.LoadInfo() 62 sm.RegisterNotify(self) 63 64 def GetPanelController(self): 65 raise NotImplemented('panel controller needs to be overriden') 66 67 def GoToToday(self, animationTime = rewardUiConst.SCROLL_ANIMATION, *args): 68 posInTrack = self.panelController.GetPositionInGridTrack() 69 self.GoToDay(posInTrack, animationTime=animationTime) 70 71 def GoToDay(self, posInTrack, animationTime = rewardUiConst.SCROLL_ANIMATION): 72 newDay = self.rewardGrid.GoToSelectedEntry(posInTrack, animationTime) 73 if newDay is not None: 74 self.currentFirstVisibleDay = newDay 75 76 def OnBrowse(self, direction, *args): 77 newDay = self.rewardGrid.OnBrowse(direction, self.currentFirstVisibleDay) 78 if newDay is not None: 79 self.currentFirstVisibleDay = newDay 80 81 def LoadInfo(self): 82 self.LoadGrid() 83 84 def LoadGrid(self): 85 pConst = self.panelController.GetPanelConstants() 86 self.itemsCont.Flush() 87 if not self.panelController.IsUserInCampaign(): 88 return 89 rewards_by_day = self.panelController.GetRewardsByDay() 90 rewardIdx = self.panelController.GetRewardIdx() 91 posInTrack = self.panelController.GetPositionInGridTrack() 92 somethingCanBeClaimedNow = self.panelController.CanSomethingBeClaimedNow() 93 numDays = len(rewards_by_day) 94 if self.panelController.DoesCampaignHaveDuration(): 95 gridClass = RewardItemsGrid 96 else: 97 gridClass = RewardItemsGridCycle 98 self.rewardGrid = gridClass(name='rewardGrid', parent=self.itemsCont, align=uiconst.CENTERLEFT, columns=numDays, numAllEntries=numDays, panelConst=pConst, top=pConst.VERTICAL_OFFSET) 99 entryClass = RewardEntryWithDay if pConst.SHOW_NEXT_GIFT else RewardEntryWithTodayAndNextText 100 entryInfoForGrid = [] 101 cratesStaticData = CratesStaticData() 102 for day, reward in rewards_by_day.iteritems(): 103 isClaimed = self.panelController.ShouldShowAsClaimed(rewardIdx, day) 104 isNextClaimable = rewardIdx == day 105 claimState = GetClaimState(isClaimed, isNextClaimable, somethingCanBeClaimedNow) 106 displayNameID = cratesStaticData.get_crate_nameID(reward.typeID) 107 rewardInfo = RewardInfo(day, reward, claimState=claimState, messageID=reward.labelMessageID, displayNameID=displayNameID) 108 entryInfoForGrid.append({'entryClass': entryClass, 109 'rewardInfo': rewardInfo, 110 'panelController': self.panelController}) 111 112 self.rewardGrid.LoadEntries(entryInfoForGrid) 113 self.SetDayAsCurrent(posInTrack) 114 self.GoToDay(posInTrack, animationTime=0) 115 116 def SetDayAsCurrent(self, entryNum, withTransition = False): 117 entry = self.rewardGrid.GetEntry(entryNum) 118 if entry: 119 rewardInfo = entry.rewardInfo 120 next_reward_time = self.panelController.GetTimestampWhenRewardCanBeClaimed() 121 elif entryNum >= self.rewardGrid.GetNumEntries(): 122 rewardInfo = None 123 next_reward_time = None 124 else: 125 return 126 pConst = self.panelController.GetPanelConstants() 127 itemReward = self.panelController.GetClaimedRewardForDay(entryNum) 128 if itemReward and rewardInfo: 129 if itemReward.typeID != rewardInfo.typeID or itemReward.quantity != rewardInfo.qty: 130 displayNameID = CratesStaticData().get_crate_nameID(itemReward.typeID) 131 itemRewardCopy = itemReward.copy() 132 bpInfo = getattr(itemRewardCopy, 'bpInfo', {}) 133 itemRewardCopy.blueprintMaterialLevel = bpInfo.get('blueprintMaterialLevel', 0) 134 itemRewardCopy.blueprintProductivityLevel = bpInfo.get('blueprintProductivityLevel', 0) 135 itemRewardCopy.quantity = bpInfo.get('qtyOrRuns', itemRewardCopy.quantity) 136 rewardInfo = RewardInfo(rewardInfo.day, itemRewardCopy, CLAIM_STATE_CLAIMED, displayNameID=displayNameID, iconSize=pConst.ICON_SIZE_NEW_ITEM, tier=rewardInfo.tier) 137 elif rewardInfo.claimState != CLAIM_STATE_CLAIMED: 138 rewardInfo = copy.copy(rewardInfo) 139 rewardInfo.claimState = CLAIM_STATE_CLAIMED 140 self.claimAndBucketCont.LoadRewardInfo(rewardInfo, next_reward_time, withTransition) 141 self.sideCont.LoadRewardInfo(rewardInfo, next_reward_time, withTransition) 142 selectedInGrid = entryNum 143 if self.panelController.ShouldAddOffsetToSelectedDay(): 144 selectedInGrid += 1 145 claimedDays = self.panelController.GetDaysToMarksAsClaimed(selectedInGrid) 146 self.rewardGrid.UpdateEntryState(selectedInGrid, KeyVal(claimedDays=claimedDays)) 147 self.rewardGrid.SetEntryAsSelected(selectedInGrid, withTransition) 148 self.todaysItemTop.UpdateTextAndHelpIcon(self.panelController.GetTimestampWhenRewardCanBeClaimed()) 149 self.UpdateCampaignProgressLabel() 150 151 def UpdateCampaignProgressLabel(self): 152 pConst = self.panelController.GetPanelConstants() 153 if not pConst.SHOW_REWARD_COUNTER: 154 return 155 rewards_by_day = self.panelController.GetRewardsByDay() 156 numRewardsClaimed = self.panelController.GetNumDaysClaimed() 157 hexColor = Color.RGBtoHex(*rewardUiConst.BLUE_TEXT_COLOR) 158 startTags = '<color=%s><b>' % hexColor 159 endTags = '</b></color>' 160 self.campaignProgressLabel.text = GetByLabel('UI/LoginRewards/CampaignProgress', numRewardsCollected=numRewardsClaimed, numRewardsTotal=len(rewards_by_day), startTags=startTags, endTags=endTags)