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

content_card.py (8942B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\jobboard\client\features\campaigns\content_card.py
      2 import eveui
      3 import trinity
      4 import uthread2
      5 from carbonui import uiconst, PickState, Align, TextColor
      6 from carbonui.primitives.container import Container
      7 from carbonui.primitives.fill import Fill
      8 from carbonui.primitives.line import Line
      9 from carbonui.primitives.sprite import Sprite
     10 from carbonui.text.styles import TextDetail, TextBody, TextHeader
     11 from eve.client.script.ui import eveColor, eveThemeColor
     12 from eveui import skip_if_destroyed
     13 from jobboard.client import get_job_board_service
     14 from jobboard.client.features.campaigns.qa_tools import get_qa_menu_for_campaign_card
     15 from jobboard.client.ui.card import GLOW_HOVER, GLOW_IDLE
     16 from jobboard.client.ui.const import HERO_CARD_MAX_WIDTH
     17 from metadata import ContentTags
     18 
     19 class BaseContentCard(Container):
     20     default_height = 176
     21     default_state = uiconst.UI_NORMAL
     22     default_name = 'BaseContentCard'
     23     OPACITY_IDLE = 0.1
     24     OPACITY_HOVER = 0.2
     25     OPACITY_MOUSEDOWN = 0.4
     26 
     27     def __init__(self, controller, *args, **kwargs):
     28         super(Container, self).__init__(*args, **kwargs)
     29         self.controller = controller
     30         self._layout()
     31         self.pickState = PickState.ON
     32         uthread2.start_tasklet(self._update_state)
     33 
     34     def _layout(self):
     35         self._left_line = Line(name='leftLine', parent=self, align=Align.TOLEFT, color=self._left_line_color, outputMode=uiconst.OUTPUT_COLOR_AND_GLOW, opacity=0.6, glowBrightness=0.5)
     36         self._construct_layout()
     37         self._construct_top()
     38         self._construct_middle()
     39         self._construct_underlay()
     40 
     41     def _construct_layout(self):
     42         self.content = Container(name='content', parent=self)
     43         self.underlay_cont = Container(name='underlay', parent=self)
     44         self.background_cont = Container(name='background', parent=self)
     45         self.top_cont = Container(name='topCont', parent=self.content, align=Align.TOTOP, height=32, padding=(16, 16, 16, 0))
     46         self.middle = Container(name='middle', parent=self.content, align=Align.TOALL, padding=16)
     47 
     48     def _construct_top(self):
     49         pass
     50 
     51     def _construct_bottom(self):
     52         pass
     53 
     54     def _construct_underlay(self):
     55         Fill(parent=self.underlay_cont, color=self.controller.bc_color, opacity=0.1)
     56         self._hover_frame = eveui.Frame(name='hover_frame', parent=self, texturePath='res:/UI/Texture/classes/Opportunities/card_mask.png', cornerSize=16, color=self.controller.hover_frame_color, opacity=self.OPACITY_IDLE)
     57 
     58     @property
     59     def _left_line_color(self):
     60         return self.controller.line_color
     61 
     62     def _construct_middle(self):
     63         Sprite(parent=self, pos=(0, 0, 32, 32), texturePath=self.controller.icon_path, align=Align.CENTERRIGHT)
     64         TextDetail(parent=self.middle, align=Align.TOTOP, text=self.controller.title_prefix_text)
     65         TextBody(parent=self.middle, align=Align.TOTOP, text=self.controller.title_text)
     66 
     67     def OnClick(self, *args):
     68         self.controller.on_click()
     69 
     70     def _update_state(self):
     71         pass
     72 
     73     @skip_if_destroyed
     74     def OnMouseEnter(self, *args):
     75         eveui.Sound.entry_hover.play()
     76         eveui.fade_in(self._hover_frame, end_value=self.OPACITY_HOVER, duration=0.2)
     77         eveui.animate(self._left_line, 'glowBrightness', GLOW_HOVER, duration=0.2)
     78 
     79     @skip_if_destroyed
     80     def OnMouseExit(self, *args):
     81         eveui.fade(self._hover_frame, end_value=self.OPACITY_IDLE, duration=0.2)
     82         eveui.animate(self._left_line, 'glowBrightness', GLOW_IDLE, duration=0.2)
     83 
     84 
     85 class CampaignCard(BaseContentCard):
     86     default_name = 'CampaignCard'
     87     OPACITY_IDLE = 0.25
     88     OPACITY_HOVER = 0.05
     89     OPACITY_MOUSEDOWN = 0.3
     90 
     91     def _construct_underlay(self):
     92         Fill(parent=self.underlay_cont, color=self.controller.bc_color, opacity=0.1)
     93         eveui.Frame(name='card_mask_frame', bgParent=self, texturePath='res:/UI/Texture/classes/Opportunities/card_mask.png', cornerSize=16, color=(0, 0, 0, 0.9))
     94         self._hover_frame = eveui.Frame(name='hover_frame', parent=self, texturePath='res:/UI/Texture/classes/Opportunities/card_mask.png', cornerSize=16, color=eveColor.BLACK, opacity=self.OPACITY_IDLE)
     95         bg_texture_path = self.controller.background_texture_path
     96         if not bg_texture_path:
     97             return
     98         gradient_container = Container(name='gradient_container', parent=self, align=Align.TOALL, pickState=PickState.OFF, clipChildren=True)
     99         bg_container = Container(name='bg_container', parent=self, align=Align.TOALL, pickState=PickState.OFF, clipChildren=True)
    100         title_width, _ = TextHeader.MeasureTextSize(self.controller.title_text, bold=True, maxLines=2)
    101         eveui.GradientSprite(parent=gradient_container, align=Align.TOLEFT_PROP, width=0.6, minWidth=title_width + 48, rgbData=[(0, (0, 0, 0))], alphaData=[(0, 0.9), (1.0, 0)])
    102         eveui.Sprite(name='bg_image', parent=bg_container, texturePath=bg_texture_path, textureSecondaryPath='res:/UI/Texture/classes/Opportunities/hero_card_mask.png', align=Align.CENTERRIGHT, width=HERO_CARD_MAX_WIDTH, height=self.height, spriteEffect=trinity.TR2_SFX_MODULATE)
    103 
    104     def _construct_middle(self):
    105         logo_container = Container(parent=self.middle, name='logo_container', align=Align.TORIGHT, width=64, padRight=8)
    106         self.faction_logo = Sprite(name='faction_icon', parent=logo_container, align=Align.CENTERBOTTOM, width=48, height=48, color=TextColor.SECONDARY, texturePath=self.controller.icon_path, outputMode=uiconst.OUTPUT_COLOR_AND_GLOW, glowBrightness=0, pickState=PickState.OFF)
    107         TextHeader(parent=self.middle, align=Align.TOBOTTOM, text=self.controller.title_text, bold=True)
    108         TextDetail(parent=self.middle, align=Align.TOBOTTOM, text=self.controller.title_prefix_text)
    109 
    110     def OnMouseEnter(self, *args):
    111         super(CampaignCard, self).OnMouseEnter(*args)
    112         if hasattr(self, 'faction_logo') and self.faction_logo and not self.faction_logo.destroyed:
    113             eveui.animate(self.faction_logo, 'color', TextColor.NORMAL, duration=0.2)
    114             eveui.animate(self.faction_logo, 'glowBrightness', 0.5, duration=0.2)
    115 
    116     def OnMouseExit(self, *args):
    117         super(CampaignCard, self).OnMouseExit(*args)
    118         if hasattr(self, 'faction_logo') and self.faction_logo and not self.faction_logo.destroyed:
    119             eveui.animate(self.faction_logo, 'color', TextColor.SECONDARY, duration=0.2)
    120             eveui.animate(self.faction_logo, 'glowBrightness', 0, duration=0.2)
    121 
    122     def GetMenu(self, *args):
    123         definition_name = self.controller.campaign_controller.definition_name
    124         m = get_qa_menu_for_campaign_card(self.controller.content_id, definition_name)
    125         return m
    126 
    127 
    128 class BaseContentController(object):
    129 
    130     def __init__(self, *args):
    131         pass
    132 
    133     @property
    134     def content_id(self):
    135         return None
    136 
    137     @property
    138     def campaign_controller(self):
    139         return None
    140 
    141     @property
    142     def icon_path(self):
    143         return None
    144 
    145     @property
    146     def title_text(self):
    147         return ''
    148 
    149     @property
    150     def title_prefix_text(self):
    151         return ''
    152 
    153     @property
    154     def line_color(self):
    155         return eveThemeColor.THEME_ACCENT
    156 
    157     @property
    158     def bc_color(self):
    159         return eveThemeColor.THEME_TINT
    160 
    161     @property
    162     def hover_frame_color(self):
    163         return eveThemeColor.THEME_TINT
    164 
    165     def on_click(self, *args):
    166         pass
    167 
    168     @property
    169     def background_texture_path(self):
    170         return None
    171 
    172 
    173 class CampaignCardController(BaseContentController):
    174 
    175     def __init__(self, campaign_controller):
    176         self._campaign_controller = campaign_controller
    177 
    178     @property
    179     def content_id(self):
    180         return self._campaign_controller.campaign_id
    181 
    182     @property
    183     def campaign_controller(self):
    184         return self._campaign_controller
    185 
    186     @property
    187     def icon_path(self):
    188         return self._campaign_controller.textures.icon_path
    189 
    190     @property
    191     def title_text(self):
    192         return self._campaign_controller.title_text
    193 
    194     @property
    195     def title_prefix_text(self):
    196         return self._campaign_controller.issuer_name
    197 
    198     @property
    199     def is_finished(self):
    200         return self._campaign_controller.is_finished
    201 
    202     @property
    203     def is_expired(self):
    204         return self._campaign_controller.is_expired
    205 
    206     @property
    207     def line_color(self):
    208         return self._campaign_controller.theme_pack.accent
    209 
    210     @property
    211     def bc_color(self):
    212         return self._campaign_controller.theme_pack.main_color
    213 
    214     @property
    215     def hover_frame_color(self):
    216         return self._campaign_controller.theme_pack.main_color
    217 
    218     @property
    219     def background_texture_path(self):
    220         return self._campaign_controller.textures.ao_page_button_texture_path
    221 
    222     def on_click(self, *args):
    223         get_job_board_service().open_subfeature_page(content_tag_id=ContentTags.feature_campaigns, subfeature_id=self.content_id)