rewardItem.py (8983B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\shared\loginRewards\rewardItem.py 2 import trinity 3 from carbon.common.script.util.format import FmtAmt 4 from carbonui import uiconst, fontconst 5 from carbonui.primitives.container import Container 6 from carbonui.primitives.containerAutoSize import ContainerAutoSize 7 from carbonui.primitives.frame import Frame 8 from carbonui.primitives.sprite import Sprite 9 from carbonui.uianimations import animations 10 from clonegrade import COLOR_OMEGA_GOLD 11 from eve.client.script.ui.control.eveIcon import Icon 12 from eve.client.script.ui.control.eveLabel import Label 13 from eve.client.script.ui.shared.loginRewards.itemTierCont import ItemTierCont 14 from eve.client.script.ui.shared.loginRewards.rewardUiConst import GREEN_CHECKMARK 15 from localization import GetByLabel 16 from loginrewards.common.const import CLAIM_STATE_CLAIMED, TIER1 17 from loginrewards.common.rewardUtils import GetTierColor, ShouldShowQty 18 COLOR_ITEM_CLAIMED_BG = (0.5, 0.5, 0.5, 0.15) 19 COLOR_ITEM_NOT_CLAIMED_BG = (1.0, 1.0, 1.0, 0.1) 20 COLOR_ITEM_TODAY_BG = (1.0, 1.0, 1.0, 0.05) 21 OVERLAY_ICON_SIZE = 96 22 23 class RewardItem(Container): 24 default_name = 'rewardItem' 25 26 def ApplyAttributes(self, attributes): 27 self.panelController = attributes.panelController 28 pConst = self.panelController.GetPanelConstants() 29 self.default_width = pConst.DAY_WIDTH 30 self.default_height = pConst.DAY_HEIGHT 31 self.selectedFill = None 32 Container.ApplyAttributes(self, attributes) 33 self.rewardInfo = attributes.rewardInfo 34 self.tierLineCont = ItemTierCont(parent=self, top=pConst.DAY_HEIGHT / 4) 35 self.bgFrame = Frame(name='smallRewardBracket_bg', bgParent=self, texturePath='res:/UI/Texture/classes/LoginCampaign/smallRewardBracket_bg.png', cornerSize=16) 36 self.selectedFrame = Frame(bgParent=self, name='rewardFrame', texturePath='res:/UI/Texture/classes/LoginCampaign/smallRewardBracket_stroke.png', cornerSize=16) 37 self.selectedFrame.fullOpacity = self.selectedFrame.opacity 38 self.selectedFrame.opacity = 0.0 39 self.bgFrame.display = False 40 self.claimedIcon = Sprite(name='claimedIcon', parent=self, align=uiconst.CENTER, pos=(0, 0, 64, 64), texturePath='res:/ui/Texture/classes/LoginCampaign/claimedCheckNew.png', hint=GetByLabel('UI/LoginRewards/HasBeenClaimed'), color=GREEN_CHECKMARK) 41 self.iconCont = Container(name='iconCont', parent=self, align=uiconst.CENTER, pos=(0, 42 0, 43 pConst.ICON_SIZE, 44 pConst.ICON_SIZE), state=uiconst.UI_DISABLED) 45 self.overlaySprite = Sprite(name='overlaySprite', parent=self.iconCont, align=uiconst.CENTER, pos=(0, 46 0, 47 OVERLAY_ICON_SIZE, 48 OVERLAY_ICON_SIZE)) 49 self.qtypar = ContainerAutoSize(parent=self.iconCont, name='qtypar', align=uiconst.BOTTOMRIGHT, bgColor=(0, 0, 0, 0.9)) 50 self.quantityLabel = Label(parent=self.qtypar, maxLines=1, bold=True, fontsize=fontconst.EVE_SMALL_FONTSIZE, opacity=1.0, padding=(4, 1, 4, 0)) 51 self.itemIcon = Icon(parent=self.iconCont, align=uiconst.CENTER, pos=(0, 52 0, 53 pConst.ICON_SIZE, 54 pConst.ICON_SIZE)) 55 self.LoadRewardInfo(self.rewardInfo) 56 57 def ConstructSelectedFill(self): 58 if self.selectedFill is None: 59 self.selectedFill = Frame(name='selectedFill', bgParent=self, texturePath='res:/UI/Texture/classes/LoginCampaign/smallRewardBracket_bg.png', cornerSize=16, color=COLOR_ITEM_TODAY_BG) 60 self.selectedFill.fullOpacity = self.selectedFill.opacity 61 62 def LoadRewardInfo(self, rewardInfo): 63 if not rewardInfo: 64 return 65 self.bgFrame.display = True 66 qty = rewardInfo.qty 67 tier = rewardInfo.tier 68 typeID = rewardInfo.typeID 69 texturePath = rewardInfo.texturePath 70 overlayTexturePath = rewardInfo.overlayTexturePath 71 if tier: 72 color = GetTierColor(tier) 73 if tier == TIER1: 74 self.tierLineCont.display = False 75 else: 76 self.tierLineCont.display = True 77 self.tierLineCont.SetColor(color) 78 self.selectedFrame.color = color 79 else: 80 self.tierLineCont.display = False 81 self.ModifyLayout(rewardInfo) 82 if texturePath: 83 self.itemIcon.LoadIcon(texturePath) 84 else: 85 self.itemIcon.LoadIconByTypeID(typeID=typeID, isCopy=True) 86 if overlayTexturePath: 87 self.overlaySprite.LoadTexture(overlayTexturePath) 88 self.overlaySprite.display = True 89 else: 90 self.overlaySprite.display = False 91 self.qtypar.display = False 92 if ShouldShowQty(rewardInfo): 93 self.qtypar.display = True 94 self.quantityLabel.text = FmtAmt(qty) 95 96 def ModifyLayout(self, rewardInfo): 97 isClaimed = rewardInfo.claimState == CLAIM_STATE_CLAIMED 98 self.ModifyClaimedState(isClaimed) 99 100 def ModifyClaimedState(self, isClaimed): 101 pConst = self.panelController.GetPanelConstants() 102 showAsClaimed = isClaimed and pConst.SHOW_CLAIMED 103 if showAsClaimed: 104 self.claimedIcon.display = True 105 self.bgFrame.SetRGBA(*COLOR_ITEM_CLAIMED_BG) 106 else: 107 self.claimedIcon.display = False 108 self.bgFrame.SetRGBA(*COLOR_ITEM_NOT_CLAIMED_BG) 109 self.ModifyFadedState(showAsClaimed) 110 111 def ModifyFadedState(self, isFaded): 112 if isFaded: 113 self.tierLineCont.SetTierLineOpacity(0.2) 114 self.iconCont.opacity = 0.5 if self.itemIcon.spriteEffect == trinity.TR2_SFX_SOFTLIGHT else 0.25 115 else: 116 self.tierLineCont.SetTierLineOpacity(1.0) 117 self.iconCont.opacity = 1.0 118 119 def SetSelectedState(self, isOn, animateTime = 0): 120 self.ConstructSelectedFill() 121 if self.selectedFill: 122 endValue = self.selectedFill.fullOpacity if isOn else 0.0 123 if animateTime: 124 animations.FadeIn(self.selectedFill, endVal=endValue, duration=animateTime) 125 animations.FadeIn(self.selectedFrame, endVal=endValue, duration=animateTime) 126 else: 127 self.selectedFill.opacity = endValue 128 self.selectedFrame.opacity = endValue 129 if self.selectedFrame: 130 self.tierLineCont.display = self.rewardInfo.tier != TIER1 or isOn 131 endValue = self.selectedFrame.fullOpacity if isOn else 0.0 132 if animateTime: 133 animations.FadeIn(self.selectedFrame, endVal=endValue, duration=animateTime) 134 else: 135 self.selectedFrame.opacity = endValue 136 137 def UpdateEntryState(self, entryIdx, selectedIdx, updateKeyVal): 138 claimedDays = updateKeyVal.claimedDays 139 isClaimed = entryIdx in claimedDays 140 self.ModifyClaimedState(isClaimed) 141 142 143 class TwoTrackRewardItem(RewardItem): 144 145 def ModifyLayout(self, rewardInfo): 146 return RewardItem.ModifyLayout(self, rewardInfo) 147 148 def UpdateEntryState(self, entryIdx, selectedIdx, updateKeyVal): 149 RewardItem.UpdateEntryState(self, entryIdx, selectedIdx, updateKeyVal) 150 claimedDays = updateKeyVal.claimedDays 151 isClaimed = entryIdx in claimedDays 152 if isClaimed: 153 return 154 availableRewardsDays = updateKeyVal.availableRewardsDays 155 itemCanStillBeClaimed = entryIdx in availableRewardsDays 156 if not itemCanStillBeClaimed and entryIdx > selectedIdx: 157 SetSaturation(self.iconCont, self.itemIcon, 0.0) 158 if self.IsOmegaRestricted(): 159 self.ModifyFadedState(True) 160 161 def IsOmegaRestricted(self): 162 return False 163 164 165 class OmegaRewardItem(TwoTrackRewardItem): 166 167 def ModifyLayout(self, rewardInfo): 168 isClaimed = rewardInfo.claimState == CLAIM_STATE_CLAIMED 169 self.SetOmegaState(isClaimed) 170 return TwoTrackRewardItem.ModifyLayout(self, rewardInfo) 171 172 def LoadRewardInfo(self, rewardInfo): 173 if not rewardInfo: 174 return 175 TwoTrackRewardItem.LoadRewardInfo(self, rewardInfo) 176 isClaimed = rewardInfo.claimState == CLAIM_STATE_CLAIMED 177 self.SetOmegaState(isClaimed) 178 179 def SetOmegaState(self, isClaimed): 180 if isClaimed: 181 return 182 if self.panelController.IsOmega(): 183 newFrameColor = COLOR_OMEGA_GOLD[:3] + (0.45,) 184 self.bgFrame.SetRGBA(*newFrameColor) 185 else: 186 self.bgFrame.SetRGBA(*COLOR_ITEM_NOT_CLAIMED_BG) 187 188 def IsOmegaRestricted(self): 189 return not self.panelController.IsOmega() 190 191 def ModifyClaimedState(self, isClaimed): 192 TwoTrackRewardItem.ModifyClaimedState(self, isClaimed) 193 self.SetOmegaState(isClaimed) 194 195 196 def SetSaturation(cont, sprite, saturation = 1.0): 197 if saturation < 1.0: 198 sprite.spriteEffect = trinity.TR2_SFX_SOFTLIGHT 199 cont.opacity = 0.5 200 else: 201 sprite.spriteEffect = trinity.TR2_SFX_COPY 202 sprite.saturation = saturation