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

bracketPanel.py (5697B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\spacecomponents\client\ui\jumpbridge\bracketPanel.py
      2 import math
      3 from carbonui import uiconst
      4 from carbonui.primitives.containerAutoSize import ContainerAutoSize
      5 from carbonui.primitives.transform import Transform
      6 from carbonui.uianimations import animations
      7 from dynamicresources.client.ess.bracket.panel import BracketPanel, get_absolute_bounds, Priority
      8 from dynamicresources.client.ess.bracket.state_machine import StateMachine
      9 from dynamicresources.client.ess.bracket.tether import BracketTether
     10 from signals import Signal
     11 from spacecomponents.client.ui.rootTransformController import PanelTransformController
     12 
     13 class JumpBridgePanel(BracketPanel):
     14 
     15     def __init__(self, parent, camera, root_transform, content_class, panel_name, offset_y, collapse_at_camera_distance, tether_name, tether_width, on_focus = None, itemID = None, typeID = None, hide_interaction_point_at_camera_distance = 600000.0):
     16         self._camera = camera
     17         self._root_transform = root_transform
     18         self._content_class = content_class
     19         self._state_machine = StateMachine()
     20         self._item_id = itemID
     21         self._type_id = typeID
     22         self.playerRequestedCollapseToken = None
     23         self.on_collapse_changed = Signal('on_collapse_changed')
     24         self._panel_transform = PanelTransformController(root=root_transform, camera=camera, offset_y=offset_y)
     25         self._hide_interaction_point_at_camera_distance = hide_interaction_point_at_camera_distance
     26         super(JumpBridgePanel, self).__init__(name=panel_name, transform=self._panel_transform.transform, layer=parent, camera=camera, collapse_at_camera_distance=collapse_at_camera_distance, clipping_dead_zone=50, on_focus=on_focus, collapsed=True)
     27         self._base = ContainerAutoSize(name='%s_base' % panel_name, alignMode=uiconst.CENTERBOTTOM)
     28         self._main_content = ContainerAutoSize(name='_main_content', parent=self._base, align=uiconst.CENTERBOTTOM, alignMode=uiconst.CENTERBOTTOM)
     29         self._content = ContainerAutoSize(name='_content', parent=self._main_content, align=uiconst.CENTERBOTTOM, alignMode=uiconst.TOPLEFT, state=uiconst.UI_DISABLED if self.is_collapsed else uiconst.UI_PICKCHILDREN, left=0, opacity=0.0 if self.is_collapsed else 1.0)
     30         self._content_tracker_token = self.tracker.add(self._base, anchor=(0.5, 0.5), offset=(0, -150))
     31         tether_cont = Transform(name=tether_name, rotation=math.radians(270.0), width=100, height=100)
     32         tether_cont.rotationCenter = (1.0, 0.5)
     33         tether_inner_cont = Transform(name='tether_inner_cont', parent=tether_cont, rotation=math.radians(180.0), width=tether_cont.width, height=tether_cont.height)
     34         self._tether = BracketTether(parent=tether_inner_cont, align=uiconst.TOPLEFT, collapsed=True, width=tether_width, on_click=self._on_tether_click, on_close_point_click=self._on_close_point_click)
     35         self.tracker.add(tether_cont, anchor=(1.0, 0.5), offset=(35, 0))
     36         self._on_state_update()
     37 
     38     @property
     39     def item_id(self):
     40         return self._item_id
     41 
     42     @property
     43     def type_id(self):
     44         return self._type_id
     45 
     46     @property
     47     def camera(self):
     48         return self._camera
     49 
     50     @property
     51     def root_transform(self):
     52         return self._root_transform
     53 
     54     @property
     55     def content_class(self):
     56         return self._content_class
     57 
     58     @property
     59     def content_bounds(self):
     60         return get_absolute_bounds(self._main_content)
     61 
     62     @property
     63     def content(self):
     64         return self._content
     65 
     66     def collapse(self, lock = False):
     67         self._main_content.DisableAutoSize()
     68         self._content.state = uiconst.UI_DISABLED
     69         self._tether.collapse(lock=lock)
     70         animations.MorphScalar(self._content, 'top', startVal=self._content.top, endVal=-20, duration=0.2)
     71         animations.FadeOut(self._content, duration=0.2, callback=self._main_content.EnableAutoSize)
     72         self.on_collapse_changed(True)
     73 
     74     def expand(self):
     75         self._tether.expand()
     76         self._content.state = uiconst.UI_PICKCHILDREN
     77         animations.MorphScalar(self._content, 'top', startVal=self._content.top, endVal=0, duration=0.2, timeOffset=0.2, callback=self._main_content.EnableAutoSize)
     78         animations.FadeIn(self._content, duration=0.2, timeOffset=0.2)
     79         self.on_collapse_changed(False)
     80 
     81     def close(self):
     82         self._state_machine.close()
     83         self._base.Close()
     84         self._tether.parent.Close()
     85         self._panel_transform.close()
     86         super(JumpBridgePanel, self).close()
     87 
     88     def _on_state_update(self):
     89         from spacecomponents.client.ui.jumpbridge.states import Idle
     90         self._state_machine.move_to(Idle(self))
     91 
     92     def _on_tether_click(self):
     93         if self.playerRequestedCollapseToken:
     94             self.playerRequestedCollapseToken.clear()
     95         self.force_expand()
     96 
     97     def _on_close_point_click(self):
     98         self.playerRequestedCollapseToken = self.request_collapse(Priority.control_point)
     99 
    100     def _update_interaction_point_in_frame(self):
    101         try:
    102             if self._hide_interaction_point_at_camera_distance is None:
    103                 return
    104             if not self._camera.is_valid:
    105                 return
    106             if not self._tether or self._tether.destroyed:
    107                 return
    108             camera_distance = self._camera.distance_from_transform(self._transform)
    109             out_of_range = camera_distance > self._hide_interaction_point_at_camera_distance
    110             if out_of_range:
    111                 self._tether.hide_interaction_point()
    112             else:
    113                 self._tether.show_interaction_point()
    114         except Exception as e:
    115             pass