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

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)