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

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