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

npcinteractionview.py (10313B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\agentinteraction\npcinteractionview.py
      2 from carbonui.control.buttonIcon import ButtonIcon
      3 from carbonui.uianimations import animations
      4 import agentinteraction.constUI as paddingConst
      5 from agentinteraction.rewardsview import RewardsView
      6 from agentinteraction.textutils import fix_text
      7 from agentinteraction.warningpanel import CollateralPanel, DisclaimerPanel, GrantedItemsPanel, ShipRequirementsPanel
      8 from carbonui import uiconst
      9 from carbonui.control.scrollContainer import ScrollContainer
     10 from carbonui.primitives.container import Container
     11 from carbonui.primitives.containerAutoSize import ContainerAutoSize
     12 from carbonui.primitives.line import Line
     13 from carbonui.util.color import Color
     14 from eve.client.script.ui.control import eveLabel
     15 from carbonui.button.group import ButtonGroup, ButtonSizeMode
     16 from eve.client.script.ui.control.eveLabel import Label
     17 from eve.client.script.ui.control.eveLoadingWheel import LoadingWheel
     18 from localization import GetByMessageID
     19 from carbonui.primitives.collapsibleContainer import CollapsibleContainer
     20 LINE_HEIGHT = 1
     21 TOP_LINE_PADDING_BOTTOM = 8
     22 LORE_HEIGHT = 120
     23 SCROLLBAR_COLOR = Color.GRAY5
     24 LORE_SCROLLBAR_PADDING = 35
     25 BUTTON_PADDING_TOP = 30
     26 BUTTON_PADDING_BOTTOM = 2
     27 
     28 class NpcInteractionView(Container):
     29     default_name = 'NpcInteractionView'
     30 
     31     def __init__(self, npc_character, inner_padding = (0, 0, 0, 0), **kwargs):
     32         self._inner_padding = inner_padding
     33         self.npc_character = npc_character
     34         self.subcontainer_lore = None
     35         self.lore_autosize = None
     36         self.lore_text = ''
     37         self.scroll = None
     38         self.end_line = None
     39         super(NpcInteractionView, self).__init__(**kwargs)
     40         self._build_content()
     41 
     42     @property
     43     def inner_padding(self):
     44         return self._inner_padding
     45 
     46     @inner_padding.setter
     47     def inner_padding(self, value):
     48         if isinstance(value, (int, float)):
     49             value = (value,
     50              value,
     51              value,
     52              value)
     53         if self._inner_padding != value:
     54             self._inner_padding = value
     55             self._update_scroll_padding()
     56             self._update_buttons_padding()
     57 
     58     def _build_content(self):
     59         self._build_loading_wheel()
     60         self.content_cont = Container(name='content_cont', parent=self)
     61         self._build_buttons()
     62         self._build_end_line()
     63         self.scroll = ScrollContainer(name='scroll', parent=self.content_cont, align=uiconst.TOALL, scrollBarColor=SCROLLBAR_COLOR, scrollBarPadding=10, innerPadding=(0, 0, 0, 0), padding=self._get_scroll_padding())
     64         self.scroll.onSizeChangeSignal.connect(self.on_scroll_size_changed)
     65         self.inner_scroll_cont = ContainerAutoSize(name='inner_scroll_cont', parent=self.scroll, align=uiconst.TOTOP)
     66         self._build_title_cont()
     67         self._build_title()
     68         self._build_top_line()
     69         self._build_lore()
     70         self._build_objectives()
     71         self._build_ship_requirements_warning()
     72         self._build_disclaimer()
     73         self._build_granted_items()
     74         self._build_collateral()
     75         self._build_rewards()
     76 
     77     def _get_scroll_padding(self):
     78         pad_left, pad_top, pad_right, _ = self.inner_padding
     79         return (pad_left,
     80          pad_top,
     81          pad_right,
     82          0)
     83 
     84     def _update_scroll_padding(self):
     85         if self.scroll:
     86             self.scroll.padding = self._get_scroll_padding()
     87 
     88     def _build_loading_wheel(self):
     89         self.loading_wheel = LoadingWheel(name='loading_wheel', parent=self, align=uiconst.CENTER, state=uiconst.UI_DISABLED)
     90         self.loading_wheel.display = False
     91 
     92     def _build_buttons(self):
     93         self.buttonGroup = ButtonGroup(name='container_buttons', parent=self.content_cont, align=uiconst.TOBOTTOM, padding=self._get_buttons_padding(), button_size_mode=ButtonSizeMode.STRETCH)
     94 
     95     def _get_buttons_padding(self):
     96         pad_left, pad_top, pad_right, pad_bottom = self.inner_padding
     97         return (pad_left,
     98          pad_bottom,
     99          pad_right,
    100          pad_bottom)
    101 
    102     def _update_buttons_padding(self):
    103         if self.buttonGroup:
    104             self.buttonGroup.padding = self._get_buttons_padding()
    105 
    106     def _build_title_cont(self):
    107         self.container_title = ContainerAutoSize(name='container_title', parent=self.inner_scroll_cont, align=uiconst.TOTOP, padding=(0,
    108          0,
    109          0,
    110          paddingConst.PADDING_XSMALL), alignMode=uiconst.TOTOP)
    111 
    112     def _build_title(self):
    113         self.title = Label(name='label_title', parent=self.container_title, align=uiconst.TOTOP, fontsize=paddingConst.HEADER_SIZE_BIG, color=Color.WHITE)
    114 
    115     def _build_top_line(self):
    116         container_top_line = Container(name='container_top_line', parent=self.inner_scroll_cont, align=uiconst.TOTOP, height=LINE_HEIGHT, padding=(0,
    117          0,
    118          0,
    119          TOP_LINE_PADDING_BOTTOM))
    120         Line(name='top_line', parent=container_top_line, align=uiconst.TOALL, weight=LINE_HEIGHT)
    121 
    122     def _build_lore(self):
    123         self.container_lore = ContainerAutoSize(name='container_lore', parent=self.inner_scroll_cont, align=uiconst.TOTOP)
    124         self._build_lore_content()
    125 
    126     def _build_lore_content(self):
    127         if not self.lore_autosize or self.lore_autosize.destroyed:
    128             self.lore_autosize = CollapsibleContainer(name='lore_autosize', parent=self.container_lore, align=uiconst.TOTOP, clipChildren=True)
    129         self.lore_autosize.set_text(self.lore_text)
    130 
    131     def _build_objectives(self):
    132         self.container_objectives = Container(name='container_objectives', parent=self.inner_scroll_cont, align=uiconst.TOTOP, height=100)
    133 
    134     def _build_ship_requirements_warning(self):
    135         self.container_ship_requirements_warning = ShipRequirementsPanel(name='container_ship_requirements_warning', parent=self.inner_scroll_cont, align=uiconst.TOTOP)
    136         self.container_ship_requirements_warning.Hide()
    137 
    138     def _build_disclaimer(self):
    139         self.container_disclaimer = DisclaimerPanel(name='container_disclaimer', parent=self.inner_scroll_cont, align=uiconst.TOTOP)
    140         self.container_disclaimer.Hide()
    141 
    142     def _build_granted_items(self):
    143         self.container_granted_items = GrantedItemsPanel(name='container_granted_items', parent=self.inner_scroll_cont, align=uiconst.TOTOP)
    144         self.container_granted_items.Hide()
    145 
    146     def _build_collateral(self):
    147         self.container_collateral = CollateralPanel(name='container_collateral', parent=self.inner_scroll_cont, align=uiconst.TOTOP)
    148         self.container_collateral.Hide()
    149 
    150     def _build_rewards(self):
    151         self.container_rewards = RewardsView(name='container_rewards', parent=self.inner_scroll_cont, align=uiconst.TOTOP, padding=(0,
    152          paddingConst.PADDING_SMALL,
    153          0,
    154          0))
    155         self.container_rewards.Hide()
    156 
    157     def _build_end_line(self):
    158         self.end_line = Line(parent=self.content_cont, align=uiconst.TOBOTTOM_NOPUSH, top=-1)
    159 
    160     def update_granted_items(self, items):
    161         self.container_granted_items.update_items(items)
    162         if items:
    163             self.container_granted_items.Show()
    164         else:
    165             self.container_granted_items.Hide()
    166 
    167     def update_normal_rewards(self, items):
    168         self.container_rewards.update_normal_rewards(items)
    169         if items:
    170             self.container_rewards.Show()
    171         else:
    172             self.container_rewards.Hide()
    173 
    174     def update_bonus_rewards(self, items):
    175         self.container_rewards.update_bonus_rewards(items)
    176         if items:
    177             self.container_rewards.Show()
    178         else:
    179             self.container_rewards.Hide()
    180 
    181     def clear_rewards(self):
    182         self.container_rewards.clear_rewards()
    183         self.container_rewards.Hide()
    184 
    185     def update_collateral(self, items):
    186         self.container_collateral.update_items(items)
    187         if items:
    188             self.container_collateral.Show()
    189         else:
    190             self.container_collateral.Hide()
    191 
    192     def update_disclaimer(self, disclaimer):
    193         if disclaimer:
    194             self.container_disclaimer.Show()
    195             self.container_disclaimer.set_text(disclaimer)
    196         else:
    197             self.container_disclaimer.Hide()
    198 
    199     def update_ship_requirements(self, should_show):
    200         if should_show:
    201             self.container_ship_requirements_warning.Show()
    202         else:
    203             self.container_ship_requirements_warning.Hide()
    204 
    205     def update_ship_requirements_info(self, dungeon_id = None):
    206         self.container_ship_requirements_warning.set_restrictions_info(dungeon_id, in_valid_ship=False, ship_window_header=self.title.text)
    207 
    208     def update_title(self, title):
    209         if title:
    210             self.title.SetText(GetByMessageID(title))
    211             self.container_title.Show()
    212         else:
    213             self.container_title.Hide()
    214 
    215     def update_lore(self, lore, show_all = False):
    216         self.lore_text = fix_text(lore)
    217         self.lore_autosize.set_text(self.lore_text, show_all)
    218 
    219     def update_buttons(self, actions, controller):
    220         self.buttonGroup.FlushButtons()
    221         for label, func, kwargs in reversed(actions):
    222             self.buttonGroup.AddButton(label, func, **(kwargs or {}))
    223 
    224     def update_loading_state(self, is_loading):
    225         if is_loading:
    226             self.loading_wheel.display = True
    227             self.content_cont.opacity = 0
    228         else:
    229             self.loading_wheel.display = False
    230             animations.FadeIn(self.content_cont)
    231 
    232     def disable_buttons(self):
    233         for button in self.buttonGroup.buttons:
    234             button.Disable()
    235 
    236     def enable_buttons(self):
    237         for button in self.buttonGroup.buttons:
    238             button.Enable()
    239 
    240     def show_objectives(self):
    241         self.container_objectives.Show()
    242 
    243     def hide_objectives(self):
    244         self.container_objectives.Hide()
    245 
    246     def on_scroll_size_changed(self, *args):
    247         self.update_end_line()
    248 
    249     def update_end_line(self):
    250         if not self.scroll or not self.end_line:
    251             return
    252         if self.scroll.IsVerticalScrollBarVisible():
    253             self.end_line.Show()
    254         else:
    255             self.end_line.Hide()
    256 
    257     def Close(self):
    258         if self.scroll:
    259             self.scroll.onSizeChangeSignal.disconnect(self.on_scroll_size_changed)
    260         super(NpcInteractionView, self).Close()