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

asteroid_bracket.py (7180B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\inflight\bracketsAndTargets\asteroid_bracket.py
      2 import carbonui
      3 import carbonui.text.styles
      4 import eveicon
      5 import uthread2
      6 from carbonui import uiconst, Align, PickState
      7 from carbonui.primitives.layoutGrid import LayoutGrid
      8 from carbonui.primitives.sprite import Sprite
      9 from carbonui.uianimations import animations
     10 from eve.client.script.parklife import states
     11 from eve.client.script.ui.inflight.bracketsAndTargets.expanded_bracket import ExpandedBracket, get_label_and_value_formatted
     12 from eve.client.script.ui.inflight.bracketsAndTargets.inSpaceBracket import InSpaceBracket
     13 from eve.common.script.util.eveFormat import FmtISK
     14 from localization import GetByLabel
     15 from mining.client import mining_signals, mining_util
     16 from mining.client.asteroid_scanning_service import AsteroidScanningService, QUANTITY_UNKNOWN
     17 from mining.client.mining_const import MiningQuantityColor
     18 
     19 class AsteroidBracket(InSpaceBracket):
     20 
     21     def update_icon_visibility(self):
     22         self.icon_sprite.display = self.isSelected
     23 
     24     def Select(self, is_selected):
     25         super(AsteroidBracket, self).Select(is_selected)
     26         self.update_icon_visibility()
     27 
     28     def has_expanded_bracket(self):
     29         return True
     30 
     31     def show_expanded_bracket(self):
     32         if not self.expanded_bracket:
     33             self.expanded_bracket = ExpandedBracketAsteroid(parent=self.parent, item_id=self.itemID, bracket=self, idx=0)
     34 
     35 
     36 class ExpandedBracketAsteroid(ExpandedBracket):
     37 
     38     def __init__(self, item_id, bracket = None, **kwargs):
     39         super(ExpandedBracketAsteroid, self).__init__(item_id=item_id, bracket=bracket, **kwargs)
     40         self.connect_signals()
     41 
     42     def Close(self, **kwargs):
     43         super(ExpandedBracketAsteroid, self).Close()
     44         self.disconnect_signals()
     45 
     46     def connect_signals(self):
     47         mining_signals.on_ore_mined.connect(self.on_ore_mined)
     48         mining_signals.on_mining_scan_completed.connect(self.on_mining_scan_completed)
     49         mining_signals.on_mining_overlay_disabled.connect(self.on_mining_overlay_disabled)
     50 
     51     def disconnect_signals(self):
     52         mining_signals.on_ore_mined.disconnect(self.on_ore_mined)
     53         mining_signals.on_mining_scan_completed.disconnect(self.on_mining_scan_completed)
     54         mining_signals.on_mining_overlay_disabled.connect(self.on_mining_overlay_disabled)
     55 
     56     def on_mining_overlay_disabled(self):
     57         self.update()
     58 
     59     def on_mining_scan_completed(self):
     60         self.update()
     61 
     62     def construct_layout(self):
     63         super(ExpandedBracketAsteroid, self).construct_layout()
     64         self.construct_crit_container()
     65 
     66     def construct_labels(self):
     67         super(ExpandedBracketAsteroid, self).construct_labels()
     68         self.est_value_label = carbonui.text.styles.TextDetail(name='est_value_label', parent=self.layout_grid, display=False, pickState=PickState.OFF)
     69         self.total_value_label = carbonui.text.styles.TextDetail(name='total_value_label', parent=self.layout_grid, display=False, pickState=PickState.OFF)
     70         self.num_units_label = carbonui.text.styles.TextDetail(name='num_units_label', parent=self.layout_grid, pickState=PickState.OFF, display=False)
     71 
     72     def construct_crit_container(self):
     73         self.crit_container = LayoutGrid(parent=self.layout_grid, align=Align.TOPLEFT, columns=2, cellSpacing=(4, 0), display=False, pickState=PickState.OFF)
     74         Sprite(parent=self.crit_container, align=Align.CENTERLEFT, color=MiningQuantityColor.CRIT_BONUS, texturePath=eveicon.crit_success, pos=(0, 0, 16, 16))
     75         self.crit_label = carbonui.text.styles.TextDetail(name='asteroid_crit_label', parent=self.crit_container, color=MiningQuantityColor.CRIT_BONUS, align=Align.CENTERLEFT)
     76 
     77     def on_ore_mined(self, asteroid_id, module_item_id, type_id, mined_quantity, crit_quantity, wasted_quantity):
     78         if asteroid_id != self.item_id:
     79             return
     80         if crit_quantity:
     81             self.indicate_critical_hit(crit_quantity)
     82 
     83     def indicate_critical_hit(self, quantity):
     84         uthread2.start_tasklet(self._show_critical_hit, quantity)
     85 
     86     def _show_critical_hit(self, quantity):
     87         self.crit_label.text = GetByLabel('UI/Mining/CriticalHit', amount=quantity)
     88         self.crit_container.display = True
     89         self.layout_grid.UpdateGridLayout()
     90         animations.BlinkIn(self.crit_container, loops=3, sleep=True)
     91         uthread2.sleep(2.0)
     92         animations.FadeOut(self.crit_container, duration=0.6, sleep=True)
     93         self.crit_container.display = False
     94 
     95     def update(self, is_bracket_floating = True):
     96         super(ExpandedBracketAsteroid, self).update(is_bracket_floating)
     97         quantity = self.get_known_asteroid_quantity()
     98         self.est_value_label.text = self.get_est_value_text()
     99         self.est_value_label.display = bool(self.est_value_label.text)
    100         self.total_value_label.text = self.get_est_total_value_text()
    101         self.total_value_label.display = bool(self.total_value_label.text)
    102         self.num_units_label.text = self.get_num_units_text(quantity)
    103         self.num_units_label.display = bool(self.num_units_label.text)
    104 
    105     def get_est_value_text(self):
    106         if not AsteroidScanningService.get_instance().is_scanned(self.item_id):
    107             return ''
    108         if not (self.is_selected or self.is_hilited):
    109             return ''
    110         value = mining_util.get_volume_est_price_formatted(self.slim_item.typeID)
    111         if not value:
    112             value = GetByLabel('UI/Generic/Unknown')
    113         return get_label_and_value_formatted(GetByLabel('UI/Common/Value'), value)
    114 
    115     def get_est_total_value_text(self):
    116         quantity = self.get_known_asteroid_quantity()
    117         if not quantity:
    118             return ''
    119         if not (self.is_selected or self.is_hilited):
    120             return ''
    121         unit_price = mining_util.get_unit_est_price(self.slim_item.typeID)
    122         if not unit_price:
    123             return ''
    124         value = FmtISK(unit_price * quantity)
    125         return get_label_and_value_formatted(GetByLabel('UI/Common/TotalValue'), value)
    126 
    127     def get_num_units_text(self, quantity):
    128         if quantity:
    129             if sm.GetService('target').IsTarget(self.item_id):
    130                 quantity_text = GetByLabel('UI/Shared/NumberOfUnits', num_units=quantity)
    131             else:
    132                 if quantity < 1000:
    133                     digits = 2
    134                 else:
    135                     digits = 3
    136                 quantity = round(quantity, -digits)
    137                 quantity_text = GetByLabel('UI/Mining/EstNumberOfUnits', num_units=int(quantity))
    138             return get_label_and_value_formatted(GetByLabel('UI/Common/Quantity'), quantity_text)
    139         else:
    140             return ''
    141 
    142     def get_known_asteroid_quantity(self):
    143         quantity = AsteroidScanningService.get_instance().get_quantity(self.item_id)
    144         if quantity is not QUANTITY_UNKNOWN:
    145             return quantity
    146 
    147     @property
    148     def is_selected(self):
    149         return sm.GetService('stateSvc').GetExclState(states.selected) == self.item_id
    150 
    151     @property
    152     def is_hilited(self):
    153         return sm.GetService('stateSvc').GetExclState(states.mouseOver) == self.item_id