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