landing_page.py (7296B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\omega\upsell\pages\landing_page.py 2 import carbonui 3 import carbonui.text.styles 4 import uthread2 5 from carbonui import Align, ButtonStyle, PickState, TextColor, uiconst 6 from carbonui.control.button import Button 7 from carbonui.control.scrollContainer import ScrollContainer 8 from carbonui.primitives.container import Container 9 from carbonui.primitives.containerAutoSize import ContainerAutoSize 10 from carbonui.primitives.sprite import Sprite 11 from carbonui.uianimations import animations 12 from eve.client.script.ui import eveColor 13 from eve.client.script.ui.omega.upsell import omegaUpsellSignals, omegaUpsellConst 14 from eve.client.script.ui.omega.upsell.components.default_offer_card import DefaultOfferCard 15 from eve.client.script.ui.omega.upsell.link import create_benefit_link 16 from eve.client.script.ui.omega.upsell.omegaUpsellConst import OmegaUpsellPage 17 from localization import GetByLabel, GetByMessageID 18 from omega.client.benefits.const import OmegaBenefitType 19 from omega.client.clone_grade_svc import get_clone_grade_svc 20 from signals import Signal 21 ANIM_DURATION = 1.2 22 BENEFITS = (OmegaBenefitType.ELITE_ADVANTAGE, 23 OmegaBenefitType.SKILLS_FASTER_TRAINING, 24 OmegaBenefitType.SKILLS_FULL_ACCESS, 25 OmegaBenefitType.MULTIBOXING_ALLOWED, 26 OmegaBenefitType.SHIPS_FULL_ACCESS) 27 28 class BenefitCarouselEntry(Container): 29 default_height = 40 30 default_state = uiconst.UI_NORMAL 31 32 def __init__(self, omega_benefit, **kw): 33 super(BenefitCarouselEntry, self).__init__(**kw) 34 self.omega_benefit = omega_benefit 35 self._selected = False 36 self.on_click = Signal('on_click') 37 self.icon = Sprite(name='icon', parent=self, align=Align.CENTERLEFT, pickState=PickState.OFF, pos=(0, 0, 40, 40)) 38 self.label = carbonui.text.styles.TextHeader(name='label', parent=self, align=Align.CENTERLEFT, color=TextColor.HIGHLIGHT, bold=True, left=48) 39 self.update() 40 41 def update(self): 42 self.label.text = GetByMessageID(self.omega_benefit.button_message_id) 43 self.icon.texturePath = self.omega_benefit.icon_path 44 45 def OnClick(self, *args): 46 self.on_click(self) 47 48 def OnMouseEnter(self, *args): 49 pass 50 51 def OnMouseExit(self, *args): 52 pass 53 54 @property 55 def selected(self): 56 return self._selected 57 58 def select(self, duration = ANIM_DURATION): 59 if self.selected: 60 return 61 self._selected = True 62 animations.SpColorMorphTo(self.label, self.label.rgb, eveColor.OMEGA_YELLOW, duration=duration) 63 64 def deselect(self, duration = ANIM_DURATION): 65 if not self.selected: 66 return 67 self._selected = False 68 animations.SpColorMorphTo(self.label, self.label.rgb, TextColor.HIGHLIGHT, duration=duration) 69 70 71 class BenefitCarousel(ScrollContainer): 72 73 def __init__(self, **kw): 74 super(BenefitCarousel, self).__init__(**kw) 75 self.entries = [] 76 self.selected_entry = None 77 self._select_entry_thread = None 78 self.construct_layout() 79 80 def start(self): 81 self.select_entry(self.entries[0]) 82 83 def construct_layout(self): 84 for omega_benefit_type in BENEFITS: 85 benefit = get_clone_grade_svc().get_omega_benefit(omega_benefit_type) 86 entry = BenefitCarouselEntry(parent=self, omega_benefit=benefit, align=Align.TOTOP, padBottom=8) 87 entry.on_click.connect(self.on_entry_clicked) 88 self.entries.append(entry) 89 90 button_cont = ContainerAutoSize(name='button_cont', parent=self, align=Align.TOTOP, padTop=16) 91 Button(parent=button_cont, func=self.on_all_benefits_button, label=GetByLabel('UI/OmegaUpsell/SeeAllBenefits'), style=ButtonStyle.MONETIZATION) 92 self.label_cont = ContainerAutoSize(name='label_cont', parent=self, align=Align.TOTOP, padTop=16, opacity=0.0) 93 self.description_label = carbonui.text.styles.TextHeader(parent=self.label_cont, align=Align.TOTOP, color=TextColor.NORMAL) 94 self.read_more_label = carbonui.text.styles.TextHeader(parent=self.label_cont, align=Align.TOTOP, padTop=16, pickState=PickState.ON) 95 96 def on_entry_clicked(self, entry): 97 self.select_entry(entry, duration=0.15) 98 99 def Close(self): 100 try: 101 if self._select_entry_thread: 102 self._select_entry_thread.kill() 103 self._select_entry_thread = None 104 finally: 105 super(BenefitCarousel, self).Close() 106 107 def select_entry(self, entry, duration = ANIM_DURATION): 108 if self._select_entry_thread: 109 self._select_entry_thread.kill() 110 self._select_entry_thread = None 111 self._select_entry_thread = uthread2.start_tasklet(self._select_entry, entry, duration) 112 113 def _select_entry(self, entry, duration = ANIM_DURATION): 114 if self.selected_entry: 115 self._deselect_current_entry(duration=duration) 116 uthread2.Sleep(duration + 0.1) 117 self._apply_entry_selection(entry, duration=duration) 118 uthread2.Sleep(5 * ANIM_DURATION) 119 self._select_next_entry() 120 121 def _apply_entry_selection(self, entry, duration = ANIM_DURATION): 122 if self.destroyed: 123 return 124 self.selected_entry = entry 125 entry.select(duration=duration) 126 self.update_description(entry, duration=duration) 127 omegaUpsellSignals.set_hero_image(self.selected_entry.omega_benefit.hero_image_icon_path, duration) 128 129 def _select_next_entry(self): 130 if self.destroyed: 131 return 132 next_index = (self.entries.index(self.selected_entry) + 1) % len(self.entries) 133 next_entry = self.entries[next_index] 134 self._select_entry(next_entry) 135 136 def _deselect_current_entry(self, duration = ANIM_DURATION): 137 if not self.selected_entry: 138 return 139 self.selected_entry.deselect(duration=duration) 140 animations.FadeOut(self.label_cont, duration=duration) 141 omegaUpsellSignals.set_hero_image(None, duration) 142 143 def update_description(self, entry, duration = ANIM_DURATION): 144 self.description_label.text = GetByMessageID(entry.omega_benefit.description_message_id) 145 if entry: 146 self.read_more_label.text = create_benefit_link(str(entry.omega_benefit.omega_benefit_type)) 147 else: 148 self.read_more_label.text = '' 149 animations.FadeIn(self.label_cont, duration=duration) 150 151 def on_all_benefits_button(self, *args): 152 omegaUpsellSignals.load_page(OmegaUpsellPage.ALL_BENEFITS) 153 154 155 class LandingPage(Container): 156 157 def __init__(self, **kw): 158 super(LandingPage, self).__init__(**kw) 159 self.construct_layout() 160 uthread2.start_tasklet(self.benefit_carousel.start) 161 162 def construct_layout(self): 163 self.content = Container(name='content', parent=self, align=Align.HORIZONTALLY_CENTERED, width=0.8, minWidth=omegaUpsellConst.MIN_WIDTH) 164 bottom_cont = Container(name='bottom_cont', parent=self.content, align=Align.TOBOTTOM, padBottom=8, height=140) 165 DefaultOfferCard(name='offer_card', parent=bottom_cont, align=Align.HORIZONTALLY_CENTERED, width=0.8) 166 self.benefit_carousel = BenefitCarousel(parent=self.content, align=Align.TORIGHT_PROP, width=0.33, minWidth=400, padBottom=16)