my_ship_bracket.py (5548B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\inflight\bracketsAndTargets\my_ship_bracket.py 2 import geo2 3 import logging 4 import trinity 5 import uthread2 6 from carbonui import PickState 7 from carbonui.primitives.bracket import Bracket 8 from carbonui.uicore import uicore 9 from eve.client.script.parklife.sceneManager import GetSceneManager 10 from eve.client.script.remote.michelle import GetMichelle 11 from eve.client.script.ui.inflight.bracketsAndTargets.navigationBracket import NavigationBracket 12 from eve.client.script.ui.shared.inventory.invConst import ContainerType 13 from mining.client import mining_signals 14 from mining.client.mining_overlay_controller import MiningOverlayController 15 from mining.client.ui.circular_inventory_gauge import CircularInventoryGauge 16 log = logging.getLogger(__name__) 17 18 class MyShipBracket(NavigationBracket): 19 20 def __init__(self, **kwargs): 21 super(MyShipBracket, self).__init__(**kwargs) 22 self.ore_hold_bracket = None 23 self.connect_signals() 24 uthread2.start_tasklet(self._init_ore_hold_bracket) 25 26 def _init_ore_hold_bracket(self): 27 self.check_show_ore_hold_bracket() 28 29 def connect_signals(self): 30 mining_signals.on_mining_overlay_enabled.connect(self.on_mining_overlay_enabled) 31 mining_signals.on_mining_overlay_disabled.connect(self.on_mining_overlay_disabled) 32 33 def disconnect_signals(self): 34 mining_signals.on_mining_overlay_enabled.disconnect(self.on_mining_overlay_enabled) 35 mining_signals.on_mining_overlay_disabled.disconnect(self.on_mining_overlay_disabled) 36 37 def on_mining_overlay_disabled(self): 38 self.hide_ore_hold_bracket() 39 40 def on_mining_overlay_enabled(self): 41 self.show_ore_hold_bracket() 42 43 def check_show_ore_hold_bracket(self): 44 if MiningOverlayController.get_instance().is_active: 45 self.show_ore_hold_bracket() 46 else: 47 self.hide_ore_hold_bracket() 48 49 def show_ore_hold_bracket(self): 50 if self.destroyed: 51 return 52 if not self.ore_hold_bracket: 53 self.ore_hold_bracket = True 54 self.ore_hold_bracket = OreHoldBracket(parent=uicore.layer.bracket, pickState=PickState.ON) 55 else: 56 self.ore_hold_bracket.update_offset() 57 58 def hide_ore_hold_bracket(self): 59 if self.ore_hold_bracket: 60 self.ore_hold_bracket.Close() 61 self.ore_hold_bracket = None 62 63 def remove_all_attachments(self): 64 super(MyShipBracket, self).remove_all_attachments() 65 self.hide_ore_hold_bracket() 66 67 def Close(self): 68 super(MyShipBracket, self).Close() 69 self.disconnect_signals() 70 71 72 class OreHoldBracket(Bracket): 73 default_width = 32 74 default_height = 32 75 76 def __init__(self, **kwargs): 77 super(OreHoldBracket, self).__init__(**kwargs) 78 self.projectBracket.parent = uicore.layer.inflight.GetRenderObject() 79 self.trackTransform = trinity.EveTransform() 80 self.gauge = None 81 uthread2.start_tasklet(self.initialize) 82 83 def initialize(self): 84 self.gauge = CircularInventoryGauge(parent=self, inv_controller=self._get_inv_controller()) 85 self._connect_transform_to_ship_model() 86 self.update_thread() 87 88 def update_thread(self): 89 while not self.destroyed: 90 zoom_prop = self._get_zoom_prop() 91 self._update_offset(zoom_prop) 92 self.updage_gauge_visibility(zoom_prop) 93 uthread2.yield_() 94 95 def _connect_transform_to_ship_model(self): 96 model = self._get_active_ship_model() 97 if model and self.trackTransform: 98 model.children.append(self.trackTransform) 99 100 def _get_zoom_prop(self): 101 camera = GetSceneManager().GetActiveSpaceCamera() 102 zoom_prop = camera.GetZoomProportion() 103 return zoom_prop 104 105 def updage_gauge_visibility(self, zoom_prop): 106 if not self.gauge: 107 return 108 if zoom_prop < 0.65: 109 opacity = 1.0 110 else: 111 opacity = 1.0 - 30 * (zoom_prop - 0.65) ** 2 112 opacity = max(0.0, opacity) 113 self.gauge.opacity = opacity 114 self.gauge.display = bool(opacity) 115 116 def update_offset(self): 117 self._update_offset(self._get_zoom_prop()) 118 119 def _update_offset(self, zoom_prop): 120 if not self.trackTransform: 121 return 122 model = self._get_active_ship_model() 123 if model: 124 offset = (zoom_prop + 1.0) * model.shapeEllipsoidRadius[2] 125 vec_center = model.shapeEllipsoidCenter 126 else: 127 offset = 0 128 vec_center = (0, 0, 0) 129 self.trackTransform.translation = geo2.Vec3Add(vec_center, (0, 0, -offset)) 130 131 def _get_active_ship_model(self): 132 ball = GetMichelle().GetBall(session.shipid) 133 if ball: 134 return ball.model 135 136 def Close(self): 137 super(OreHoldBracket, self).Close() 138 try: 139 model = self._get_active_ship_model() 140 if model: 141 model.children.fremove(self.trackTransform) 142 except Exception as e: 143 log.exception(e) 144 145 def _get_inv_controller(self): 146 tree_data = sm.GetService('inv').get_active_ship_tree_data() 147 mining_hold_tree_data = tree_data.GetChildByID((ContainerType.SHIP_GENERAL_MINING_HOLD, session.shipid)) 148 if mining_hold_tree_data: 149 inv_controller = mining_hold_tree_data.invController 150 else: 151 inv_controller = tree_data.invController 152 return inv_controller