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

rewards_page.py (5124B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\achievement_system\client\ui\window\page\rewards\rewards_page.py
      2 import logging
      3 import threadutils
      4 from achievement_system.client.api.error import GenericInternalServerError, ServiceUnavailableError, DefinitionNotFoundError
      5 from achievement_system.client.api.repository import get_repository
      6 from achievement_system.client.api.signal import on_achievement_milestone_reward_claimed
      7 from achievement_system.client.ui.controller.reward import AchievementRewardController, CategoryRewardController
      8 from achievement_system.client.ui.window.const import WindowState, TRANSITION_DURATION
      9 from achievement_system.client.ui.window.page.rewards.entry import AchievementRewardEntry
     10 from achievement_system.client.ui.window.page.rewards.info_container import InfoContainer
     11 from achievement_system.client.ui.window.signal import on_window_state_changed
     12 from carbonui import Align, uiconst, TextAlign
     13 from carbonui.control.scrollContainer import ScrollContainer
     14 from carbonui.primitives.container import Container
     15 from carbonui.text.styles import TextHeader
     16 from carbonui.uianimations import animations
     17 from localization import GetByLabel
     18 logger = logging.getLogger('ACHIEVEMENTS')
     19 
     20 class RewardsPage(Container):
     21 
     22     def __init__(self, *args, **kwargs):
     23         super(RewardsPage, self).__init__(*args, **kwargs)
     24         self.opacity = 0.0
     25         self.construct_layout()
     26         self.connect_signals()
     27 
     28     def Close(self):
     29         try:
     30             self.disconnect_signals()
     31         finally:
     32             super(RewardsPage, self).Close()
     33 
     34     def connect_signals(self):
     35         on_window_state_changed.connect(self.on_window_state_changed)
     36         on_achievement_milestone_reward_claimed.connect(self.on_achievement_milestone_reward_claimed_signal)
     37 
     38     def disconnect_signals(self):
     39         on_window_state_changed.disconnect(self.on_window_state_changed)
     40         on_achievement_milestone_reward_claimed.connect(self.on_achievement_milestone_reward_claimed_signal)
     41 
     42     def construct_layout(self):
     43         content_container = Container(name='content_container', parent=self, padding=(8, 0, 8, 0))
     44         self.info_container = InfoContainer(name='info_container', parent=content_container, align=Align.TOTOP, text=GetByLabel('UI/Achievements/Window/Rewards/ClaimedTitlesInfo'), height=32)
     45         self.scroll_container = ScrollContainer(name='scroll_container', parent=content_container, padTop=16)
     46 
     47     @threadutils.highlander_threaded
     48     def update(self):
     49         self.scroll_container.Flush()
     50         achievement_rewards, category_rewards = self.unclaimed_rewards
     51         if len(achievement_rewards) == 0 and len(category_rewards) == 0:
     52             TextHeader(name='no_rewards_label', parent=self.scroll_container, align=Align.TOTOP, textAlign=TextAlign.CENTER, text=GetByLabel('UI/Achievements/Window/Rewards/NoRewardsAvailable'), padTop=32)
     53             return
     54         self.add_rewards(achievement_rewards, AchievementRewardController)
     55         self.add_rewards(category_rewards, CategoryRewardController)
     56 
     57     def add_rewards(self, rewards, controller_class):
     58         if len(rewards) == 0:
     59             return
     60         for identifier, unclaimed_rewards in rewards.items():
     61             for milestone_id, unclaimed_reward_ids in unclaimed_rewards.unclaimed_rewards_per_milestone.items():
     62                 try:
     63                     controller = controller_class(identifier=identifier, milestone_id=milestone_id, rewards=unclaimed_reward_ids)
     64                     AchievementRewardEntry(parent=self.scroll_container, align=Align.TOTOP, controller=controller, on_claim=self.on_claim)
     65                 except DefinitionNotFoundError:
     66                     continue
     67 
     68     @property
     69     def unclaimed_rewards(self):
     70         try:
     71             return get_repository().get_all_unclaimed_rewards()
     72         except ServiceUnavailableError or GenericInternalServerError:
     73             return {}
     74 
     75     def on_window_state_changed(self, window_state):
     76         if window_state == WindowState.REWARDS:
     77             self.update()
     78             self.state = uiconst.UI_PICKCHILDREN
     79             animations.FadeIn(self, duration=TRANSITION_DURATION)
     80         else:
     81             self.state = uiconst.UI_DISABLED
     82             animations.FadeOut(self, duration=TRANSITION_DURATION)
     83 
     84     def on_claim(self, entry):
     85         if isinstance(entry.controller, AchievementRewardController):
     86             logger.info('claiming AchievementRewardController')
     87             get_repository().claim_rewards_for_achievement(achievement_id=entry.controller.identifier, milestone_id=entry.controller.milestone_id)
     88         elif isinstance(entry.controller, CategoryRewardController):
     89             logger.info('claiming CategoryRewardController')
     90             get_repository().claim_rewards_for_category(category_id=entry.controller.identifier, milestone_id=entry.controller.milestone_id)
     91 
     92     def on_achievement_milestone_reward_claimed_signal(self, achievement_id, milestone_id):
     93         logger.info('on_achievement_milestone_reward_claimed_signal, %s|%s' % (achievement_id, milestone_id))
     94         self.update()